Отметка "Новинки" в каталоге

#
Отметка "Новинки" в каталоге
Всем привет!
Сделал отметку "Новинки" в каталоге, прикладываю код.
Всё работает, всё ок.
Уважаемые модераторы - проверьте пожалуйста, это правильно или нужно как-то по-другому делать?

Для типовой динамической страницы магазина добавляем на вкладку настроек


$Shop_Controller_Show->addEntity(
         Core::factory('Core_Xml_Entity')
            ->name('datefornew')
            ->value(date('Ymd', strtotime('-7 days')))
      );



В данном случае в XML попадёт дата на 7 дней меньше сегодняшней.
В XSL добавляем переменную $date для каждого товара, в которой приводим в единый вид дату товара и дату из ТДС

<xsl:variable name="date" select="10000 * substring(date, 7, 4) + 100 * substring(date, 4, 2) + substring(date, 1, 2)"/>

Получаем дату из ТДС в переменную

<xsl:variable name="datefornew" select="/shop/datefornew"/>

Дальше нам нужно просто сравнить даты и вывести отметку

<xsl:if test="$date > $datefornew">
<span class='new'>Новинка</span>
</xsl:if>

Сравнение будет вида 20180131 > 20180223
Ускорение сайтов / Любые работы по сайту / Обращайтесь в nivaks-studio.ru
#
Re: Отметка "Новинки" в каталоге
nikolajgromkov,
вместо таких обработок в xsl, через хуки добавляйте xml тег с датой в нужном формате

<xsl:variable name="date" select="10000 * substring(date, 7, 4) + 100 * substring(date, 4, 2) + substring(date, 1, 2)"/>
HostDev.pw - модули для HostCMS, Telegram: @hostdev
Модератор
#
Re: Отметка "Новинки" в каталоге
nikolajgromkov,
Евгений прав. Зачем жестить в XSL, решается проще, через хук. В bootstrap.php добавляете:

class Shop_Item_Observer
{
   static public function onBeforeGetXml($object, $args)
   {
     $datefornew = Core_Date::timestamp2sql(strtotime('-7 days'));

     $object->datetime > $datefornew && $object->addXmlTag('new', 1);
   }
}

// Add shop_item observer
Core_Event::attach('shop_item.onBeforeGetXml', array('Shop_Item_Observer', 'onBeforeGetXml'));


В shop_item пойдет у новых товаров тег new. После чего на XSL:

<xsl:if test="new/node()">
   <span class='new'>Новинка</span>
</xsl:if>
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Отметка "Новинки" в каталоге
Круто! Спасибо Только объясните почему подача данных из bootstrap.php лучше обработки строки в xsl? Этот вариант быстрее? Или просто так правильнее делать?
Ускорение сайтов / Любые работы по сайту / Обращайтесь в nivaks-studio.ru
#
Re: Отметка "Новинки" в каталоге
nikolajgromkov,
xslt процессор больше ресурсов затратит
HostDev.pw - модули для HostCMS, Telegram: @hostdev
Авторизация