Последние темы


Ajax сортировка товаров + цена, выводимая сниппетом

  • Цена товара в шаблоне категории выводится сниппетом (необходимость возникла из-за зависимости цены товара от курса валюты)
    Часть кода шаблона категории:

    <div class="main-right">
    [[!tmFilters?
    	&filterOuterTpl=`tm2_filterOuterTpl`
    	&filterTpl=`tm2_filterTpl`
    	&filterNumericOuterTpl=`tm2_filterOuterTpl`
    	&filterNumericTpl=`tm2_filterNumericTpl`
    	&jsMap=`1`
    	&toPlaceholder=`filters`
    ]]
    <div id="filters">
    	<form action="[[~[[*id]]]]" method="get">
    	<input type="hidden" name="page_id" value="[[*id]]" disabled="disabled" />
    		[[+filters]]
    		<button type="button" onclick="tmFilters.resetFilters(); return false;">Сбросить</button>
    	</form>
    </div>
    <div class="sorting">
    	<select class="f_sortby" name="sortby" onchange="tmFilters.changeOrder(this);">
    		<option value="pagetitle">по названию</option>
    		<option value="price">по цене</option>
    		<option value="publishedon">по дате</option>
    	</select>
    	&nbsp;
    	<select class="f_sortdir" name="sortdir" onchange="tmFilters.changeOrder(this);">
    		<option value="asc">по возрастанию</option>
    		<option value="desc">по убыванию</option>
    	</select>
    	&nbsp;
    	<select class="f_limit" name="limit" onchange="tmFilters.changeOrder(this);">
    	<option value="4" selected="selected">4</option>
    		<option value="10">10</option>
    		<option value="20">20</option>
    		<option value="40">40</option>
    	</select>
    	<div class="clearfix"></div>
    </div>
    	<div class="table-cat">
    	<div class="table-head table-generat">
    		<div>Сортировать по:</div>
    		<div>Название модели</div>
    		<div>Мощность</div>
    		<div>Топливо</div>
    		<div>Напряжение</div>
    		<div>Наличие АВР</div>
    		<div>Исполнение</div>
    		<div>Цена</div>
    	</div>
    	<div class="table-main table-generat" id="products">
    	[[!tmCatalog?
    		&parents=`[[*id]]` 
    		&tvPrefix=`tv.` 
    		&processTVs=`1` 
    		&includeTVs=`1` 
    		&limit=`8` 
    		&tpl_list=`product-generat` 
    	]]
    	<div class="clearfix"></div>
    	</div>
    	</div>
    	<br clear="all" />
    	<ul class="pagination">
    	[[!+page.nav]]
    	</ul>
    	</div>
    

    Код шаблона товара:

    <div class="category-article category-grid">
    <div class="cat-tov-img"><img src="[[+image]]" alt="[[+pagetitle]]"></div>
    <div class="cat-tov-name"><a href="[[~[[+resource_id]]]][[+alias]].html" role="button">[[+pagetitle]]</a></div>
    <div>[[+powernom]] кВт</div>
    <div>[[+fuel]]</div>
    <div>[[+voltage]]</div>
    <div>[[+avr]]</div>
    <div>[[+perform]]</div>
    <div>
    <div class="price"><span class="shk-price">[[!price? &price=`[[+price]]`]]</span></div>
    <div class="price-old"><span class="shk-price">[[!priceold? &price=`[[+priceold]]`]]</span></div>
    <a class="cat-tovr-but" href="[[~[[+resource_id]]]][[+alias]].html" role="button">ПОДРОБНЕЕ</a>
    </div>
    </div>
    

    При изменении сортировки товара с фронтенда, сортировка проходит тормально, но цена товара из карточек пропадает.

    1. Пробовал выводить сниппет так:
    [[price? &price=`[[+price]]`]]
    
    1. Пробовал выводить сниппетом текстовую строку (реально в нём используется JS)
      строка не выводится
  • Пробовал выводить сниппет так:
    [[price? &price=[[+price]]]]

    Надо не пробовать, а именно так и выводить. Может кэш не почистили.

    Другой вариант написать сниппет чтобы работало так:

    [[price:currencyRate]]
    

    currencyRate - это сниппет, который берет значение цены из $scriptProperties['input']

    Ещё можно попробовать в настройках MODX установить parser_recurse_uncacheable = Нет.

  • @Andchir сказал Ajax сортировка товаров + цена, выводимая сниппетом:

    Пробовал выводить сниппет так:
    [[price? &price=[[+price]]]]

    Надо не пробовать, а именно так и выводить. Может кэш не почистили.

    Чистил кеш, в том числе удаляя файлы из папки. Не помогло.

    Другой вариант написать сниппет чтобы работало так:

    currencyRate
    

    currencyRate - это сниппет, который берет значение цены из $scriptProperties['input']

    от currencyRate отказался пару дней назад - не смог запустить его. Он не обновлял список валют.

    Ещё можно попробовать в настройках MODX установить parser_recurse_uncacheable = Нет.

    Попробовал - не помогло
    Возможно что проблема ещё в том, что использую MIGX ?

  • Ситуация немного прояснилась
    С таким выводом сниппета

    [[price? &price=`[[+price]]`]]
    

    стала выводится статичная строка (при замене ею JS в сниппете)
    Получается, что дело в коде сниппета:

    <?php
    $price = (isset($price)) ? $price : '';
    if ($price != 0) {?>
    	<script>
    function CBR_XML_Daily_Ru(rates) {
    	var EURrate = rates.Valute.EUR.Value.toFixed(2).replace('.', ',');
    	var price = <? echo $price; ?>;
    	price = parseInt (price, 10);
    	EURrate = parseInt (EURrate, 10);
    	var allprice = price * EURrate + ' руб.';
    	document.write(allprice)
    }
    </script>
    <script src='//www.cbr-xml-daily.ru/daily_jsonp.js'></script>
    <?} else {
     	$result = "По запросу";
    };
    	return $result;
    
  • от currencyRate отказался пару дней назад - не смог запустить его. Он не обновлял список валют.

    Я указал произвольное название снипета, а не какой-то конкретный. Просто [[price:price]] (как у вас) как-то не красиво смотрится.

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

 

Последние комментарии

  • Вот, может кому-то пригодиться. Скачиваем модуль с оф.сайта яндекс кассы. И в YandexMoneyHook,
    core/components/yandexmoney/model/yandexmoney.class.php и /assets/components/yandexmoney/connector_result.php подключаем пакет shopkeeper3 и выбор заказа по id.
    В общем меняем строки для shk2 на shk3.

    $modx->addPackage('shopkeeper', $modx->getOption('core_path').'components/shopkeeper/model/'); $order = $modx->getObject('SHKorder', $order_id) на $modx->addPackage('shopkeeper3', $modx->getOption('core_path').'components/shopkeeper3/model/'); $order = $modx->getObject('shk_order', $order_id);

    Так же, если не меняли стандартные статусы заказа, то в модули их исчисление начинается с 0, в shk3 с 1. Надо учесть это при обновлении статуса при оплате. (я тупо в БД в таблице с параметрами сниппета YandexMoney поменял нумерацию)

    Читать далее
  • Z

    Спасибо, буду пробовать.

    Читать далее
  • Может такая причина
    http://forum.modx-shopkeeper.ru/topic/717/mysql-5-7-не-работает-query-groupby/4

    Смотрите в журнал ошибок.

    Надо выполнить запрос

    SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

    Читать далее
  • Z

    Добрый день! Используется шаблон с id 3. Вот скриншот: http://dl3.joxi.net/drive/2018/11/17/0003/2897/236369/69/3dd12003a9.png

    Читать далее