Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Пагинация при выводе данных через usel

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

Ответов: 9
Просмотров: 5604
Последний ответ 18 Декабря 2013, 23:48:27
от Axiomateria
Пагинация постов блога

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

Ответов: 12
Просмотров: 5716
Последний ответ 20 Ноября 2012, 09:17:38
от niakriss
Пагинация в объекте каталога

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

Ответов: 9
Просмотров: 4040
Последний ответ 10 Ноября 2014, 09:46:41
от Axiomateria
Пагинация страниц каталога с 1

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

Ответов: 18
Просмотров: 4318
Последний ответ 21 Апреля 2016, 13:11:29
от aghigay
пагинация без перезагрузки

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

Ответов: 6
Просмотров: 4593
Последний ответ 14 Января 2013, 16:48:18
от niakriss

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

*

mimo

  • *
  • 6
  • +0/-0
    • Просмотр профиля
Пагинация ?p=0
« : 26 Апреля 2014, 09:22:55 »
Здравствуйте уважаемые участники форума!
Вопрос следующий в каталоге стоит пагинация вида /?p=номер страницы
при переходе на первую страницу образуется урл с /?p=0, а это дубль страницы каталога.
Как сделать условие что если страница первая то выводилась страница каталога. Возможно у кого то была подобная проблема.
Пока сделал редирект, но не считаю это правильным.
Спасибо!

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Re:Пагинация ?p=0
« Ответ #1 : 26 Апреля 2014, 12:32:27 »
Странно. Пагинация генерируется стандартным макросом? Какая версия системы?
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

mimo

  • *
  • 6
  • +0/-0
    • Просмотр профиля
Re:Пагинация ?p=0
« Ответ #2 : 27 Апреля 2014, 21:14:28 »
вроде стандартным. версия 2.9.1
я так полагаю формируется из файла pagenum.php по пути
/classes/system/utils/pagenum
« Последнее редактирование: 28 Апреля 2014, 19:57:43 от mimo »

*

ilyar

Re:Пагинация ?p=0
« Ответ #3 : 28 Апреля 2014, 12:49:37 »
Макрос system numpages() реализован классом umiPagenum выдает вот такую структуру данных:

Код: XML [Выделить]

<udata module="system" method="numpages" generation-time="0.000595">
  <items>
    <item link="?p=0" is-active="1">1</item>
    <item link="?p=1" page-num="1">2</item>
    <item link="?p=2" page-num="2">3</item>
    <item link="?p=3" page-num="3">4</item>
  </items>
  <toend_link page-num="3">?p=3</toend_link>
  <tonext_link page-num="1">?p=1</tonext_link>
</udata>


Поэтому все верно для первой страницы будет дубль ?p=0 от него можно избавиться на уровне шаблонизатора, не знаю как это сделать в TPL,  но в XSLT просто:

Код: XSL [Выделить]

  <xsl:template match="udata[@method='numpages']/items/item">
    <li>
      <xsl:apply-templates select="@is-active"/>
      <a href="{@link}">
        <xsl:value-of select="."/>
      </a>
    </li>
  </xsl:template>

  <xsl:template match="udata[@method='numpages']/items/item[position()=1]">
    <li>
      <xsl:apply-templates select="@is-active"/>
      <a href=".">
        <xsl:value-of select="."/>
      </a>
    </li>
  </xsl:template>


Еще вариант кастомизировать макрос system numpages().

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Re:Пагинация ?p=0
« Ответ #4 : 28 Апреля 2014, 13:19:21 »
Да, совсем забыл - писал костыль для этих целей.

В custom.php:

public function numpages($total = 0, $per_page = 0, $template = "default", $varName = "p", $max_pages = false) {
    $system = system_buildin_load('system');

    $return = $system->numpages($total, $per_page, $template, $varName, $max_pages);

    if(!is_array($return))
        return $return;

    if($return['void:pages'][0]['attribute:page-num'] === 0) {
        $link = str_replace('p=0', '', $return['void:pages'][0]['attribute:link']);

        if($link === '?' || $link === '')
            $link = '/';

        $return['void:pages'][0]['attribute:link'] = $link;
        $return['items']['nodes:item'][0]['attribute:link'] = $link;
    }

    if(isset($return['toprev_link']) && $return['toprev_link']['attribute:page-num'] === 0) {
        $link = str_replace('p=0', '', $return['toprev_link']['node:value']);

        if($link === '?' || $link === '')
            $link = '/';

        $return['toprev_link']['node:value'] = $link;
    }

    if(isset($return['tobegin_link']) && $return['tobegin_link']['attribute:page-num'] === 0) {
        $link = str_replace('p=0', '', $return['tobegin_link']['node:value']);

        if($link === '?' || $link === '')
            $link = '/';

        $return['tobegin_link']['node:value'] = $link;
    }

    return $return;
}
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

