UMIhelp

Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: kinki от 30 Октября 2013, 11:50:45

Название: Модуль numpages.xsl
Отправлено: kinki от 30 Октября 2013, 11:50:45
Всем привет!
В новостях есть нумерация страниц 1 2 3 и т.д
Мне нужно добавить кнопки "В начало" и "В конец".
Нашла в документации такое
<xsl:template match="udata[not(tobegin_link) and toend_link]" mode="paging.words">
    <div class="paging-words">
      <a>«&nbsp;В начало</a>
      &nbsp;   
      <a>«&nbsp;Предыдущая</a>   
    &nbsp;&nbsp;|&nbsp;&nbsp;
      <a class="active" href="{tonext_link}">Следующая&nbsp;»</a>
    &nbsp;
    <a class="active" href="{toend_link}">В&nbsp;конец&nbsp;»</a>
    </div>
</xsl:template>

<xsl:template match="udata[tobegin_link and toend_link]" mode="paging.words">
    <div class="paging-words">
      <a class="active" href="{tobegin_link}">«&nbsp;В начало</a>
      &nbsp;
      <a class="active" href="{toprev_link}">«&nbsp;Предыдущая</a>
    &nbsp;&nbsp;|&nbsp;&nbsp;
      <a class="active" href="{tonext_link}">Следующая&nbsp;»</a>
      &nbsp;
    <a class="active" href="{toend_link}">В&nbsp;конец&nbsp;»</a>
    </div>
</xsl:template>
 
<xsl:template match="udata[tobegin_link and not(toend_link)]" mode="paging.words">
    <div class="paging-words">
      <a class="active" href="{tobegin_link}">«&nbsp;В начало</a>
      &nbsp;
      <a class="active" href="{toprev_link}">«&nbsp;Предыдущая</a>
    &nbsp;&nbsp;|&nbsp;&nbsp;
      <a>Следующая&nbsp;»</a>
      &nbsp;
    <a>В&nbsp;конец&nbsp;»</a>
    </div>
</xsl:template>

