Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”

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

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
Пагинация в объекте каталога
« : 14 Октября 2014, 15:50:33 »
Здравствуйте!
Возможно ли без кастомных решений реализовать макрос, позволяющий в объекте каталога object-view,xsl (demodizzy) вывести пагинацию по типу "Предыдущий / Следующий товар" ?
Тот же вопрос можно и к новостям отнести, как что-то вроде "Читать следующую новость"

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Пагинация в объекте каталога
« Ответ #1 : 15 Октября 2014, 23:47:43 »
есть 2 макроса для этих целей %system getPrevious()% и %system getNext()%

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
Re:Пагинация в объекте каталога
« Ответ #2 : 25 Октября 2014, 15:17:06 »
Я нашёл в файле photo.xsl (../xslt/modules/photoalbum/) такой вот вызов:
<xsl:apply-templates select="document(concat('udata://photoalbum/album/',page/@parentId,'//1000'))/udata/items/item[@id = $document-page-id]" mode="slider" />
обрабатываемый так:
   
<xsl:template match="item" mode="slider">
        <xsl:apply-templates select="preceding-sibling::item[1]" mode="slider_back" />
        <xsl:apply-templates select="following-sibling::item[1]" mode="slider_next" />
    </xsl:template>
    <xsl:template match="item" mode="slider_back">
        <a href="{@link}" title="&previous-page;" class="back" />
    </xsl:template>
    <xsl:template match="item" mode="slider_next">
        <a href="{@link}" title="&next-page;" class="next" />
    </xsl:template>

А если как-то переделать вызов с <xsl:apply-templates select="document(concat('udata://photoalbum/album/',page/@parentId,'//1000'))/udata/items/item[@id = $document-page-id]" mode="slider" />
на, допустим, такой:
 <xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/',page/@parentId,'//1000'))/udata/items/item[@id = $document-page-id]" mode="slider" />,
то обработку вызова тоже как-то надо переделывать ?

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Пагинация в объекте каталога
« Ответ #3 : 07 Ноября 2014, 20:52:35 »
тот пример, который вы привели, работае по принципу,

1. вызвать макрос который вернет список всех объектов (в вашем примере выводится фотографии фотоальбома с парамтером per_page = 1000)
2. в получившемся xml документе найти id текущей страницы
3. взять предыдущий и последующий элемент и вывести на них ссылку

Безусловно этот способ может иметь право на существование, но далеко не во всех ситуациях (вернее редко когда) оправданно его использование.

Хотя бы на основании того, что делая вызов getObjectsList вам надо будет получить весь список товаров, а это нагрузка на запросы и формирование ответа.

В противовес этому, есть 2 макроса ( %system getPrevious()% и %system getNext()%), которые делают все тоже самое, но экономичней к ресурсам системы. И возвращают однозначный простой xml, который остается только вывести.


P.S. Если по каким-то причинам в вашей ситуации все же удобнее использовать вариант приведенный вами выше, то для вызова макроса getObjectsList не забудьте про параметр per_page, он должен наверняка покрывать все товары в разделе. Например так
<xsl:apply-templates select="document(concat('udata://catalog/getObjectsList//',page/@parentId,'/1000'))/udata/lines/item[@id = $document-page-id]" mode="slider" />

Остальные шаблоны можно оставить такими же.

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
Re:Пагинация в объекте каталога
« Ответ #4 : 09 Ноября 2014, 13:11:12 »
В противовес этому, есть 2 макроса ( %system getPrevious()% и %system getNext()%), которые делают все тоже самое, но экономичней к ресурсам системы. И возвращают однозначный простой xml, который остается только вывести.

Вот я смотрю в инструкцию про макрос %system getNext()% и вижу, что пример его вызова udata://system/getNext/48/notemplate/price/0
таков, что надо изначально знать ID следующего объекта...
Однако не понятно, как сообщить в данном случае системе этот ID каждого объекта динамически, ведь это ж не ID типа данных всё-таки ?

Попробовал так: <xsl:apply-templates select="document(concat('udata://system/getNext/', page/@id))" />

