Хорошая тема. Любые вопросы по CS-Cart и не только

и еще вопрос, можно ли допилить модуль Unisender, чтобы на каждый статус заказа было свое СМС уведомление, и чтобы было условие в зависимости от способа доставки?

то есть если самовывоз “Ваш заказ НОМЕР на сумму СУММА. Самовывоз ДАТА ВРЕМЯ”
доставка “Ваш заказ НОМЕР на сумму СУММА. Доставка ДАТА ВРЕМЯ”

и тд

Добрый день.
Сталкивался ли кто-то с исчезанием у клиентов товаров из корзины?
Мне пожаловались 2 клиента, что товары пропадают из корзины при переходе из одной категории в другую. Например - добавили 2 товара, затем кликают на новую категорию комбинезонов, и после перехода на страницу этой категории корзина пустая.

Заранее спасибо за помощь в этом вопросе.

Сейчас, чтобы не дергать клиентов я отключил оповещение про куки, но GDPR работает - просто нет информирования о куках. Заказы создаются ежедневно, значит массовой проблемы нет. Я работаю в 2х браузерах (яндекс и хром) и сам создаю иногда заказы - все работает.

Почему у клиентов может возникать такая проблема? Из-за включения какой-то защиты, которая отключает сохранение куков? Что, если не сохранять куки, то товары исчезнут из корзины?

Если куки отключены, то товары даже нельзя будет добавить в корзину и будет при каждом действии на сайте предупреждение, что надо включить куки.

Куки по-умолчанию у CS Cart хранятся неделю; время жизни корзины у неавторизованных пользователей примерно такое же, а у авторизованных – 2 недели.

Проблему очистки корзины наблюдал при использовании Redis в качестве хранилища сессий, так как по-умолчанию он хранил сессию с инфой о корзинах и закладках два часа, а затем удалял её, если пользователь не был на сайте более двух часов. Но под ваше описание это не подходит.

Наш модуль не стоит с подсчетом доставки на странице товара? В первых версиях была такая проблема

Добрый день.
Нет, такого модуля нет. Из модулей Ecomlabs установлены:
[eCom Labs] Up-sells И Cross-sells
[eCom Labs] Скрыть Отсутствующие Варианты
[eCom Labs] Случайные Товары

Буду признателен, если проверите, могут ли они вызывать такую ошибку

Подскажите как победить проблему с валютой российский рубль. Дело в том что если использовать стандартное обозначение то в “хлебных крошках” отображается не знак рубля а само обозначение Р.
Но если использовать именно символ в как код html ք то все ок но он не такой красивый и съезжает вниз(так как находится в нижнем регистре).

В шаблоне вывода этой строки можно попробовать добавить модификатор nofilter
Хотя в исходной версии уже стоит данный параметр {$bc.title|strip_tags|escape:“html” nofilter}
Проверьте, есть ли он там

Нет, эти не могут

Такое ощущение, что у них этот файл модуль какой-то перезаписывает

design/themes/ТЕМА/templates/common/breadcrumbs.tpl

Переделываю немного под себя модуль https://marketplace.cs-cart.com/add-ons/site-management/delivery-date.html

Подскажите, как в этот скрипт добавить условие {if $shipping.shipping_id == “”}, что min и max значения были в зависимости от способа доставки?

в модуле используется плагин http://amsul.ca/pickadate.js/, min и max это ограничение для дат, которые можно выбрать на календаре.

	<script type="text/javascript">
	(function(_, $) {$ldelim}
	    $.ceEvent('on', 'ce.commoninit', function(context) {
		
	    	$('.delivery_date').pickadate({
				format: 'd mmmm yyyy (ddd)',
				formatSubmit: '{$date_format}',
				hiddenName: true,
				showMonthsShort: true,
				min: true,
				max: +5,
				disable: [
					{if $set.disabled_dates && $set.disabled_dates != ""}{$set.disabled_dates},{/if}
					{if !isset($set.disabled_days.N)}{foreach from=$set.disabled_days key=k item=v}{$k}, {/foreach}{/if}
					{if $set.deadline && $set.deadline !="" && $set.deadline <= $smarty.now|date_format:"%k"}{
						from: true, to: true
					},{/if}
				],
				close: '',
				clear: '',
				firstDay: 1,
	    	});
	    	$('.delivery_time').pickatime({
	    		format: 'H:i',
	    		formatSubmit: 'HH:i',
	    		hiddenName: true,
	    		{if $set.time_min && $set.time_min != ""}min: [{$set.time_min}],{/if}
	    		{if $set.time_max && $set.time_max != ""}max: [{$set.time_max}],{/if}
	    		{if $set.time_step && $set.time_step != ""}interval: {$set.time_step},{/if}
	    		clear: '',
	    	});

	    });
	{$rdelim}(Tygh, Tygh.$));
	</script>

