UMIhelp

Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: niakriss от 15 Ноября 2012, 15:12:23

Название: Пагинация постов блога
Отправлено: niakriss от 15 Ноября 2012, 15:12:23
делаю все тоже самое что и раньше.. не могу понять почему не получается( может кто увидит у меня ошибку?
у меня создано 11 постов. должно выводить 10 и на 2 странице 1... а выводит 11 и на 2 странице 10 причем со 2 по 11 посты...
вот мой шаблон:

<!-- Переменные для постр навигации -->
  <xsl:variable name="doc-postslist" select="document(concat('udata://blogs20/postsList/', /result/@pageId))" />
  <xsl:variable name="doc-postslist-numpages" select="document(concat('udata://system/numpages/', $doc-postslist/udata/total, '/', $doc-postslist/udata/per_page, '/notemplate/p/10'))" /> 

<xsl:template match="result[@module = 'blogs20'][@method = 'blog']">

<xsl:variable name="path" select="//property[@name='fotografiya']/value" />
<h1><xsl:value-of select="//property[@name='h1']/value" /></h1>
<div><xsl:value-of select="//property[@name='familiya']/value"/></div>
<div><xsl:value-of select="//property[@name='imya_otchestvo']/value"/></div>
<div><xsl:value-of select="//property[@name='dolzhnost_zvanie']/value"/></div>
<div><img src="{document(concat('udata://system/makeThumbnailFull/(.', $path, ')/201/140'))//udata/src}" width="201" height="140" alt="" /></div>
<xsl:apply-templates select="document(concat('udata://blogs20/postsList/', /result/@pageId))/udata/items/item"  mode="blogs_list"/>

<!-- Постраничная навигация -->
<div class="pagination"><xsl:apply-templates select="$doc-postslist-numpages" mode="paging" /></div>
</xsl:template>

<xsl:template match="item"  mode="blogs_list" >
<div><a href="{post_link}"><xsl:value-of select="document(concat('upage://',@id,'.h1'))//value" /></a></div>
<div><xsl:value-of select="document(concat('upage://',@id,'.content'))//value" disable-output-escaping="yes"/></div>

 
 </xsl:template>
Название: Re:Пагинация постов блога
Отправлено: admin от 16 Ноября 2012, 10:37:09
закинул ваши шаблоны в demodizzy все выводит правильно, но по характеру ошибки создается такое впечатление что пагинация работает не по принципу: "указать количество объектов на странице и текущую страницу", а по принципу: "указать количество объектов на странице, плюс смещение от начала списка объектов"

второй принцип (со смещеие) есть в системе, но он по идее никакого отношению к макросу  udata://blogs20/postsList/ не имеет.

Плюс, у вас не приведены шаблоны вашей пагинации, может там чего интересного. Плюс, вы не уточнили, где именно вы указываете, что на странице надо выводить по 10 элементов (возможно в админке, в настройке модуля "блоги"). Еще я бы взглянуть на код макроса udata://blogs20/postsList/, может у вас самая свежая версия и там что-то поменялось (эта функция лежит в файле classes/modules/blogs20/class.php)
Название: Re:Пагинация постов блога
Отправлено: niakriss от 16 Ноября 2012, 10:42:04
да.. точно.. версию только вчера обновила до последний.. возможно и в этомпроблема... в новостях и фотках и в каталоге все нормально по этому же принципу работает.. с этой же пагинацией... Сейчас изучу class.php
Название: Re:Пагинация постов блога
Отправлено: admin от 16 Ноября 2012, 10:53:14
если выборка делается через такую строчку

$sel = new umiSelection;

то это первый вариант механизма, а вот если что-то типа
$sel = new selector('pages');

то это уже второй вариант который работает со смещением, тогда особое внимание обратите на строчки типа
$sel->limit($offset, $limit);

первая переменная $offset - это смещение. Если туда просто ставиться значение параметра p, который берется из адресной строки, то тогда это ошибка кода, пишите в umi. Если нет, то пишите сюда, будем дальше копать
Название: Re:Пагинация постов блога
Отправлено: niakriss от 16 Ноября 2012, 11:04:47
дааа... я уже заметила это отличае))) спасибо)
Название: Re:Пагинация постов блога
Отправлено: niakriss от 16 Ноября 2012, 11:12:15
такого как вы написали нет... но есть

if($limit) {
$sel->limit($page, $limit);
} else {
$sel->limit($page, $this->comments_per_page);
}

где $page:

$page = (int)getRequest('p');
Название: Re:Пагинация постов блога
Отправлено: admin от 16 Ноября 2012, 11:51:07
a выборка такая $sel = new umiSelection;?
Название: Re:Пагинация постов блога
Отправлено: niakriss от 16 Ноября 2012, 12:00:23
нет...
$sel = new selector('pages');
Название: Re:Пагинация постов блога
Отправлено: admin от 16 Ноября 2012, 12:10:17
тогда это ошибка umi? можете им писать что в таком то макрсое неправильно сделан механизм пагинации при использовании select в функции такой-то

Если говорить о текущем решении, то исправте код
if($limit) {
$sel->limit($page, $limit);
} else {
$sel->limit($page, $this->comments_per_page);
}

на
if($limit) {
$ofset = $page*$limit;
$sel->limit($ofset, $limit);
} else {
$ofset = $page*$this->comments_per_page;
$sel->limit($ofset, $this->comments_per_page);
}
Название: Re:Пагинация постов блога
Отправлено: niakriss от 16 Ноября 2012, 14:20:09
нуу меня пока неособо горит проект.. подожду ответа юми))) спасибо за ответы)
Название: Re:Пагинация постов блога
Отправлено: niakriss от 19 Ноября 2012, 11:07:24
и точно их баг... они признались...))) сказали что как только поступит решение из отдела разработки, они нам сообщат)
Название: Re:Пагинация постов блога
Отправлено: admin от 20 Ноября 2012, 00:13:25
ну или попробовать то решение  что написал я. выше)
Название: Re:Пагинация постов блога
Отправлено: niakriss от 20 Ноября 2012, 09:17:38
тоже верно... но пока занялась другим сайтом)