feat: add texts configuration

This commit is contained in:
2025-10-27 11:13:04 +03:00
parent 515b82302b
commit 34dfe90286
8 changed files with 44 additions and 7 deletions

View File

@@ -3,7 +3,6 @@
use Bastion\ApplicationFactory; use Bastion\ApplicationFactory;
use Openguru\OpenCartFramework\Logger\OpenCartLogAdapter; use Openguru\OpenCartFramework\Logger\OpenCartLogAdapter;
use Openguru\OpenCartFramework\OpenCart\Decorators\OcRegistryDecorator; use Openguru\OpenCartFramework\OpenCart\Decorators\OcRegistryDecorator;
use Openguru\OpenCartFramework\OpenCart\OcConfigDecorator;
$sysLibPath = rtrim(DIR_SYSTEM, '/') . '/library/oc_telegram_shop'; $sysLibPath = rtrim(DIR_SYSTEM, '/') . '/library/oc_telegram_shop';
$basePath = rtrim(DIR_APPLICATION, '/') . '/..'; $basePath = rtrim(DIR_APPLICATION, '/') . '/..';
@@ -353,6 +352,9 @@ TEXT,
'module_tgshop_feature_coupons' => 0, 'module_tgshop_feature_coupons' => 0,
'module_tgshop_feature_vouchers' => 0, 'module_tgshop_feature_vouchers' => 0,
'module_tgshop_home_banner_id' => null, 'module_tgshop_home_banner_id' => null,
'module_tgshop_text_no_more_products' => 'Это всё по текущему запросу. Попробуйте уточнить фильтры или поиск.',
'module_tgshop_text_empty_cart' => 'Ваша корзина пуста',
'module_tgshop_text_order_created_success' => 'Ваш заказ успешно оформлен и будет обработан в ближайшее время.',
]; ];
} }
@@ -472,7 +474,6 @@ HTML,
'help' => 'Для проверки интеграции через кнопку "Проверить" в интерфейсе Яндекс Метрики, необходимо сначала включить "Режим разработчика" на вкладке "Общие".' 'help' => 'Для проверки интеграции через кнопку "Проверить" в интерфейсе Яндекс Метрики, необходимо сначала включить "Режим разработчика" на вкладке "Общие".'
], ],
], ],
'shop' => [ 'shop' => [
'module_tgshop_enable_store' => [ 'module_tgshop_enable_store' => [
'type' => 'select', 'type' => 'select',
@@ -545,7 +546,6 @@ HTML,
HTML, HTML,
], ],
], ],
'orders' => [ 'orders' => [
'module_tgshop_order_default_status_id' => [ 'module_tgshop_order_default_status_id' => [
'type' => 'select', 'type' => 'select',
@@ -560,6 +560,26 @@ HTML,
'help' => 'Группа покупателей, которая будет назначена для заказов, оформленных через Telegram-магазин.', 'help' => 'Группа покупателей, которая будет назначена для заказов, оформленных через Telegram-магазин.',
], ],
], ],
'texts' => [
'module_tgshop_text_no_more_products' => [
'type' => 'text',
'placeholder' => 'Это всё по текущему запросу. Попробуйте уточнить фильтры или поиск.',
'help' => 'Текст, отображаемый в конце списка, когда больше нет доступных товаров. Покупатель дошел до конца списка.',
],
'module_tgshop_text_empty_cart' => [
'type' => 'text',
'placeholder' => 'Ваша корзина пуста',
'help' => 'Текст, отображаемый на странице просмотра корзины, если в ней нет товаров.',
],
'module_tgshop_text_order_created_success' => [
'type' => 'text',
'placeholder' => 'Ваш заказ успешно оформлен и будет обработан в ближайшее время.',
'help' => 'Текст, отображаемый при успешном создании заказа.',
],
],
]; ];
} }

View File

@@ -11,6 +11,7 @@ $_['tab_telegram'] = 'Telegram';
$_['tab_statistics'] = 'Статистика'; $_['tab_statistics'] = 'Статистика';
$_['tab_shop'] = 'Магазин'; $_['tab_shop'] = 'Магазин';
$_['tab_orders'] = 'Заказы'; $_['tab_orders'] = 'Заказы';
$_['tab_texts'] = 'Тексты';
$_['lbl_module_tgshop_status'] = 'Статус'; $_['lbl_module_tgshop_status'] = 'Статус';
$_['lbl_module_tgshop_app_name'] = 'Название приложения'; $_['lbl_module_tgshop_app_name'] = 'Название приложения';
@@ -34,6 +35,9 @@ $_['lbl_module_tgshop_feature_coupons'] = 'Промокоды';
$_['lbl_module_tgshop_feature_vouchers'] = 'Подарочные сертификаты'; $_['lbl_module_tgshop_feature_vouchers'] = 'Подарочные сертификаты';
$_['lbl_module_tgshop_home_banner_id'] = 'Баннер на главной'; $_['lbl_module_tgshop_home_banner_id'] = 'Баннер на главной';
$_['lbl_module_tgshop_debug'] = 'Режим разработчика'; $_['lbl_module_tgshop_debug'] = 'Режим разработчика';
$_['lbl_module_tgshop_text_no_more_products'] = 'Текст в конце списка товаров';
$_['lbl_module_tgshop_text_empty_cart'] = 'Текст пустой корзины';
$_['lbl_module_tgshop_text_order_created_success'] = 'Текст для успешного заказа';
// Entry // Entry
$_['entry_status'] = 'Статус'; $_['entry_status'] = 'Статус';