А сам массив $shipping выводится, если добавить?

{$shipping|fn_print_r}

Неделю пытаюсь преодолеть непонятные глюки при импорте товаров из XML-файла. Подскажите, в чем может быть дело, если после нажатия на кнопку “Импорт”, за тем нескольких минут ожидания открывается подсказка, что данные импортированы успешно и при этом все товары по нулям.

да, выводиться

shipping_method.post.tpl это шаблон

я в нем же, через условие сделал разные временные интервалы для способов доставки

   		{if $set.show_time_periods == "Y" && $set.time_periods_for[$shipping.shipping_id] && $shipping.shipping_id == 11}
		<select name="delivery_time_period">
            {$s = str_replace("_", "9:30 – 17:30", $s)}
            <option {if $smarty.session.cart.delivery_time_period == $s} selected="selected"{/if} value="9:30 – 17:30">9:30 – 17:30</option>
    </select>
    {/if}
    {if $set.show_time_periods == "Y" && $set.time_periods_for[$shipping.shipping_id] && $shipping.shipping_id == 13}
		<select name="delivery_time_period">
            {$d = str_replace("_", "17:00 – 21:00", $d)}
            <option {if $smarty.session.cart.delivery_time_period == $d} selected="selected"{/if} value="17:00 – 21:00">17:00 – 21:00</option>
    </select>
    {/if}

и весь код из него

  {$set = $addons.loogaru_delivery_date}
{if $settings.Appearance.calendar_date_format == "month_first"}
    {assign var="date_format" value="m/d/yyyy"}
    {assign var="date_format_smarty" value="%m/%d/%Y"}
{else}
    {assign var="date_format" value="d/m/yyyy"}
    {assign var="date_format_smarty" value="%d/%m/%Y"}
{/if}
{if $cart.chosen_shipping.$group_key == $shipping.shipping_id && $set.date_for[$shipping.shipping_id]}
	<div class="ty-control-group">
		<div class="controls">
		<div class="ty-calendar__block" style="width:300px;">
			<input class="delivery_date ty-calendar__input" type="text" name="delivery_date" data-value="{if $smarty.session.cart.delivery_date}{$smarty.session.cart.delivery_date|date_format:$date_format_smarty}{/if}" /><i class="ty-icon-calendar ty-calendar__button" style="pointer-events:none;"></i></div>

		{if $set.show_time == "Y" && $set.time_for[$shipping.shipping_id]}
			<input class="delivery_time input-time" size="5" maxlength="5" type="text" name="delivery_time" value="{$smarty.session.cart.delivery_time}" placeholder="00:00" />
		{/if}

		{if $set.show_time_periods == "Y" && $set.time_periods_for[$shipping.shipping_id] && $shipping.shipping_id == 11}
			<select name="delivery_time_period">
	            {$s = str_replace("_", "9:30 – 17:30", $s)}
	            <option {if $smarty.session.cart.delivery_time_period == $s} selected="selected"{/if} value="9:30 – 17:30">9:30 – 17:30</option>
        </select>
        {/if}

        {if $set.show_time_periods == "Y" && $set.time_periods_for[$shipping.shipping_id] && $shipping.shipping_id == 13}
			<select name="delivery_time_period">
	            {$d = str_replace("_", "17:00 – 21:00", $d)}
	            <option {if $smarty.session.cart.delivery_time_period == $d} selected="selected"{/if} value="17:00 – 21:00">17:00 – 21:00</option>
        </select>
        {/if}

        
		<span>{__("loogaru_asterisk")}</span>
		</div>
		<script type="text/javascript">
		(function(_, $) {$ldelim}
		    $.ceEvent('on', 'ce.commoninit', function(context) {
			
		    	$('.delivery_date').pickadate({
					format: 'd mmmm yyyy (ddd)',
					formatSubmit: '{$date_format}',
					hiddenName: true,
					showMonthsShort: true,
					min: +1,
					max: +7,
					disable: [
						{if $set.disabled_dates && $set.disabled_dates != ""}{$set.disabled_dates},{/if}
						{if !isset($set.disabled_days.N)}{foreach from=$set.disabled_days key=k item=v}{$k}, {/foreach}{/if}
						{if $set.deadline && $set.deadline !="" && $set.deadline <= $smarty.now|date_format:"%k"}{
							from: true, to: true
						},{/if}
					],
					close: '',
					clear: '',
					firstDay: 1,
		    	});

		    	$('.delivery_time').pickatime({
		    		format: 'H:i',
		    		formatSubmit: 'HH:i',
		    		hiddenName: true,
		    		{if $set.time_min && $set.time_min != ""}min: [{$set.time_min}],{/if}
		    		{if $set.time_max && $set.time_max != ""}max: [{$set.time_max}],{/if}
		    		{if $set.time_step && $set.time_step != ""}interval: {$set.time_step},{/if}
		    		clear: '',
		    	});

		    });
		{$rdelim}(Tygh, Tygh.$));
		</script>
	</div>

