Вывод списка последних посещённых товаров

#
Вывод списка последних посещённых товаров
Нужно сделать список последних посещённых товаров с обратной сортировкой по убывающей, т.е. последний сверху.
Так вот я сделал запись в куки записываются последние 3 товара (ID товара), но вот встала проблема. Массив формируется по принципу последний товар последний в массиве, реверс массива сделать не проблема, но как сделать, например для вывода методом ShowShop фильтрацию, именно с учётом сортировки как в массиве, чтобы и в XML попадали так же (в таком же порядке)?? Сейчас сделано так (без сортировки):
<?php
   $last_items = unserialize($_COOKIE['SHOPLASTITEMS']);
   $last_items = to_array($last_items);
   $shop = & singleton('shop');
   
   $external_propertys = array();
   $param = array();
   $element = array();
   foreach ($last_items as $item){
      $element['type'] = 0; // 0 - основное св-во, 1 - дополнительное
      $element['prefix'] = 'OR'; // префикс
      $element['name'] = 'shop_items_catalog_item_id';
      $element['if'] = '='; // Условие
      $element['value'] = to_int($item);
      $element['sufix'] = '';
      $param['select'][] = $element;
   }
   $shop->ShowShop(1, 'ПоследниеПосещённыеТовары', $param, $external_propertys);
?>

#
Re: Вывод списка последних посещённых товаров
ну что же пришлось решать введением дополнительного XML:
<?php
   $last_items = unserialize($_COOKIE['SHOPLASTITEMS']);
   $last_items = array_reverse(to_array($last_items));
   $shop = & singleton('shop');
   
   $external_propertys = array();
   $param = array();
   $element = array();

   $param['external_xml'] = "<sort_type>";
   foreach ($last_items as $item){
      $element['type'] = 0; // 0 - основное св-во, 1 - дополнительное
      $element['prefix'] = 'OR'; // префикс
      $element['name'] = 'shop_items_catalog_item_id';
      $element['if'] = '='; // Условие
      $element['value'] = to_int($item);
      $element['sufix'] = '';
      $param['select'][] = $element;
      $param['external_xml'] .= "\n\t".'<item id="'.$item.'"/>';
   }
   $param['external_xml'] .= "\n</sort_type>\n";
   $shop->ShowShop(1, 'ПоследниеПосещённыеТовары', $param, $external_propertys);
?>

и в XSL выборку делать уже по sort_type:
<xsl:template match="/shop">
...
   <xsl:apply-templates select="sort_type/item"/>
...
</xsl:template>
<xsl:template match="sort_type/item">
   <xsl:variable name="item_id" select="@id"/>
   <xsl:apply-templates select="/shop/item[@id=$item_id]"/>
</xsl:template>
#
Re: Вывод списка последних посещённых товаров
запись в куки произвожу в настройки дин страницы "Интернет-магазин":
<?php
...
// Если вывод информационного элемента
   if ($GLOBALS['shop_item_path']['item']) {
      /*
       * Блок кода для модуля "Последние посещённые товары"
       */
      // Start
         $host_array = array_reverse(explode('.', $_SERVER['HTTP_HOST']));
         $host = '.'.$host_array[1].'.'.$host_array[0];
         if (!isset($_COOKIE['SHOPLASTITEMS'])){
            $_COOKIE['SHOPLASTITEMS'] = serialize(array($GLOBALS['shop_item_path']['item']));
            $shop->SetCookie('SHOPLASTITEMS', $_COOKIE['SHOPLASTITEMS'], time() + 31536000, '/');
         } else {
            $last_items_get = unserialize($_COOKIE['SHOPLASTITEMS']);
            $last_items_get = to_array($last_items_get);
            $last_items = array();
            foreach ($last_items_get as $item) {
               if (!isset($last_items) || !in_array($item, $last_items))
                  $last_items[] = $item;
            }

            if (!in_array($GLOBALS['shop_item_path']['item'], $last_items)) {
               $last_items[] = $GLOBALS['shop_item_path']['item'];
            }
            if (count($last_items) > 3) {
               unset($last_items[0]);
               $last_items_get = $last_items;
               $last_items = array();
               foreach ($last_items_get as $item) {
                  if (!isset($last_items) || !in_array($item, $last_items))
                     $last_items[] = $item;
               }
            }
            
            $shop->SetCookie("SHOPLASTITEMS", '', time() - 31536000, '/');
            unset($_COOKIE['SHOPLASTITEMS']);

            $_COOKIE['SHOPLASTITEMS'] = serialize($last_items);
            $shop->SetCookie('SHOPLASTITEMS', $_COOKIE['SHOPLASTITEMS'], time() + 31536000, '/');
         }
      // End
...
#
Re: Вывод списка последних посещённых товаров
А можно поподробнее по xsl?
Сделал- только выводится всё подряд... каша... Как в xsl вывести просто название товара и ссылку с этого товара на его страницу???
#
Re: Вывод списка последних посещённых товаров
не совсем понял в чём вопрос.
я сделал добавления внешнего XML выборкой из COOKIE, дальше сделал копию XSL шаблона вывода списка товаров и, чтобы выводились только нужные товары, сделал промежуточный шаблон "sort_type/item" в котором просто вызываю шаблон "/shop/item" с условием, чтобы item_id совпадало и всё. вроде ничего не понятного. я в коде указал ключевые моменты для вывода. даже указал каким путём произвожу запись в COOKIE. дальше только голова нужна)))
#
Re: Re: Вывод списка последних посещённых товаров
Желательно в коде, отвечающем за вывод блока с недавно просмотренными товарами в макете или шаблоне, добавить условие
if isset ($_COOKIE['SHOPLASTITEMS']) {...содержимое блока...}
иначе, если в кукисах нет ранее просмотренных товаров, выводится ошибка.
#
Re: Вывод списка последних посещённых товаров
ошибку нашел в коде записи куки в настройках дин страницы блок else { ... }<--скобкой не закрыт
Но все равно спасибо очень помогло!!
#
Re: Вывод списка последних посещённых товаров
html,

пытаюсь сделать как вы сказали
в макет вставляю:

<?php
// Если модуль пользователей сайта доступен

if isset ($_COOKIE['SHOPLASTITEMS'])
      {
$last_items = unserialize($_COOKIE['SHOPLASTITEMS']);
   $last_items = array_reverse(to_array($last_items));
   $shop = & singleton('shop');
  
   $external_propertys = array();
   $param = array();
   $element = array();
   $param['external_xml'] = "<sort_type>";
   foreach ($last_items as $item){
      
$element['type'] = 0; // 0 - основное св-во, 1 - дополнительное
      $element['prefix'] = 'OR'; // префикс
      $element['name'] = 'shop_items_catalog_item_id';
      $element['if'] = '='; // Условие
      $element['value'] = to_int($item);
      $element['sufix'] = '';
      $param['select'][] = $element;
      $param['external_xml'] .= "\n\t".'<item id="'.$item.'"/>';
   }
   $param['external_xml'] .= "\n</sort_type>\n";
   $shop->ShowShop(1, 'ПоследниеПосещённыеТовары', $param, $external_propertys);
}
?>


выдает ошибку: Parse error: syntax error, unexpected T_ISSET, expecting '(' in /home/m/myzooshop/public_html/templates/template36/template.htm on line 164

что не так?
Email: golden-puma@yandex.ru; Telegram: @GoldenPuma; Сайт: https://goldenpuma.ru
Авторизация