UMIhelp

Разработка сайта на UMI.CMS => Настройка системы и модулей => Тема начата: 0xDEFACE от 18 Апреля 2016, 17:25:06

Название: Пагинация страниц каталога с 1
Отправлено: 0xDEFACE от 18 Апреля 2016, 17:25:06
Приветствую, коллеги!

Подскажите, пож-та, как настроить модуль пагинации каталога с "1", а не с "0"? Т.е. чтобы первой страницей была 1, а не 0.

И ещё вопрос вдогонку:
Как в XSLT шаблоне получить значение номера текущей страницы?
Название: Re: Пагинация страниц каталога с 1
Отправлено: aghigay от 18 Апреля 2016, 23:05:57
Ну получить просто. Пример из demodizzy
<xsl:param name="p">0</xsl:param>
Здесь p - GET-параметр.

А вот насчет сделать страницы с 1 - мне кажется что задача сводится к переписыванию стандартных макросов или их вызовов с указанием конкретно получаемой страницы.

Ну то есть совершенно не проблема написать в качестве параметра не P а, к примеру, PAGE. И в PAGE делать нумерацию с 1. Но нужно еще заставить все используемые стандартные макросы принимать эту нумерацию и слушаться. По-умолчанию, они принимают P. И тут даже не особая проблема принимать - во многих случаях пагинация существует как параметр вызова макроса. Проблема в том, чтобы заставить их правильно формировать ссылки с новой переменно.

Рекомендую даже не заморачиваться этим вопросом, поскольку практической пользы в этом я лично не вижу.
Название: Re: Пагинация страниц каталога с 1
Отправлено: 0xDEFACE от 19 Апреля 2016, 00:39:24
Насёт нумерации с 1 - это какие-то заморочки по SEO, меня попросили сделать.

Я так и не понял как получить значение параметра p в шаблоне. Мне нужно проверить условие, схематично:

if p==0 then
print ОК
Название: Re: Пагинация страниц каталога с 1
Отправлено: aghigay от 19 Апреля 2016, 00:53:02
Эээээ? Это был вопрос из разряда: расскажите мне как сделать условие на XSLT?
<xsl:if test="$p=0">ok</xsl:if>
Название: Re: Пагинация страниц каталога с 1
Отправлено: 0xDEFACE от 19 Апреля 2016, 01:22:58
Да, я только пару дней назад узнал о существовании UMI CMS :-)

Вставляю данное условие (да и вообще любое) в шаблон и если оно выполняется, то output обрывается сразу после этого места. Оставшаяся часть страницы и футер сайта как бы пропускаются и дописывается сразу </body></html>. Что не так?
Название: Re: Пагинация страниц каталога с 1
Отправлено: aghigay от 19 Апреля 2016, 11:46:23
Крайне рекомендую вам посетить курс - он как раз для вас. Насколько я знаю там прошло всего 2 занятия и к нему все еще можно присоединиться. + будут доступны записи. Это даст вам необходимый базис подготовки. Спросите лично преподавателя edu@umihelp.ru
Название: Re: Пагинация страниц каталога с 1
Отправлено: 0xDEFACE от 20 Апреля 2016, 11:34:41
Это очень интересно и я обязательно присоединюсь к последующим курсам , но мне надо решить этот вопрос 3 дня назад.

Подскажите почему всё-таки не работает условие когда $p не определена - шаблон крэшится? Попытки проверить определена ли $p также "рвут шаблон"  :)

<xsl:if test="not($p)">ok</xsl:if>
Название: Re: Пагинация страниц каталога с 1
Отправлено: aghigay от 20 Апреля 2016, 11:37:06
Может это потому, что нет таких конструкций, а какие есть - написаны в доке?
Название: Re: Пагинация страниц каталога с 1
Отправлено: e.ioffe от 20 Апреля 2016, 20:14:54
С
Это очень интересно и я обязательно присоединюсь к последующим курсам , но мне надо решить этот вопрос 3 дня назад.

Подскажите почему всё-таки не работает условие когда $p не определена - шаблон крэшится? Попытки проверить определена ли $p также "рвут шаблон"  :)

<xsl:if test="not($p)">ok</xsl:if>

Проверьте, определена ли переменная "p". В коде должна быть строчка (не обязательно в этом файле):
<xsl:param name="p" />
Название: Re: Пагинация страниц каталога с 1
Отправлено: 0xDEFACE от 20 Апреля 2016, 20:37:45
В моём случае $p - это GET параметр. Если обращаться к странице, например, по адресу site/catalog/?p=2 то $p - определена и равна 2

Если обратиться просто site/catalog/ то $p получается не определена и шаблон крэшится. Вот мне надо как-то поймать этот момент, т.е. вывести "ОК", а не ломать шаблон.