{/if}

нашел решение

{$set = $addons.loogaru_delivery_date}
{if $settings.Appearance.calendar_date_format == "month_first"}
    {assign var="date_format" value="m/d/yyyy"}
    {assign var="date_format_smarty" value="%m/%d/%Y"}
{else}
    {assign var="date_format" value="d/m/yyyy"}
    {assign var="date_format_smarty" value="%d/%m/%Y"}
{/if}

{if $cart.chosen_shipping.$group_key == $shipping.shipping_id && $set.date_for[$shipping.shipping_id]}


	{if $shipping.shipping_id == 11}
	<div class="ty-control-group">
		<div class="controls">
		<div class="ty-calendar__block" style="width:300px;">
			<input class="delivery_date ty-calendar__input" type="text" name="delivery_date" data-value="{if $smarty.session.cart.delivery_date}{$smarty.session.cart.delivery_date|date_format:$date_format_smarty}{/if}" /><i class="ty-icon-calendar ty-calendar__button" style="pointer-events:none;"></i></div>
			{/if}

	{if $shipping.shipping_id == 13}
	<div class="ty-control-group">
		<div class="controls">
		<div class="ty-calendar__block" style="width:300px;">
			<input class="delivery_date2 ty-calendar__input" type="text" name="delivery_date2" data-value="{if $smarty.session.cart.delivery_date2}{$smarty.session.cart.delivery_date2|date_format:$date_format_smarty}{/if}" /><i class="ty-icon-calendar ty-calendar__button" style="pointer-events:none;"></i></div>
			{/if}


		{if $set.show_time == "Y" && $set.time_for[$shipping.shipping_id]}
			<input class="delivery_time input-time" size="5" maxlength="5" type="text" name="delivery_time" value="{$smarty.session.cart.delivery_time}" placeholder="00:00" />
		{/if}

		{if $set.show_time_periods == "Y" && $set.time_periods_for[$shipping.shipping_id] && $shipping.shipping_id == 11}
			<select name="delivery_time_period">
	            {$s = str_replace("_", "9:30 – 17:30", $s)}
	            <option {if $smarty.session.cart.delivery_time_period == $s} selected="selected"{/if} value="9:30 – 17:30">9:30 – 17:30</option>
        </select>
        {/if}

        {if $set.show_time_periods == "Y" && $set.time_periods_for[$shipping.shipping_id] && $shipping.shipping_id == 13}
			<select name="delivery_time_period">
	            {$d = str_replace("_", "17:00 – 21:00", $d)}
	            <option {if $smarty.session.cart.delivery_time_period == $d} selected="selected"{/if} value="17:00 – 21:00">17:00 – 21:00</option>
        </select>
        {/if}

        
		<span>{__("loogaru_asterisk")}</span>
		</div>
		<script type="text/javascript">
		(function(_, $) {$ldelim}
		    $.ceEvent('on', 'ce.commoninit', function(context) {
			
		    	$('.delivery_date').pickadate({
					format: 'd mmmm yyyy (ddd)',
					formatSubmit: '{$date_format}',
					hiddenName: true,
					showMonthsShort: true,
					min: true,
					max: +5,
					disable: [
						{if $set.disabled_dates && $set.disabled_dates != ""}{$set.disabled_dates},{/if}
						{if !isset($set.disabled_days.N)}{foreach from=$set.disabled_days key=k item=v}{$k}, {/foreach}{/if}
						{if $set.deadline && $set.deadline !="" && $set.deadline <= $smarty.now|date_format:"%k"}{
							from: true, to: true
						},{/if}
					],
					close: '',
					clear: '',
					firstDay: 1,
		    	});


		    	$('.delivery_date2').pickadate({
					format: 'd mmmm yyyy (ddd)',
					formatSubmit: '{$date_format}',
					hiddenName: true,
					showMonthsShort: true,
					min: +2,
					max: +10,
					disable: [
						{if $set.disabled_dates && $set.disabled_dates != ""}{$set.disabled_dates},{/if}
						{if !isset($set.disabled_days.N)}{foreach from=$set.disabled_days key=k item=v}{$k}, {/foreach}{/if}
						{if $set.deadline && $set.deadline !="" && $set.deadline <= $smarty.now|date_format:"%k"}{
							from: true, to: true
						},{/if}
					],
					close: '',
					clear: '',
					firstDay: 1,
		    	});


		    	$('.delivery_time').pickatime({
		    		format: 'H:i',
		    		formatSubmit: 'HH:i',
		    		hiddenName: true,
		    		{if $set.time_min && $set.time_min != ""}min: [{$set.time_min}],{/if}
		    		{if $set.time_max && $set.time_max != ""}max: [{$set.time_max}],{/if}
		    		{if $set.time_step && $set.time_step != ""}interval: {$set.time_step},{/if}
		    		clear: '',
		    	});

		    });
		{$rdelim}(Tygh, Tygh.$));
		</script>
	</div>

