feat(slider): add slider feature
This commit is contained in:
@@ -93,6 +93,7 @@ class ControllerExtensionModuleTgshop extends Controller
|
||||
$hasConfig = $this->config->get('module_tgshop_app_name') !== null;
|
||||
|
||||
if ($hasConfig) {
|
||||
$this->cleanUpConfigs();
|
||||
$this->updateConfigFromDefaults();
|
||||
$this->cleanUpOldAssets();
|
||||
$this->injectVueJs();
|
||||
@@ -109,9 +110,9 @@ class ControllerExtensionModuleTgshop extends Controller
|
||||
|
||||
if (($this->request->server['REQUEST_METHOD'] === 'POST') && $this->validate()) {
|
||||
$postData = $this->request->post;
|
||||
$postData['module_tgshop_mainpage_banners'] = [];
|
||||
if (! empty($_POST['module_tgshop_mainpage_banners'])) {
|
||||
$postData['module_tgshop_mainpage_banners'] = $_POST['module_tgshop_mainpage_banners'];
|
||||
$postData['module_tgshop_mainpage_slider'] = [];
|
||||
if (! empty($_POST['module_tgshop_mainpage_slider'])) {
|
||||
$postData['module_tgshop_mainpage_slider'] = $_POST['module_tgshop_mainpage_slider'];
|
||||
}
|
||||
$this->model_setting_setting->editSetting('module_tgshop', $postData);
|
||||
|
||||
@@ -136,11 +137,11 @@ class ControllerExtensionModuleTgshop extends Controller
|
||||
|
||||
$data['settings'] = $this->getSettingsConfig();
|
||||
|
||||
$data['banners'] = [];
|
||||
$banners = $this->config->get('module_tgshop_mainpage_banners');
|
||||
$data['mainpage_slider'] = [];
|
||||
$banners = $this->config->get('module_tgshop_mainpage_slider');
|
||||
if ($banners) {
|
||||
$banners = html_entity_decode($banners);
|
||||
$data['banners'] = $banners;
|
||||
$data['mainpage_slider'] = $banners;
|
||||
}
|
||||
|
||||
foreach ($data['settings'] as $configs) {
|
||||
@@ -364,11 +365,20 @@ TEXT,
|
||||
'module_tgshop_enable_store' => 1,
|
||||
'module_tgshop_feature_coupons' => 0,
|
||||
'module_tgshop_feature_vouchers' => 0,
|
||||
'module_tgshop_home_banner_id' => null,
|
||||
'module_tgshop_text_no_more_products' => 'Это всё по текущему запросу. Попробуйте уточнить фильтры или поиск.',
|
||||
'module_tgshop_text_empty_cart' => 'Ваша корзина пуста',
|
||||
'module_tgshop_text_order_created_success' => 'Ваш заказ успешно оформлен и будет обработан в ближайшее время.',
|
||||
'module_tgshop_mainpage_banners' => '[]',
|
||||
'module_tgshop_mainpage_slider' => json_encode([
|
||||
'is_enabled' => false,
|
||||
'effect' => 'slide',
|
||||
'pagination' => true,
|
||||
'scrollbar' => false,
|
||||
'free_mode' => false,
|
||||
'space_between' => 30,
|
||||
'autoplay' => false,
|
||||
'loop' => false,
|
||||
'slides' => [],
|
||||
], JSON_THROW_ON_ERROR),
|
||||
];
|
||||
}
|
||||
|
||||
@@ -384,11 +394,6 @@ TEXT,
|
||||
'user_token=' . $this->session->data['user_token'],
|
||||
true
|
||||
);
|
||||
$ocBannersLink = $this->url->link(
|
||||
'design/banner',
|
||||
'user_token=' . $this->session->data['user_token'],
|
||||
true
|
||||
);
|
||||
|
||||
return [
|
||||
'general' => [
|
||||
@@ -698,28 +703,22 @@ HTML,
|
||||
}
|
||||
}
|
||||
|
||||
private function getBannersList(): array
|
||||
{
|
||||
$this->load->model('design/banner');
|
||||
$allBanners = $this->model_design_banner->getBanners();
|
||||
$map = [];
|
||||
foreach ($allBanners as $item) {
|
||||
$map[(int) $item['banner_id']] = $item['name'];
|
||||
}
|
||||
|
||||
return [null => 'Не показывать'] + $map;
|
||||
}
|
||||
|
||||
private function injectVueJs(): void
|
||||
{
|
||||
$appDir = rtrim(DIR_APPLICATION, '/');
|
||||
if (file_exists("$appDir/view/javascript/telecart/telecart.js")) {
|
||||
$this->document->addScript('view/javascript/telecart/telecart.js');
|
||||
$this->document->addStyle('view/javascript/telecart/telecart.css');
|
||||
$hash = md5(file_get_contents($appDir . '/view/javascript/telecart/manifest.json'));
|
||||
$this->document->addScript('view/javascript/telecart/telecart.js?v=' . $hash);
|
||||
$this->document->addStyle('view/javascript/telecart/telecart.css?v=' . $hash);
|
||||
} elseif (file_exists("$appDir/view/integration.js")) {
|
||||
$this->document->addScript('view/integration.js');
|
||||
} else {
|
||||
throw new RuntimeException('Unable to load Vuejs frontend.');
|
||||
}
|
||||
}
|
||||
|
||||
private function cleanUpConfigs(): void
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
|
||||
@@ -452,7 +452,7 @@
|
||||
<script>
|
||||
window.TeleCart = {
|
||||
user_token: '{{ user_token }}',
|
||||
banners: '{{ banners }}',
|
||||
mainpage_slider: '{{ mainpage_slider }}',
|
||||
};
|
||||
</script>
|
||||
<div id="app">App Loading...</div>
|
||||
|
||||
@@ -94,7 +94,7 @@ class ControllerExtensionTgshopHandle extends Controller
|
||||
$this->config->get('module_tgshop_feature_vouchers'),
|
||||
FILTER_VALIDATE_BOOLEAN
|
||||
),
|
||||
'mainpage_banners' => $this->safeJsonDecode($this->config->get('module_tgshop_mainpage_banners'), []),
|
||||
'mainpage_slider' => $this->safeJsonDecode($this->config->get('module_tgshop_mainpage_slider'), []),
|
||||
'texts' => [
|
||||
'no_more_products' => $this->config->get('module_tgshop_text_no_more_products'),
|
||||
'empty_cart' => $this->config->get('module_tgshop_text_empty_cart'),
|
||||
|
||||
@@ -111,7 +111,7 @@ class ImageTool implements ImageToolInterface
|
||||
|
||||
$image = $this->manager->make($fullOldPath)
|
||||
->fit($width, $height, function ($constraint) {
|
||||
$constraint->upsize();
|
||||
// $constraint->upsize();
|
||||
}, $position);
|
||||
|
||||
$image->encode($format, 75)->save($fullNewPath, 75, $format);
|
||||
|
||||
@@ -24,13 +24,12 @@ class BannerHandler
|
||||
|
||||
public function show(): JsonResponse
|
||||
{
|
||||
$data = [];
|
||||
$slides = $this->settings->get('mainpage_banners', []);
|
||||
$slider = $this->settings->get('mainpage_slider', []);
|
||||
|
||||
if ($slides) {
|
||||
foreach ($slides as $index => $slide) {
|
||||
if ($slider && ! empty($slider['slides']) && is_array($slider['slides'])) {
|
||||
foreach ($slider['slides'] as $index => $slide) {
|
||||
if (is_file(DIR_IMAGE . $slide['image'])) {
|
||||
$data[] = [
|
||||
$slider['slides'][$index] = [
|
||||
'id' => $index,
|
||||
'title' => $slide['title'],
|
||||
'link' => $slide['link'],
|
||||
@@ -41,7 +40,7 @@ class BannerHandler
|
||||
}
|
||||
|
||||
return new JsonResponse([
|
||||
'data' => $data,
|
||||
'data' => $slider,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,6 +58,7 @@ class SettingsHandler
|
||||
'feature_vouchers' => $this->settings->get('feature_vouchers') ?? false,
|
||||
'currency_code' => $this->settings->get('oc_default_currency', 'RUB'),
|
||||
'texts' => $this->settings->get('texts'),
|
||||
'mainpage_slider' => $this->settings->get('mainpage_slider'),
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
0
module/oc_telegram_shop/upload/oc_telegram_shop/tests/Integration/Services/CartServiceTest.php
Normal file → Executable file
0
module/oc_telegram_shop/upload/oc_telegram_shop/tests/Integration/Services/CartServiceTest.php
Normal file → Executable file
0
module/oc_telegram_shop/upload/oc_telegram_shop/tests/Integration/Services/OrderCreateServiceTest.php
Normal file → Executable file
0
module/oc_telegram_shop/upload/oc_telegram_shop/tests/Integration/Services/OrderCreateServiceTest.php
Normal file → Executable file
0
module/oc_telegram_shop/upload/oc_telegram_shop/tests/Integration/Services/ProductsServiceTest.php
Normal file → Executable file
0
module/oc_telegram_shop/upload/oc_telegram_shop/tests/Integration/Services/ProductsServiceTest.php
Normal file → Executable file
0
module/oc_telegram_shop/upload/oc_telegram_shop/tests/README.md
Normal file → Executable file
0
module/oc_telegram_shop/upload/oc_telegram_shop/tests/README.md
Normal file → Executable file
Reference in New Issue
Block a user