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

#
Вычисление количества дней до завершения публикации товара
Решение для вычисления количества дней до завершения публикации товара. Также можно применить для проверки актуальности товара. Решение помещает в xml информацию о количестве дней до даты завершения публикации товара.

http://artemkuts.ru/coding/hostcms/shop/days_before_actual_shop_items/
Команда разработчиков KAD Systems | Интеграция и нестандартные решения на совесть | Email: info@kad.systems Skype: kad.systems | http://kad.systems/ https://vk.com/kad_sys
#
Re: Вычисление количества дней до завершения публикации товара
Хе-хе В данном случае вы слишком уж загнули Эта задача решается проще, средствами одного лишь XSLT, точнее его расширения - EXSLT. Libxml, используемая в php поддерживает очень многие из этих раcширений, чем мы и воспользуемся.

У нас же для вычисления числа дней есть в XML почти все необходимые данные. Нет только текущей даты. Поэтому мы передадим ее в ТДС:
$external_propertys['today'] = date('Y-m-d', time());

и больше на php нам ничего делать не нужно.

А теперь в XSL делаем следующее: в тег xsl:stylesheet нужно дописать неймспейс date и исключить его из вывода
xmlns:date="http://exslt.org/dates-and-times" extension-element-prefixes="date"


И потом, в темплейте item мы можем сделать такую штуку:

      <!--текущая дата-->
      <xsl:variable name="today" select="/shop/today"/>

      <!--для совместимости с версиями 5 и 6 сразу-->
      <xsl:variable name="end_date" select="putend_date|end_datetime"/>

      <!--если дата окончания определена-->
      <xsl:if test="not(contains($end_date, '0000'))">

         <!--сформатируем дату правильно-->
         <xsl:variable name="end" select="concat(substring($end_date,7,4), '-', substring($end_date,4,2), '-', substring($end_date,1,2))"/>

         <!--вычислим число дней до окончания-->
         <xsl:variable name="duration" select="substring-before(substring-after(date:difference($today, $end), 'P'), 'D')"/>

         <!--выведем значение-->
         <xsl:value-of select="$duration"/>
      </xsl:if>


И все

Способ подходит и для 5й версии и для 6й, пригоден как для вывода карточки товара так и для вывода группы товаров.
Заказов не беру. Консультирую редко.
#
Re: Вычисление количества дней до завершения публикации товара
Отличный способ. Жаль что я не знал о нем, когда было нужно. Я спрашивал у техподдержки по поводу вычисления разницы дат в xsl, они ответили что насколько они знают - это невозможно. В интернете тоже искал достаточно долго, но рабочего решения найти не смог.
Но в моем случае можно реализовать еще дополнительную логику
Команда разработчиков KAD Systems | Интеграция и нестандартные решения на совесть | Email: info@kad.systems Skype: kad.systems | http://kad.systems/ https://vk.com/kad_sys
#
Re: Вычисление количества дней до завершения публикации товара
KAD писал(а):
Но в моем случае можно реализовать еще дополнительную логику

Например?

KAD писал(а):
Я спрашивал у техподдержки по поводу вычисления разницы дат в xsl, они ответили что насколько они знают — это невозможно

KAD, техподдержка отчасти права - в чистом XSLT 1.0 работать с датами невозможно.

А вообще, рекомендую к изучению - http://www.exslt.org/
Пользоваться оттуда можно всем, для чего есть реализация в libxslt (о том, для каких библиотек есть раелизация написано в описании каждой функции) - с высокой степенью вероятности должно работать.
Заказов не беру. Консультирую редко.
#
Re: Вычисление количества дней до завершения публикации товара
Прошу прощения, что "слегка" не в тему, но по работе с датами ничего другого не нашёл... Есть задача получить в XSL-шаблоне (и на списке и на товаре) две даты в формате yyyy-mm-dd. Первая дата должна отличаться от фактической текущей на +7 дней, а вторая на +14 дней, т.е. если сегодня 26 апреля, то даты должны быть 2013-05-03 и 2013-05-10. Если сталкивались с подобными задачами, подскажите пожалуйста решение...

P.S. Версия HostCMS-6, раздел форума определён для пятой, но в данной теме Евгением и 6-ка затронута, поэтому написал сюда...
yestravel
#
Re: Вычисление количества дней до завершения публикации товара
yestravel, выше есть все необходимые ссылки, куда стоит посмотреть. Например, можно поэкспериментировать с http://www.exslt.org/date/functions/add/index.html или с http://www.exslt.org/date/functions/add-duration/index.html

Это если вам уж очень сильно хочется сделать это именно на XSLT.

Но вообще-то, коль скоро речь идет о 6й версии системы, то вычисление дат можно и нужно делать на php, и передавать в xml как дополнительные теги к каждому товару, с помощью хука. Отличный пример этого есть вот здесь http://www.hostcms.ru/forums/2/7123/#title45261 вам нужно только в строке
$object->addXmlTag('myTag', $object->price * 2);
написать свое название тега и php-функцию date('...', time()+60*60*24*7) возвращающую вам дату в нужном формате.


Все гораздо проще. Это ведь одно и то же значение даты для всех товаров из списка, а значит не надо вычислять его для каждого товара, достаточно вычислить один раз в ТДС ИМ, с помощью все того же date('...', time()+60*60*24*7), и передать в xml контроллера с помощью метода addEntity()

Ну и можно еще вычислять не от чистого time(), а, например, с помощью date add. Ну да это уже частности.
Заказов не беру. Консультирую редко.
#
Re: Вычисление количества дней до завершения публикации товара
Евгений, большое спасибо! Буду пробывать...
yestravel
#
Re: Вычисление количества дней до завершения публикации товара
yestravel,
пожалуйста, и удачи! )
Заказов не беру. Консультирую редко.
#
Re: Вычисление количества дней до завершения публикации товара
скажите, пожалуйста, а как выводить не дату добавления (item_date), а дату публикации?
#
Re: Вычисление количества дней до завершения публикации товара
Делаю все по приведенному примеру не работает
Netpro
Авторизация