и в результате выводится строчка 54130 /snoubord/burton/snoubord_burton_blunt_13-14/, где 54130 это и есть ID объекта, а /snoubord/burton/snoubord_burton_blunt_13-14/ URL на сам объект.
То есть не получилось строку выдать с ID и URL на следующий объект... Получилось так, что это строка URL выдаёт данные для ссылки на текущий открытый объект, а не следующий...

что я не доделал ?
« Последнее редактирование: 09 Ноября 2014, 13:14:11 от Axiomateria »

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
Re:Пагинация в объекте каталога
« Ответ #5 : 09 Ноября 2014, 13:26:03 »
В итоге так доделал вызов следующего объекта (по аналогии там уж и предыдущий так же):
<xsl:apply-templates select="document(concat('udata://system/getPrevious//notemplate/price/0', page/@id))/udata/link" mode="lister" />
а обработал его:
    <xsl:template match="link" mode="lister">
        <a href="{.}">Следующий</a>
    </xsl:template>
« Последнее редактирование: 09 Ноября 2014, 13:35:00 от Axiomateria »

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Пагинация в объекте каталога
« Ответ #6 : 09 Ноября 2014, 14:27:54 »
Вот я смотрю в инструкцию про макрос %system getNext()% и вижу, что пример его вызова udata://system/getNext/48/notemplate/price/0
таков, что надо изначально знать ID следующего объекта...

Еще раз внимательно посмотрите документацию
Цитировать
Id или путь страницы, относительно которой берется следующая.
То есть вы указываете текущую страницу, а вам возвращается xml с информацией о следующей или предыдущей страницы (в зависимости от того, какой макрос вы используете)

Вижу, в последнем сообщении вы уже сделали правильный разбор xml ответа данного макроса и работаете с узлом link.

Теперь ваш вопрос решен?

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
Re:Пагинация в объекте каталога
« Ответ #7 : 09 Ноября 2014, 17:39:10 »
Вижу, в последнем сообщении вы уже сделали правильный разбор xml ответа данного макроса и работаете с узлом link.
Теперь ваш вопрос решен?

В моём случае вопрос успешно решён для объектов, страницы которых описывают подробную информацию этих объектов, или иначе говоря,
в карточках товаров есть переход от одного к другому по очереди в обычном виде.

Но есть ещё вопрос про тоже самое, но только для  раздела каталога, где все объекты представлены в виде превью и эти превью которые у меня при нажатии на картинку открывает в всплывающем окне подробную карточку товара (про этот случай тема   открыта здесь: http://umihelp.ru/forum/index.php/topic,1913.msg8420.html#msg8420 )
с теми же ссылками на "Предыдущий/Следующий".  Ссылки, правда, в сплывающем окне ведёт куда и должны вести, то есть на предыдущий или следующий объект, вот только они не в сплывающем окне его открывают, а просто как обычно открывается объект... А надо сделать так что бы в модальном окне был такой же листинг объектов, как и в обычном виде.



*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Пагинация в объекте каталога
« Ответ #8 : 10 Ноября 2014, 01:19:24 »
вам надо сделать так, чтобы при нажатии на ссылку во всплывающем окне (последующий и предыдущий) ajax получал html для следующего\предыдущего товара для всплывающего окна и отображал его

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
Re:Пагинация в объекте каталога
« Ответ #9 : 10 Ноября 2014, 09:46:41 »
вам надо сделать так, чтобы при нажатии на ссылку во всплывающем окне (последующий и предыдущий) ajax получал html для следующего\предыдущего товара для всплывающего окна и отображал его

Наверное это уже тема про JS, так как скорее всего надо в тег <a> надо вставить класс как на подобии вставки классов из набора "Fancybox" 
    <xsl:template match="link" mode="lister">
        <a class="fancybox" rel="media-gallery" href="{.}">Следующий</a>
    </xsl:template>

- правда попробовав результат ожидаемый не дался, то есть что срабатывает для фотографий не катит для целиковых страниц...

В рабочем варианте это пока вот так: http://tct-st.ru.fstest.ru/catalog/torgovoe_oborudovanie.html
где в сплывающем окне объекта каталога есть ссылки Вперёд/Назад, которые ведут на html страницы, но в чистом виде, то есть в модальном варианте они не открываются...