UMIhelp

Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: sam от 24 Ноября 2014, 09:43:01

Название: Просмотренные товары (UMI CMS 2.9.0)
Отправлено: sam от 24 Ноября 2014, 09:43:01
Здравствуйте! Подскажите, с чем это может быть связано - страница с полным списком просмотренных товаров у нас отображается пустым?! XML смотрели, там просмотренные объекты есть.

Ранее, старую 2.8.5 версию системы мы обновили до 2.9.0. Так как при обновлении шаблоны не меняются, и соответственно не всё перенеслось, самостоятельно перенесли вроде всё необходимое (не системную часть), т.е.:
1. В /layouts/default.xsl добавили соответствующий вызов блока
2. Файл recentPages.xsl добавили в директиву xslt/modules/content/
3. В common.xsl (xslt/modules/content/) добавили соответствующий include
Никаких других действий или переносов не делали.

Так почему страница с полным списком просмотренных товаров у нас отображается пустым?

Заранее спасибо за помощь!
Название: Re:Просмотренные товары (UMI CMS 2.9.0)
Отправлено: admin от 24 Ноября 2014, 15:55:36
есть куча предположений.

- А как она выводилась раньше? был какой-то шаблон который вызывался на странице с определенным id? или как-то по другому?
- Как выглядит шаблон для вывода всех просмотренных товаров?
- Какой url должен показывать эту страницу?
Название: Re:Просмотренные товары (UMI CMS 2.9.0)
Отправлено: sam от 24 Ноября 2014, 22:53:00
Цитировать
- А как она выводилась раньше? был какой-то шаблон который вызывался на странице с определенным 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
Название: Re:Просмотренные товары (UMI CMS 2.9.0)
Отправлено: admin от 24 Ноября 2014, 23:08:10
шаблон, на первый взгляд выглядит верный и должен на странице /content/getRecentPages/ выводить просмотренные товары, разбирайте по частям
1. есть ли у вас просмотренные товары
2. передаются ли данные  в каждый шаблон, который вы используете в данной цепочке (и какие в него данные попадают). Для этого, вставьте в шаблон (который вы проверяете)
<textarea><xsl:copy-of select="." /></textarea>
Название: Re:Просмотренные товары (UMI CMS 2.9.0)
Отправлено: sam от 24 Ноября 2014, 23:35:48
Цитировать
1. есть ли у вас просмотренные товары
2. передаются ли данные  в каждый шаблон, который вы используете в данной цепочке (и какие в него данные попадают). Для этого, вставьте в шаблон (который вы проверяете)

1. посетил карточки, просмотренные есть в правом блоке
2. вставил <textarea><xsl:copy-of select="." /></textarea> в шаблон, не выводиться ничего.

Даже при удалении всех просмотренных и обновлении страницы (/content/getRecentPages/), вроде должно выводиться сообщение &recent-pages-empty;, что тоже не выводиться, в т.ч. и в xml-вызове. А вот все просмотренные в xml видны - полный список.

P.S. В localhost xml всех просмотренных (пустая страница) внутри udata есть <items/>, а у нас в аналогичной ситуации в xml нет <items/> внутри udata. А при наличии просмотренных товаров наш xml схож с xml localhost.
Название: Re:Просмотренные товары (UMI CMS 2.9.0)
Отправлено: admin от 25 Ноября 2014, 00:11:38
Цитировать
вставил <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>
?

Вывел ничего, это значит белый экран?

Название: Re:Просмотренные товары (UMI CMS 2.9.0)
Отправлено: sam от 25 Ноября 2014, 10:09:46
Я пробовал вставить во все 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 там нужно сделать, ничего подобного для просмотренных товаров не нашел. В чём тогда загвоздка, почему полный список просмотренных не могу вывести?
Название: Re:Просмотренные товары (UMI CMS 2.9.0)
Отправлено: admin от 25 Ноября 2014, 10:34:51
подытожим, в боковой панеле у вас показываются просмотренные товары, а в центральной части (на странице  /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/') что-то возвращает, то вы увидите это в исходном коде получившейся страницы, между знаками "="
Название: Re:Просмотренные товары (UMI CMS 2.9.0)
Отправлено: sam от 25 Ноября 2014, 11:18:10
Цитировать
подытожим, в боковой панеле у вас показываются просмотренные товары, а в центральной части (на странице  /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>
Название: Re:Просмотренные товары (UMI CMS 2.9.0)
Отправлено: sam от 02 Декабря 2014, 01:28:02
Всё нахожусь в поиске решения проблемы. В 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, тоже не помогло, пришлось вернуть все, как было в нашем старом шаблоне). Проблема пока не решена. Буду признателен за любые советы и подсказки по решению данной проблемы.
Название: Re:Просмотренные товары (UMI CMS 2.9.0)
Отправлено: sam от 04 Декабря 2014, 23:00:50
Ребята, коллеги, просьба, включайтесь в эту тему, кто понимает xslt, умеет работать с макросами, прочтите с начало всю переписку (это, что бы не задавать уже заданные выше вопросы), попробуйте подсказать, может именно Вы знаете, в чем может быть проблема?! Заранее всем спасибо!

P.S. Обратились к одному из программистов, с просьбой проверки кодов макроса и файлов вывода просмотренных товаров. Как нам сообщили, в кодах ошибок нет (сами ранее тоже сравнивали коды файлов с файлами localhost).
В таком случае возникает вопрос, если коды макроса и шаблона верны, то где нам еще искать ошибку - в базе данных или где-то еще? Что именно искать? От вас, коллеги нужны подсказки по месту поиска ошибки (возможно при обновлении версии сайта, не все файлы новой версии перенеслись)? Может кто-нибудь перечислить все файлы, в. т.ч. и системные, где должно присутствовать связывающее звено для макроса /content/getRecentPages?
Буду благодарен за любые подсказки и советы!!!
Название: Re:Просмотренные товары (UMI CMS 2.9.0)
Отправлено: sam от 15 Декабря 2014, 22:23:19
Знатоки xslt/umi, профи своего дела, admin сейчас занят, а не ужели кроме него некому подсказать, в чём может быть проблема при выводе всех просмотренных товаров? Кто-нибудь из знатоков, прочитайте сообщения, обратите внимание на предыдущее сообщение (выделено всё), попробуйте пролить свет на тьму своими советами и подсказками. Искренне признателен Вам буду за полезную информацию!
Название: Re:Просмотренные товары (UMI CMS 2.9.0)
Отправлено: ilyar от 16 Декабря 2014, 00:46:35
Прочитав переписку, склоняюсь к тому что у вас проблема не 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']"

Название: Re:Просмотренные товары (UMI CMS 2.9.0)
Отправлено: sam от 16 Декабря 2014, 10:22:06
Спасибо за отклик! Данные по 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 уже смотрел, можете и Вы посмотреть (см. вложение)
Название: Re:Просмотренные товары (UMI CMS 2.9.0)
Отправлено: sam от 22 Декабря 2014, 22:43:13
Проблему помог решить ilyar - решение, в /modules/content/common.xsl все инклуды у нас шли в самом начале файла, в т.ч. и инклуд с recentPages.xsl, а надо было их указать в самом конце, а инклуд с recentPages.xsl сделать самым последним из этих инклудов. Казалось бы, простая манипуляция, а проблему-то решает.

Мое почтение пользователю ilyar, и искреннее спасибо от всей души!

P.S. Не факт, что кто-то еще переносами функций занимается, но тем не менее, мало ли кому это понадобиться. А то я 1,5 месяца искал ответ на этот вопрос.
P.P.S. Тема закрыта. Спасибо пользователям admin и ilyar за всё!!!