Но в своем шаблоне применить не получается(
Мой Модуль numpages.xsl


<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet SYSTEM "ulang://i18n/constants.dtd:file">

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:template match="total" />
        <xsl:template match="total[. &gt; ../per_page]">
                <xsl:apply-templates select="document(concat('udata://system/numpages/', ., '/', ../per_page))" />
        </xsl:template>

        <xsl:template match="udata[@method = 'numpages']" />
        <xsl:template match="udata[@method = 'numpages'][count(items)]">
                <div class="paging">
                        <xsl:apply-templates select="items/item" mode="numpages" />
                         <xsl:templates select="items/item" mode="paging" />
                </div>
        </xsl:template>

        <xsl:template match="item" mode="numpages">
                <a href="{@link}">
                        <xsl:value-of select="." />
                </a>
        </xsl:template>

        <xsl:template match="item[@is-active = '1']" mode="numpages">
                <a href="{@link}" class="active"><xsl:value-of select="." /></a>
        </xsl:template>

        <xsl:template match="toprev_link">
                <a class="prev" href="{.}">
                        <xsl:text>&previous-page;</xsl:text>
                </a>
        </xsl:template>

        <xsl:template match="tonext_link">
                <span>
                        <xsl:text>|</xsl:text>
                </span>
                <a class="next" href="{.}">
                        <xsl:text>&next-page;</xsl:text>
                </a>
        </xsl:template>

<xsl:template match="udata[not(tobegin_link) and toend_link]" mode="paging">
    <a class="active" href="{toend_link}">В&nbsp;конец&nbsp;»</a>
</xsl:template>
    <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:stylesheet>

Название: Re:Модуль numpages.xsl
Отправлено: admin от 30 Октября 2013, 22:21:19
у вас уже все есть (хотя некоторые шаблоны немного смущает своей непонятнойстью или возможно избыточностью). Вам надо в шаблон

<xsl:template match="udata[@method = 'numpages'][count(items)]">
                <div class="paging">
                        <xsl:apply-templates select="items/item" mode="numpages" />
                         <xsl:templates select="items/item" mode="paging" />
                </div>
        </xsl:template>

вставить вызовы <xsl:apply-templates select="tobegin_link"  />
и <xsl:apply-templates select="toend_link" />

и добавить шаблоны для этих вызовов
        <xsl:template match="tobegin_link">
                <a class="begin" href="{.}">
                        <xsl:text>В начало</xsl:text>
                </a>
        </xsl:template>
        <xsl:template match="toend_link">
                <a class="end" href="{.}">
                        <xsl:text>В конец</xsl:text>
                </a>
        </xsl:template>
Название: Re:Модуль numpages.xsl
Отправлено: Axiomateria от 10 Ноября 2014, 23:49:19
И вот ещё такой вопрос: возможно ли вывести количество объектов каталога в разделе с пагинацией в этом же макросе или это по другому как-то надо выводить ?
Допустим, что страниц с объектами в разделе = 5 и общее количество объектов на всех этих пяти страницах в сумме = 45
Название: Re:Модуль numpages.xsl
Отправлено: admin от 11 Ноября 2014, 00:27:36
Обратите внимание на переменную total, в частности в результатах макроса getObjectsList()
Название: Re:Модуль numpages.xsl
Отправлено: Axiomateria от 11 Ноября 2014, 01:02:46
Обратите внимание на переменную total, в частности в результатах макроса getObjectsList()
Это конечно да.

Я почему спрашивал про вставку значения total именно в этот файл numpages.xsl - подводя к такому вопросу:
а возможно ли, по мере перехода по страницам пользователем страниц показывать ему оставшееся количество объектов на ещё не просмотренных страницах ?
То есть по идее на первой странице ему показывается общее количество объектов = 45, а на второй уже = 35 ?
Название: Re:Модуль numpages.xsl
Отправлено: Axiomateria от 11 Ноября 2014, 10:23:07
Обратите внимание на переменную total, в частности в результатах макроса getObjectsList()

и вот ещё такой момент - количество объектов в разделе выводится только в одном уровне вложенности, то есть Раздел/Объекты.
А что делать если уровни вложенности Раздел/Подраздел/Подподраздел/Объекты ?
Если мы находимся, к примеру, на верхнем уровне "Раздел", то выводится "0" и только, если мы погрузимся на уровень
"Подподраздел" то вот только тогда можно увидеть количество объектов вместо нуля.
Название: Re:Модуль numpages.xsl
Отправлено: admin от 11 Ноября 2014, 11:57:58
обратите внимание на параметр i_need_deep (http://dev.docs.umi-cms.ru/spravochnik_makrosov_umicms/katalog/catalog_getobjectslist/#sel=18:1,19:14)
Название: Re:Модуль numpages.xsl
Отправлено: Axiomateria от 11 Ноября 2014, 12:32:11
обратите внимание на параметр i_need_deep (http://dev.docs.umi-cms.ru/spravochnik_makrosov_umicms/katalog/catalog_getobjectslist/#sel=18:1,19:14)

Вот вызов, в котором пятый по счёту параметр i_need_deep = 2
<xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/', $cat_id, '//8//2/'))/udata" />

но если я его изменяю, например на = 0, то превью пропадают их раздела, при этом ноль как показатель количества объектов таки и остаётся нулём...
Название: Re:Модуль numpages.xsl
Отправлено: admin от 11 Ноября 2014, 12:50:31
но если я его изменяю, например на = 0, то превью пропадают их раздела

Превью чего? товаров?

Вот вызов, в котором пятый по счёту параметр i_need_deep = 2
<xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/', $cat_id, '//8//2/'))/udata" />

Возможно дело в том, что вы передаете параметр  $cat_id первым, а по документации параметр с url или id интересующего вас раздела идет вторым. Скорее всего, этот ошибочный вызов является  копией из файлов demodizzy. Там есть такой момент, но в определенных обстоятельствах он ни на что не влияет, поэтому не сразу и заметишь.
Название: Re:Модуль numpages.xsl
Отправлено: Axiomateria от 11 Ноября 2014, 13:13:20
но если я его изменяю, например на = 0, то превью пропадают их раздела
Превью чего? товаров?
Да, имелось ввиду превью товаров (объектов каталога).
Возможно дело в том, что вы передаете параметр  $cat_id первым, а по документации параметр с url или id интересующего вас раздела идет вторым. Скорее всего, этот ошибочный вызов является  копией из файлов demodizzy. Там есть такой момент, но в определенных обстоятельствах он ни на что не влияет, поэтому не сразу и заметишь.

переменная <xsl:variable name="cat_id" select="page/@id" /> если и не нужна, то тогда вызывая без неё  всё равно получается так же с нулём:
<xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/', '//8//2/'))/udata"/>
Название: Re:Модуль numpages.xsl
Отправлено: admin от 11 Ноября 2014, 13:27:46
попробуйте увечить цифру, только что проверил у себя на локале, все выводится, в том числе и total
Название: Re:Модуль numpages.xsl
Отправлено: Axiomateria от 11 Ноября 2014, 13:40:06
попробуйте увечить цифру, только что проверил у себя на локале, все выводится, в том числе и total

Увеличил в десять раз и в целом оно выглядит так:

    <xsl:template match="result[@method = 'category']">   
        <xsl:apply-templates select=".//property[@name = 'descr']" mode="seo_content" />
        <xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/', '//8//20/'))/udata" mode="layout_0" />
        <xsl:apply-templates select="document('udata://catalog/getObjectsList/')/udata/total" mode="total_items" />
    </xsl:template>

    <xsl:template match="udata/total" mode="total_items">
        <b>
            <xsl:text>Всего:</xsl:text>
            <xsl:value-of select="." />
        </b>
    </xsl:template>
Название: Re:Модуль numpages.xsl
Отправлено: admin от 11 Ноября 2014, 13:42:00
Увеличил в десять раз и в целом оно выглядит так:

И, я так понимаю, результат тот же?
Название: Re:Модуль numpages.xsl
Отправлено: Axiomateria от 11 Ноября 2014, 14:08:45
Увеличил в десять раз и в целом оно выглядит так:

И, я так понимаю, результат тот же?

Да. тот же, то есть выводится значение total = 0 вместо количества = 45