- А как она выводилась раньше? был какой-то шаблон который вызывался на странице с определенным id? или как-то по другому?
- Как выглядит шаблон для вывода всех просмотренных товаров?
- Какой url должен показывать эту страницу?
Раньше вовсе "просмотренных товаров" у нас не было. Т.е. только сделали - ранее такая задача не стояла.
Шаблон страницы вроде вот, возможно я лишний код буду показывать (вывод "плиткой/списком" мы не используем):
<xsl:template match="result[@module = 'content' and @method = 'getRecentPages']" >
<xsl:apply-templates select="document('udata://content/getRecentPages/')" />
</xsl:template>
<xsl:template match="udata[@method = 'getRecentPages']">
<p>&recent-pages-empty;</p>
</xsl:template>
<xsl:template match="udata[@method = 'getRecentPages'][items]">
<div class="catalog">
<div class="objects">
<xsl:apply-templates select="items/item" mode="short-view">
<xsl:with-param name="cart_items" select="document('udata://emarket/cart/')/udata/items" />
<xsl:with-param name="from_recent" select="true()" />
</xsl:apply-templates>
</div>
</div>
</xsl:template>
Шаблон почти такой же, как и в demodizzy - нет xsl:choose "список/плитка".
Следующий url согласно шаблону должен выводить страницу, по крайней мере переход на этот url: domain/content/getRecentPages/
P.S. Кнопку "полный список" пока закомментировали и сделали лимит блока в правой колонке ////5
шаблон, на первый взгляд выглядит верный и должен на странице /content/getRecentPages/ выводить просмотренные товары, разбирайте по частям
1. есть ли у вас просмотренные товары
2. передаются ли данные в каждый шаблон, который вы используете в данной цепочке (и какие в него данные попадают). Для этого, вставьте в шаблон (который вы проверяете) <textarea><xsl:copy-of select="." /></textarea>
вставил <textarea><xsl:copy-of select="." /></textarea> в шаблон, не выводиться ничего.
куда вставили? в шаблон
<xsl:template match="result[@module = 'content' and @method = 'getRecentPages']" >
<xsl:apply-templates select="document('udata://content/getRecentPages/')" />
</xsl:template>
?
Вывел ничего, это значит белый экран?
Я пробовал вставить во все 3 шаблона (см. ниже) по очереди - да, пустая белая страница с h1 - "Вы недавно смотрели"
<xsl:template match="result[@module = 'content' and @method = 'getRecentPages']" >
<xsl:apply-templates select="document('udata://content/getRecentPages/')" />
<textarea><xsl:copy-of select="." /></textarea>
</xsl:template>
<xsl:template match="udata[@method = 'getRecentPages']">
<p>&recent-pages-empty;</p>
</xsl:template>
<xsl:template match="udata[@method = 'getRecentPages'][items]">
<div class="catalog">
<div class="objects">
<xsl:apply-templates select="items/item" mode="short-view">
<xsl:with-param name="cart_items" select="document('udata://emarket/cart/')/udata/items" />
<xsl:with-param name="from_recent" select="true()" />
</xsl:apply-templates>
</div>
</div>
</xsl:template>
Смотрел в localhost, вдруг доп.страницу или usel там нужно сделать, ничего подобного для просмотренных товаров не нашел. В чём тогда загвоздка, почему полный список просмотренных не могу вывести?
подытожим, в боковой панеле у вас показываются просмотренные товары, а в центральной части (на странице /content/getRecentPages/) пусто?
Если так, то посмотрите каким макросом вызывается вывод просмотренных товаров к правой колонке.
Затем посмотрите еще раз что у вас выводится на в шаблоне для страницы /content/getRecentPages/ . Для этого измените шаблон таким образом:
<xsl:template match="result[@module = 'content' and @method = 'getRecentPages']" >
=<xsl:copy-of select="document('udata://content/getRecentPages/')" />=
</xsl:template>
Если у вас вызов document('udata://content/getRecentPages/') что-то возвращает, то вы увидите это в исходном коде получившейся страницы, между знаками "="
подытожим, в боковой панеле у вас показываются просмотренные товары, а в центральной части (на странице /content/getRecentPages/) пусто?
Если так, то посмотрите каким макросом вызывается вывод просмотренных товаров к правой колонке.
Да, в правой колонке есть, а на странице /content/getRecentPages/ пусто. Макрос для правой колонки у нас (если вставить подобный вызов в шаблон, все равно объекты не выводятся (а в xml просмотренный объект есть)):
<xsl:apply-templates select="document('udata://content/getRecentPages/')/udata" mode="right"/>
Если у вас вызов document('udata://content/getRecentPages/') что-то возвращает, то вы увидите это в исходном коде получившейся страницы, между знаками "="
Вызов document('udata://content/getRecentPages/') ничего не возвращает, т.е. в правой колонке товар просмотренный опять есть, а на /content/getRecentPages/ ничего, пустая белая страница, в исходнике вот:
<div class="center">
<h1>Вы недавно смотрели</h1>
<div class="content"><div umi:element-id="" umi:field-name="content" umi:empty="Содержание страницы"></div></div>
</div>
<div class="clear"></div>
</div>
Всё нахожусь в поиске решения проблемы. В PHP вообще ничего не понимаю, но тем не менее решил, что было бы не плохо сравнить макросы localhost со своими, и вот какое отличие нашел в двух одноименных файлах одной директивы (про getRecentPages):
1. localhost (/classes/modules/content/class.php - строки 17-19 и предпоследняя строка)
public function getRecentPages($template = "default", $scope = "default", $showCurrentElement = false, $limit = null) {
if(!$scope) $scope = "default";
$hierarchy = umiHierarchy::getInstance();
$currentElementId = cmsController::getInstance()->getCurrentElementId();
list($itemsTemplate, $itemTemplate) = def_module::loadTemplates("content/" . $template, "items", "item");
session::getInstance();
$items = array();
if(isset($_SESSION['content:recent_pages'][$scope])) {
foreach ($_SESSION['content:recent_pages'][$scope] as $recentPage => $time) {
$element = $hierarchy->getElement($recentPage, true);
if (! ($element instanceOf umiHierarchyElement)) {
continue;
}
if (!$showCurrentElement && $element->getId() == $currentElementId) {
continue;
} elseif (!is_null($limit) && $limit <= 0) {
break;
} elseif(!is_null($limit)) {
$limit--;
}
$items[] = self::parseTemplate($itemTemplate, array(
'@id' => $element->getId(),
'@link' => $element->link,
'@name' => $element->getName(),
'@alt-name' => $element->getAltName(),
'@xlink:href' => "upage://" . $element->getId(),
'@last-view-time' => $time,
'node:text' => $element->getName()
));
}
}
return self::parseTemplate($itemsTemplate, array("subnodes:items" => $items));
}
2. наш сайт (/classes/modules/content/class.php - строки 17-19 у нас отсутствуют, у нас предпоследних строк 2)
public function getRecentPages($template = "default", $scope = "default", $showCurrentElement = false, $limit = null) {
if(!$scope) $scope = "default";
$hierarchy = umiHierarchy::getInstance();
$currentElementId = cmsController::getInstance()->getCurrentElementId();
list($itemsTemplate, $itemTemplate) = def_module::loadTemplates("content/" . $template, "items", "item");
session::getInstance();
$items = array();
if(isset($_SESSION['content:recent_pages'][$scope])) {
foreach ($_SESSION['content:recent_pages'][$scope] as $recentPage => $time) {
$element = $hierarchy->getElement($recentPage, true);
if (!$showCurrentElement && $element->getId() == $currentElementId) {
continue;
} elseif (!is_null($limit) && $limit <= 0) {
break;
} elseif(!is_null($limit)) {
$limit--;
}
$items[] = self::parseTemplate($itemTemplate, array(
'@id' => $element->getId(),
'@link' => $element->link,
'@name' => $element->getName(),
'@alt-name' => $element->getAltName(),
'@xlink:href' => "upage://" . $element->getId(),
'@last-view-time' => $time,
'node:text' => $element->getName()
));
}
}
$items = $items ? array("subnodes:items" => $items) : array();
return self::parseTemplate($itemsTemplate, $items);
}
Думал, может из-за этого все просмотренные не выводятся, но тоже нет (поменял макрос как на localhost, тоже не помогло, пришлось вернуть все, как было в нашем старом шаблоне). Проблема пока не решена. Буду признателен за любые советы и подсказки по решению данной проблемы.
Прочитав переписку, склоняюсь к тому что у вас проблема не PHP, а с шаблонами.
Проверить просто. Если есть данный по site.ru/udata://content/getRecentPages/ и при этом рабочий вызов в правой колонке ничего не отображает, если вставить его в шаблон страницы /content/getRecentPages/ вот так:
<xsl:template match="result[@module = 'content' and @method = 'getRecentPages']" >
<b>TEST</b>
<xsl:apply-templates select="document('udata://content/getRecentPages/')/udata" mode="right"/>
</xsl:template>
и даже слово TEST не показывает это говорит о том что где то есть правило более приоритетное чем match="result[@module = 'content' and @method = 'getRecentPages']"
Спасибо за отклик! Данные по site.ru/udata://content/getRecentPages/ есть, и в правой колонке просмотренный объект имеется (вызывается через udata[@method = 'getRecentPages'][items/item]), а вот в самом контенте пусто, у меня тоже есть предположение, что result[@module = 'content' and @method = 'getRecentPages'] просто игнорируется каким-то образом. Чтобы во внутрь этого match не вставлял, результат один и тот же - пустая страница. С admin уже делали разные манипуляции, чтобы посмотреть, что-то выведется - не выводится ничего.
А как проверить, где и что есть более приоритетное, чем этот match="result[@module = 'content' and @method = 'getRecentPages']"? И еще, откуда вообще берется h1 "Вы недавно смотрели", где-то это прописано?
P.S. Пробовал оставить только следующий шаблон, чтобы проверить на перекрытие - ничего не выводится:
<xsl:template match="result[@module = 'content' and @method = 'getRecentPages']" >
<xsl:apply-templates select="document('udata://content/getRecentPages/')" />
</xsl:template>
<xsl:template match="udata[@method = 'getRecentPages'][items]">
<div class="catalog">
<div class="objects">
<xsl:apply-templates select="items/item" mode="short-view">
<xsl:with-param name="cart_items" select="document('udata://emarket/cart/')/udata/items" />
<xsl:with-param name="from_recent" select="true()" />
</xsl:apply-templates>
</div>
</div>
</xsl:template>
Шаблон admin уже смотрел, можете и Вы посмотреть (см. вложение)