refactor: move spa to frontend folder

This commit is contained in:
2025-10-27 12:32:38 +03:00
committed by Nikita Kiselev
parent 5681ac592a
commit 0cccc7e3d7
40 changed files with 1566 additions and 35 deletions

View File

@@ -95,6 +95,7 @@ class ControllerExtensionModuleTgshop extends Controller
if ($hasConfig) {
$this->updateConfigFromDefaults();
$this->cleanUpOldAssets();
$this->injectVueJs();
$this->config();
} else {
$this->init();
@@ -107,7 +108,12 @@ class ControllerExtensionModuleTgshop extends Controller
$this->document->setTitle($this->language->get('heading_title'));
if (($this->request->server['REQUEST_METHOD'] === 'POST') && $this->validate()) {
$this->model_setting_setting->editSetting('module_tgshop', $this->request->post);
$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'];
}
$this->model_setting_setting->editSetting('module_tgshop', $postData);
$this->session->data['success'] = $this->language->get('text_success');
@@ -130,6 +136,13 @@ class ControllerExtensionModuleTgshop extends Controller
$data['settings'] = $this->getSettingsConfig();
$data['banners'] = [];
$banners = $this->config->get('module_tgshop_mainpage_banners');
if ($banners) {
$banners = html_entity_decode($banners);
$data['banners'] = $banners;
}
foreach ($data['settings'] as $configs) {
foreach ($configs as $key => $config) {
if ($config['type'] === 'image') {
@@ -355,6 +368,7 @@ TEXT,
'module_tgshop_text_no_more_products' => 'Это всё по текущему запросу. Попробуйте уточнить фильтры или поиск.',
'module_tgshop_text_empty_cart' => 'Ваша корзина пуста',
'module_tgshop_text_order_created_success' => 'Ваш заказ успешно оформлен и будет обработан в ближайшее время.',
'module_tgshop_mainpage_banners' => '[]',
];
}
@@ -535,14 +549,6 @@ HTML,
],
'help' => <<<HTML
Позволяет покупателям использовать <a href="{$ocVouchersLink}" target="_blank">подарочные сертификаты OpenCart</a> при оформлении заказа.
HTML,
],
'module_tgshop_home_banner_id' => [
'type' => 'select',
'options' => $this->getBannersList(),
'help' => <<<HTML
<a href="{$ocBannersLink}" target="_blank">Стандартный OpenCart баннер</a> отображаемый на главной странице магазина. Рекомендуемое соотношение сторон для изображений - 2.5:1 (например 500×200).
HTML,
],
],
@@ -703,4 +709,17 @@ HTML,
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');
} elseif (file_exists("$appDir/view/integration.js")) {
$this->document->addScript('view/integration.js');
} else {
throw new RuntimeException('Unable to load Vuejs frontend.');
}
}
}

View File

@@ -0,0 +1,18 @@
(function() {
function injectVueScript() {
const script = document.createElement('script');
script.type = 'module';
//if (window.vueIntegration && window.vueIntegration.developmentEnv) {
script.src = 'http://localhost:3000/src/main.js';
//} else {
// script.src = '/path/to/built/main.js';
//}
document.body.appendChild(script);
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', injectVueScript);
} else { // Документ уже загружен
injectVueScript();
}
})();

View File

@@ -48,6 +48,11 @@
</a>
</li>
{% endfor %}
<li>
<a href="#banners" data-toggle="tab">
Баннеры
</a>
</li>
</ul>
<div class="tab-content">
@@ -442,6 +447,16 @@
{% endfor %}
</div>
{% endfor %}
<div id="banners" class="tab-pane">
<script>
window.TeleCart = {
user_token: '{{ user_token }}',
banners: '{{ banners }}',
};
</script>
<div id="app">App Loading...</div>
</div>
</div>
</form>
</div>