View File

@@ -95,6 +95,11 @@ class ControllerExtensionTgshopHandle extends Controller
FILTER_VALIDATE_BOOLEAN FILTER_VALIDATE_BOOLEAN
), ),
'home_banner_id' => $this->config->get('module_tgshop_home_banner_id'), 'home_banner_id' => $this->config->get('module_tgshop_home_banner_id'),
'texts' => [
'no_more_products' => $this->config->get('module_tgshop_text_no_more_products'),
'empty_cart' => $this->config->get('module_tgshop_text_empty_cart'),
'order_created_success' => $this->config->get('module_tgshop_text_order_created_success'),
],
]); ]);
$app->bind(OcModelCatalogProductAdapter::class, function () { $app->bind(OcModelCatalogProductAdapter::class, function () {

View File

@@ -57,6 +57,7 @@ class SettingsHandler
'feature_coupons' => $this->settings->get('feature_coupons') ?? false, 'feature_coupons' => $this->settings->get('feature_coupons') ?? false,
'feature_vouchers' => $this->settings->get('feature_vouchers') ?? false, 'feature_vouchers' => $this->settings->get('feature_vouchers') ?? false,
'currency_code' => $this->settings->get('oc_default_currency', 'RUB'), 'currency_code' => $this->settings->get('oc_default_currency', 'RUB'),
'texts' => $this->settings->get('texts'),
]); ]);
} }

View File

@@ -31,7 +31,7 @@
</div> </div>
<div v-else-if="hasMore === false" class="text-xs text-center mt-4 pt-4 mb-2 border-t"> <div v-else-if="hasMore === false" class="text-xs text-center mt-4 pt-4 mb-2 border-t">
{{ settings.noMoreProductsMessage }} {{ settings.texts.no_more_products }}
</div> </div>
</template> </template>

View File

@@ -23,7 +23,11 @@ export const useSettingsStore = defineStore('settings', {
'--product_list_title_max_lines': 2, '--product_list_title_max_lines': 2,
} }
}, },
noMoreProductsMessage: '🔚 Это всё по текущему запросу. Попробуйте уточнить фильтры или поиск.', texts: {
no_more_products: 'Нет товаров',
empty_cart: 'Корзина пуста',
order_created_success: 'Заказ успешно оформлен.',
},
}), }),
actions: { actions: {
@@ -46,6 +50,7 @@ export const useSettingsStore = defineStore('settings', {
this.feature_coupons = settings.feature_coupons; this.feature_coupons = settings.feature_coupons;
this.feature_vouchers = settings.feature_vouchers; this.feature_vouchers = settings.feature_vouchers;
this.currency_code = settings.currency_code; this.currency_code = settings.currency_code;
this.texts = settings.texts;
} }
} }
}); });

View File

@@ -125,7 +125,7 @@
class="text-center rounded-2xl" class="text-center rounded-2xl"
> >
<div class="text-5xl mb-4">🛒</div> <div class="text-5xl mb-4">🛒</div>
<p class="text-lg mb-3">Ваша корзина пуста</p> <p class="text-lg mb-3">{{ settings.texts.empty_cart }}</p>
<RouterLink class="btn btn-primary" to="/">Начать покупки</RouterLink> <RouterLink class="btn btn-primary" to="/">Начать покупки</RouterLink>
</div> </div>
</div> </div>

View File

@@ -8,7 +8,7 @@
</div> </div>
<p class="text-2xl font-bold mb-3">Спасибо за заказ!</p> <p class="text-2xl font-bold mb-3">Спасибо за заказ!</p>
<p class="text-center mb-4">Ваш заказ успешно оформлен и будет обработан в ближайшее время.</p> <p class="text-center mb-4">{{ settings.texts.order_created_success }}</p>
<ul v-if="checkout.order" class="list w-full bg-base-200 mb-4"> <ul v-if="checkout.order" class="list w-full bg-base-200 mb-4">
<li class="list-row flex justify-between"> <li class="list-row flex justify-between">
@@ -41,9 +41,11 @@ import {useCheckoutStore} from "@/stores/CheckoutStore.js";
import {onMounted} from "vue"; import {onMounted} from "vue";
import {useYaMetrikaStore} from "@/stores/yaMetrikaStore.js"; import {useYaMetrikaStore} from "@/stores/yaMetrikaStore.js";
import {useRoute} from "vue-router"; import {useRoute} from "vue-router";
import {useSettingsStore} from "@/stores/SettingsStore.js";
const checkout = useCheckoutStore(); const checkout = useCheckoutStore();
const yaMetrika = useYaMetrikaStore(); const yaMetrika = useYaMetrikaStore();
const settings = useSettingsStore();
const route = useRoute(); const route = useRoute();
onMounted(() => { onMounted(() => {