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, то сниппет вообще не нужен.



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

Похоже, подключение к Форум | MODX Shopkeeper было разорвано, подождите, пока мы пытаемся восстановить соединение.