Наверняка должно быть что-то вроде:
if ( !isset($p) ) { echo "OK" }
Название: Re: Пагинация страниц каталога с 1
Отправлено: e.ioffe от 20 Апреля 2016, 20:59:13
Попробуйте определить p как
<xsl:param name="p"></xsl:param>
и проверять
<xsl:if test="$p = ''"></xsl:if>
Название: Re: Пагинация страниц каталога с 1
Отправлено: 0xDEFACE от 20 Апреля 2016, 21:04:58
После такого определения "p", условие выполняется всегда вне зависимости от значения параметра ?p=N
Название: Re: Пагинация страниц каталога с 1
Отправлено: e.ioffe от 20 Апреля 2016, 21:11:55
Значит, у вас что-то не так с условием. Без кода сложно сказать.
Название: Re: Пагинация страниц каталога с 1
Отправлено: 0xDEFACE от 20 Апреля 2016, 21:14:22
Что может быть не так? Я скопипастил то, что Вы предложили к себе в шаблон, вот и всё...
Название: Re: Пагинация страниц каталога с 1
Отправлено: aghigay от 20 Апреля 2016, 23:11:15
Осмелюсь предположить, что само наличие проблемы в результате является следствием ошибки в коде. Конечно можно продолжить телепатический сеанс связи, но, если вам реальна нужна помощь - давайте код в студию :-)
Название: Re: Пагинация страниц каталога с 1
Отправлено: 0xDEFACE от 20 Апреля 2016, 23:36:27
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:umi="http://www.umi-cms.ru/TR/umi">


<!--CТРАНИЦА ОБЪЕКТА КАТАЛОГА--> 
<xsl:template match="result[@module='catalog' and @method='object']">
<div class="cont">
<xsl:apply-templates select="document('udata://core/navibar')/udata" mode="navibar"/>
<xsl:choose>
<xsl:when test="//property[@name='seostranica']/value = '1'">
<xsl:variable name="cat_seacrh" select="document(concat('udata://catalog/setPageFilter/', @pageId,'/', page/@type-id))"/>

<div class="products" style="padding-bottom: 3%; padding-top:0px;">
<div class="block_title"><xsl:value-of select="$pid_page//group[@name='common']/property[@name='h1']/value"/></div>
<div class="filter checkout" style="width:30%; float:left; border: 3px solid #00bbd3; padding-bottom: 34px;">
<xsl:apply-templates select="document(concat('udata://catalog/search/', $cat_root, '///86'))/udata" mode="search_filter" />
</div>

<div class="items" style="width:68%; float:right">
<xsl:apply-templates select="document(concat('udata://catalog/getObjectsListCustom/', $cat_root,'/12/0/5'))/udata" mode="catalog_page_filter"/>
<!-- <xsl:apply-templates select="document(concat('udata://catalog/getObjectsListCustom/', $cat_root,'/', $cat_sort, '/0/5'))/udata" mode="catalog_page_filter"/> -->
<div class="clear"></div>
</div>

<div style="clear:both; width:100%"></div>


</div>

<!--
ЗДЕСЬ НУжНО ПРОВЕРИТЬ ЕСЛИ $_GET['p'] (она же $p) НЕ определена, то вывести этот блок:
======= НАЧАЛО БЛОКА =========
-->
<xsl:if test="//property[@name='opisanie']/value">

<div class="bottom_text">
<div class="cont">
<xsl:value-of select="//property[@name='opisanie']/value" disable-output-escaping="yes"/>
</div>
</div>

</xsl:if>
<!--
======= КОНЕЦ БЛОКА =========
-->

</xsl:when>
<xsl:otherwise>
и тут ещё много всего....
Название: Re: Пагинация страниц каталога с 1
Отправлено: aghigay от 21 Апреля 2016, 11:32:41
Хм. А как по этому фрагменту сказать в чем у вас ошибка? Вы ведь даже не показали ни одной конструкции, которую используете

В продолжение телепатического сеанса связи: воспользуйтесь конструкцией
<xsl:param name="p" select="'0'" />

Тогда проверку можно делать, например, так:
        <xsl:choose>
            <xsl:when test="$p = '0'">не определена</xsl:when>
            <xsl:otherwise>определена</xsl:otherwise>
        </xsl:choose>
Название: Re: Пагинация страниц каталога с 1
Отправлено: 0xDEFACE от 21 Апреля 2016, 13:05:47
Блеск! Работает как надо, спасибо!
Название: Re: Пагинация страниц каталога с 1
Отправлено: aghigay от 21 Апреля 2016, 13:11:29
Вот что творит телепатическая связь!