{/if}
1 лайк

там все есть

то есть попробовать по-очереди отключать модули и проверить?

Кто нибудь из посещающих эту тему использует импорт товаров из XML-файлов?
Разъясните, каким образом в пресете указывать категорию в которую должен попасть продукт, если у поставщика категории иные, чем у меня?

Можно модификаторы писать, но долго и геморно. Проще загрузить в одну скрытую категорию, потом или массовым редактированием (что тоже пока не сахар), или дальше - экспорт - правка - импорт.

Да, все это не то, чего ожидаешь, но иных путей не вижу.

Я сначала разбирался в XML файле смотрел все категории поставщика и как они обозначаются выписывал все их категории, потом делал карту какая категория куда должна пойти и потом на основании этой схемы писал модификаторы такого типа через точку с запятой можно бесконечное множество case($value=22799737, “Одежда”, $value=1245562, “Products”, $value=24040872, и т.д потом отлавливал которые не попали в категорию записывались в коренную папку и смотрел для каких товаров из категорий не подходят модификаторы и подправлял их.
Потом сделал два файла экспорта один со всеми полями соответствия и установил его для первого импорта всех товаров и в дальнейшем сделал этот файл для импорта только новых товаров и второй тип настройки импорта делал для синхронизации количества и цены где указал соответствие полей артикула количества и цены и указал импортировать только существующие товары с сбросом количества до 0

А как быть, если содержимое в пресете разносится в разные строки?

   <option>
<name>Сезон</name>
<value>Весна - Лето</value>

Вот как в файле:

И вот как получается в пресете:

Хотя должно быть вот так:

Сезон: Весна - Лето
Тип обуви: Мокасины
Пол: Для мальчиков
и тд…