ilyar

Re:Пагинация ?p=0
« Ответ #5 : 28 Апреля 2014, 14:27:25 »
Да, совсем забыл - писал костыль для этих целей.

Собираю подобные фиксы в проекте UMI.CMS / patchs, предлагаю присоединится и опубликовать этот кастом в раздел Snippets, что скажешь?

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Re:Пагинация ?p=0
« Ответ #6 : 28 Апреля 2014, 14:33:26 »
Собираю подобные фиксы в проекте UMI.CMS / patchs, предлагаю присоединится и опубликовать этот кастом в раздел Snippets, что скажешь?

Это скорее не патч, а custom, так как полностью зависит от того, что будет отдавать system numpages.

Лучше было бы иметь выход напрямую на разработчиков UMI (не продираясь через Службу заботы), чтобы сообщать о проблемах.
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

ilyar

Re:Пагинация ?p=0
« Ответ #7 : 28 Апреля 2014, 15:13:49 »
Это скорее не патч, а custom, так как полностью зависит от того, что будет отдавать system numpages.

Лучше было бы иметь выход напрямую на разработчиков UMI (не продираясь через Службу заботы), чтобы сообщать о проблемах.

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

*

mimo

  • *
  • 6
  • +0/-0
    • Просмотр профиля
Re:Пагинация ?p=0
« Ответ #8 : 28 Апреля 2014, 16:11:36 »
Да, совсем забыл - писал костыль для этих целей.

В custom.php:
Спасибо за помощь!

я так понял этот код нужно закинуть в файлик custom.php?
что то у меня не отрабатывает... Что могу делать не так?

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Re:Пагинация ?p=0
« Ответ #9 : 28 Апреля 2014, 16:14:02 »
Да, совсем забыл - писал костыль для этих целей.

В custom.php:
Спасибо за помощь!

я так понял этот код нужно закинуть в файлик custom.php?
что то у меня не отрабатывает... Что могу делать не так?

В custom. Вместо вызова system/numpages нужно писать custom/numpages
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Re:Пагинация ?p=0
« Ответ #10 : 29 Апреля 2014, 13:23:23 »
Писал код по памяти, забыл про существенную деталь (параметр $first_page_link в конце). Правильный код и немного рефакторинга:
public function numpages($total = 0, $per_page = 0, $template = "default", $varName = "p", $max_pages = false, $first_page_link = false) {
if(!$first_page_link)
$first_page_link = umiHierarchy::getInstance()->getPathById(cmsController::getInstance()->getCurrentElementId());

$system = system_buildin_load('system');

$return = $system->numpages($total, $per_page, $template, $varName, $max_pages);

if(is_array($return)) {
if($return['void:pages'][0]['attribute:page-num'] === 0) {
$link = $this->prepareNumpagesLink($return['void:pages'][0]['attribute:link'], $first_page_link);

$return['void:pages'][0]['attribute:link'] = $link;
$return['items']['nodes:item'][0]['attribute:link'] = $link;
}

if(isset($return['toprev_link']) && $return['toprev_link']['attribute:page-num'] === 0) {
$link = $this->prepareNumpagesLink($return['toprev_link']['node:value'], $first_page_link);

$return['toprev_link']['node:value'] = $link;
}

if(isset($return['tobegin_link']) && $return['tobegin_link']['attribute:page-num'] === 0) {
$link = $this->prepareNumpagesLink($return['tobegin_link']['node:value'], $first_page_link);

$return['tobegin_link']['node:value'] = $link;
}
} elseif(trim($return) !== '') {
$return = $this->prepareNumpagesLink($return, $first_page_link);
}

return $return;
}

public function prepareNumpagesLink($string, $first_page_link) {
$string = str_replace('?p=0&', '?', $string);
$string = str_replace('?p=0', $first_page_link, $string);
$string = str_replace('p=0', '', $string);

return $string;
}
« Последнее редактирование: 11 Мая 2014, 13:29:06 от e.ioffe »
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Re:Пагинация ?p=0
« Ответ #11 : 10 Мая 2014, 17:02:42 »
https://www.fl.ru/tu/10609/seo-optimizatsiya-sayta-na-umicms-paginatsiya.html - для тех, у кого не получается решить проблему самостоятельно.
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/