Просмотренные товары — различия между версиями
XiBOR (обсуждение | вклад) (Новая страница: «На сайтах многих интернет магазинов присутствует возможность просмотреть товары, которы…») |
Alexei (обсуждение | вклад) |
||
(не показаны 3 промежуточные версии 3 участников) | |||
Строка 1: | Строка 1: | ||
+ | '''Начиная с версии 2.9 включено в продукт, для решения данной задачи используйте системный макрос [http://dev.docs.umi-cms.ru/spravochnik_makrosov_umicms/struktura_i_kontent/content_getrecentpages/ content getRecentPages()]''' | ||
+ | |||
На сайтах многих интернет магазинов присутствует возможность просмотреть товары, которые вы уже просматривали ранее, но по той или иной причине прошли мимо. Для того, чтобы вывести эту информацию, можно написать один небольшой кастом: | На сайтах многих интернет магазинов присутствует возможность просмотреть товары, которые вы уже просматривали ранее, но по той или иной причине прошли мимо. Для того, чтобы вывести эту информацию, можно написать один небольшой кастом: | ||
− | <source lang="php"> | + | <!--source lang="php"> |
public function vGoods($template = "default", $id) { | public function vGoods($template = "default", $id) { | ||
$block_arr = array(); | $block_arr = array(); | ||
Строка 21: | Строка 23: | ||
$block_arr['subnodes:lines']=$lines; | $block_arr['subnodes:lines']=$lines; | ||
return def_module::parseTemplate($sTemplate, $block_arr); | return def_module::parseTemplate($sTemplate, $block_arr); | ||
+ | } | ||
+ | </source--> | ||
+ | <source lang="php"> | ||
+ | public function vGoods($template = "default", $id) { | ||
+ | list ($block, $line) = def_module::loadTemplates('/catalog/'.$template, 'pagesId', 'objects_line'); | ||
+ | if(isset($_SESSION['goods'])) { | ||
+ | $vGoods = explode('|',$_SESSION['goods']); | ||
+ | if(!in_array($id, $vGoods)) $_SESSION['goods'] .= "|$id"; | ||
+ | } | ||
+ | else | ||
+ | $_SESSION['goods'] = $id; | ||
+ | |||
+ | $vGoods = explode('|',$_SESSION['goods']); | ||
+ | foreach($vGoods as $val){ | ||
+ | if(is_numeric($val) and $val > 0) { | ||
+ | $line_arr['node:text'] = $val; | ||
+ | $lines[] = def_module::parseTemplate($line, $line_arr); | ||
+ | } | ||
+ | } | ||
+ | $block_arr = array(); | ||
+ | $block_arr['subnodes:lines']=$lines; | ||
+ | return def_module::parseTemplate($block, $block_arr); | ||
} | } | ||
</source> | </source> | ||
Строка 26: | Строка 50: | ||
Данный метод принимает вторым параметром ID объекта или страницы. Как вам будет удобнее.<br /> | Данный метод принимает вторым параметром ID объекта или страницы. Как вам будет удобнее.<br /> | ||
− | Всё что осталось, это написать вывод. На XSLT вывод можно организовать следующим образом:<br /> | + | Всё что осталось, это написать вывод. |
+ | <h1>XSLT</h1> | ||
+ | На XSLT вывод можно организовать следующим образом:<br /> | ||
1. На странице объекта каталога, мы вызываем макрос, чтобы он записал ID, и вернул id всех посещенных объектов.<br /> | 1. На странице объекта каталога, мы вызываем макрос, чтобы он записал ID, и вернул id всех посещенных объектов.<br /> | ||
2. Делаем вывод информации о посещенных объектах.<br /> | 2. Делаем вывод информации о посещенных объектах.<br /> | ||
Строка 44: | Строка 70: | ||
[[Файл:Visited.jpg]]<br /> | [[Файл:Visited.jpg]]<br /> | ||
теперь мы видим все посещенные нами товары. | теперь мы видим все посещенные нами товары. | ||
+ | |||
+ | <h1>tpl</h1> | ||
+ | На tpl вызов макроса будет выглядеть так: | ||
+ | %catalog vGoods('templateName' ,%pid%)% | ||
+ | В макрос можно передавать как %pid%, так и %id% | ||
+ | А шаблон для вывода tpls/catalog/templateName.tpl, будет содержать два блока: | ||
+ | <source lang="php"><?php | ||
+ | $FORMS = Array(); | ||
+ | $FORMS['pagesId'] = <<<END | ||
+ | <span>%lines%</span> | ||
+ | END; | ||
+ | |||
+ | $FORMS['objects_line'] = <<<END | ||
+ | Просмотренный товар = %text% <br /> | ||
+ | END; | ||
+ | ?></source> | ||
+ | |||
[[Категория:Модуль Каталог]] | [[Категория:Модуль Каталог]] |
Текущая версия на 08:01, 15 марта 2014
Начиная с версии 2.9 включено в продукт, для решения данной задачи используйте системный макрос content getRecentPages()
На сайтах многих интернет магазинов присутствует возможность просмотреть товары, которые вы уже просматривали ранее, но по той или иной причине прошли мимо. Для того, чтобы вывести эту информацию, можно написать один небольшой кастом:
public function vGoods($template = "default", $id) {
list ($block, $line) = def_module::loadTemplates('/catalog/'.$template, 'pagesId', 'objects_line');
if(isset($_SESSION['goods'])) {
$vGoods = explode('|',$_SESSION['goods']);
if(!in_array($id, $vGoods)) $_SESSION['goods'] .= "|$id";
}
else
$_SESSION['goods'] = $id;
$vGoods = explode('|',$_SESSION['goods']);
foreach($vGoods as $val){
if(is_numeric($val) and $val > 0) {
$line_arr['node:text'] = $val;
$lines[] = def_module::parseTemplate($line, $line_arr);
}
}
$block_arr = array();
$block_arr['subnodes:lines']=$lines;
return def_module::parseTemplate($block, $block_arr);
}
Данный метод принимает вторым параметром ID объекта или страницы. Как вам будет удобнее.
Всё что осталось, это написать вывод.
XSLT
На XSLT вывод можно организовать следующим образом:
1. На странице объекта каталога, мы вызываем макрос, чтобы он записал ID, и вернул id всех посещенных объектов.
2. Делаем вывод информации о посещенных объектах.
Берем шаблон объекта каталога, в нашем случае это \xsltTpls\modules\catalog\object-view.xsl
В нужном месте вызываем наш макрос
Вы просматривали ранее:<br />
<xsl:apply-templates select="document(concat('udata://custom/vGoods//', page/@id))/udata/lines" mode="visit" />
И добавляем шаблон для вывода информации:
<xsl:template match="item" mode="visit">
<a href="/~/{.}"><xsl:value-of select="document(concat('upage://', .))/udata/page/name" /></a>
</xsl:template>
теперь мы видим все посещенные нами товары.
tpl
На tpl вызов макроса будет выглядеть так: %catalog vGoods('templateName' ,%pid%)%
В макрос можно передавать как %pid%, так и %id%
А шаблон для вывода tpls/catalog/templateName.tpl, будет содержать два блока:
<?php
$FORMS = Array();
$FORMS['pagesId'] = <<<END
<span>%lines%</span>
END;
$FORMS['objects_line'] = <<<END
Просмотренный товар = %text% <br />
END;
?>