Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Модуль "Отложенные товары" для UMI.CMS

Автор e.ioffeРаздел Разработка модулей

Ответов: 5
Просмотров: 5623
Последний ответ 09 Мая 2014, 00:41:54
от e.ioffe
Новые товары каталога на главной странице сайта (xslt)

Автор wolfmanРаздел Шаблоны XSLT

Ответов: 7
Просмотров: 5425
Последний ответ 21 Сентября 2012, 21:09:41
от admin
Показать все товары со скидкой модуля «Интернет магазин»

Автор webtrendРаздел Шаблоны XSLT

Ответов: 3
Просмотров: 1611
Последний ответ 31 Января 2016, 22:29:02
от crazygeorgio
Вывести товары, которые в наличии, остальные скрыть

Автор riptileРаздел Шаблоны XSLT

Ответов: 3
Просмотров: 2193
Последний ответ 06 Мая 2017, 18:08:43
от aghigay
Последние добавленые товары, или новинки как вывести?

Автор sempl84Раздел Настройка системы и модулей

Ответов: 3
Просмотров: 3147
Последний ответ 15 Сентября 2011, 21:08:14
от admin

0 Пользователей и 1 Гость просматривают эту тему.

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Просмотренные товары (UMI CMS 2.9.0)
« : 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
Никаких других действий или переносов не делали.

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

Заранее спасибо за помощь!
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Просмотренные товары (UMI CMS 2.9.0)
« Ответ #1 : 24 Ноября 2014, 15:55:36 »
есть куча предположений.

- А как она выводилась раньше? был какой-то шаблон который вызывался на странице с определенным id? или как-то по другому?
- Как выглядит шаблон для вывода всех просмотренных товаров?
- Какой url должен показывать эту страницу?

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:Просмотренные товары (UMI CMS 2.9.0)
« Ответ #2 : 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
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Просмотренные товары (UMI CMS 2.9.0)
« Ответ #3 : 24 Ноября 2014, 23:08:10 »
шаблон, на первый взгляд выглядит верный и должен на странице /content/getRecentPages/ выводить просмотренные товары, разбирайте по частям
1. есть ли у вас просмотренные товары
2. передаются ли данные  в каждый шаблон, который вы используете в данной цепочке (и какие в него данные попадают). Для этого, вставьте в шаблон (который вы проверяете)
<textarea><xsl:copy-of select="." /></textarea>

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:Просмотренные товары (UMI CMS 2.9.0)
« Ответ #4 : 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.
« Последнее редактирование: 24 Ноября 2014, 23:49:17 от sam »
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Просмотренные товары (UMI CMS 2.9.0)
« Ответ #5 : 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>
?

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


*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:Просмотренные товары (UMI CMS 2.9.0)
« Ответ #6 : 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 там нужно сделать, ничего подобного для просмотренных товаров не нашел. В чём тогда загвоздка, почему полный список просмотренных не могу вывести?
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Просмотренные товары (UMI CMS 2.9.0)
« Ответ #7 : 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/') что-то возвращает, то вы увидите это в исходном коде получившейся страницы, между знаками "="

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:Просмотренные товары (UMI CMS 2.9.0)
« Ответ #8 : 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>
« Последнее редактирование: 04 Декабря 2014, 19:53:42 от sam »
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:Просмотренные товары (UMI CMS 2.9.0)
« Ответ #9 : 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, тоже не помогло, пришлось вернуть все, как было в нашем старом шаблоне). Проблема пока не решена. Буду признателен за любые советы и подсказки по решению данной проблемы.
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:Просмотренные товары (UMI CMS 2.9.0)
« Ответ #10 : 04 Декабря 2014, 23:00:50 »
Ребята, коллеги, просьба, включайтесь в эту тему, кто понимает xslt, умеет работать с макросами, прочтите с начало всю переписку (это, что бы не задавать уже заданные выше вопросы), попробуйте подсказать, может именно Вы знаете, в чем может быть проблема?! Заранее всем спасибо!

P.S. Обратились к одному из программистов, с просьбой проверки кодов макроса и файлов вывода просмотренных товаров. Как нам сообщили, в кодах ошибок нет (сами ранее тоже сравнивали коды файлов с файлами localhost).
В таком случае возникает вопрос, если коды макроса и шаблона верны, то где нам еще искать ошибку - в базе данных или где-то еще? Что именно искать? От вас, коллеги нужны подсказки по месту поиска ошибки (возможно при обновлении версии сайта, не все файлы новой версии перенеслись)? Может кто-нибудь перечислить все файлы, в. т.ч. и системные, где должно присутствовать связывающее звено для макроса /content/getRecentPages?
Буду благодарен за любые подсказки и советы!!!
« Последнее редактирование: 11 Декабря 2014, 14:49:26 от sam »
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:Просмотренные товары (UMI CMS 2.9.0)
« Ответ #11 : 15 Декабря 2014, 22:23:19 »
Знатоки xslt/umi, профи своего дела, admin сейчас занят, а не ужели кроме него некому подсказать, в чём может быть проблема при выводе всех просмотренных товаров? Кто-нибудь из знатоков, прочитайте сообщения, обратите внимание на предыдущее сообщение (выделено всё), попробуйте пролить свет на тьму своими советами и подсказками. Искренне признателен Вам буду за полезную информацию!
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

ilyar

Re:Просмотренные товары (UMI CMS 2.9.0)
« Ответ #12 : 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']"


*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:Просмотренные товары (UMI CMS 2.9.0)
« Ответ #13 : 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 уже смотрел, можете и Вы посмотреть (см. вложение)
« Последнее редактирование: 18 Декабря 2014, 23:02:22 от sam »
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:Просмотренные товары (UMI CMS 2.9.0)
« Ответ #14 : 22 Декабря 2014, 22:43:13 »
Проблему помог решить ilyar - решение, в /modules/content/common.xsl все инклуды у нас шли в самом начале файла, в т.ч. и инклуд с recentPages.xsl, а надо было их указать в самом конце, а инклуд с recentPages.xsl сделать самым последним из этих инклудов. Казалось бы, простая манипуляция, а проблему-то решает.

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

P.S. Не факт, что кто-то еще переносами функций занимается, но тем не менее, мало ли кому это понадобиться. А то я 1,5 месяца искал ответ на этот вопрос.
P.P.S. Тема закрыта. Спасибо пользователям admin и ilyar за всё!!!
« Последнее редактирование: 22 Декабря 2014, 22:56:58 от sam »
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.