Разбиение комментариев по страницам для информационной системы

Модератор
#
Разбиение комментариев по страницам для информационной системы
Для динамической страницы добавляем атрибут с именем "Количество комментариев на странице", даем ему имя "CommentsOnPage" и значение по умолчанию "10".

Редактируем в структуре сайта узлы с этой динамической страницей, указываем кол-во комментариев на страницу и сохраняем.

В настройки динамической страницы перед:
$GLOBALS['INFSYS_result'] = $GLOBALS['LA_InformationSystem']->GetInformationFromPath($InformationSystem_id, '', $break_if_path_not_found);


Добавляем:
// Нумерация для комментариев
if (ereg ("^comment-page-([0-9]*)$", end($GLOBALS['URL_ARRAY']), $regs) && to_int($regs[1]) > 0)
{
   /* Страница умножается на кол-во элементов, выводимых на страницу */
   $break_if_path_not_found = false;
   $GLOBALS['comment-page'] = $regs[1];
}

В код динамической страницы вместо
$GLOBALS['LA_InformationSystem']->ShowInformationSystemItem( ...


пишем

      // Для тех, кто поленился в структуре отредактировать и указать
      if (!isset($GLOBALS['LA']['CommentsOnPage']))
      {
         $GLOBALS['LA']['CommentsOnPage'] = 10;
      }

      $begin = to_int($GLOBALS['comment-page']);

      if ($begin <= 0)
      {
         $begin = 0;
         $param['begin'] = 0;
      }
      else
      {
         $begin--;
         $param['begin'] = $begin * to_int($GLOBALS['LA']['CommentsOnPage']);
      }

      $external_propertys['CommentsCurrentPage'] = $begin;

      $param['count'] = to_int($GLOBALS['LA']['CommentsOnPage']);
      $external_propertys['CommentsOnPage'] = $param['count'];

      // Выводим элемент информационной системы
      $GLOBALS['LA_InformationSystem']->ShowInformationSystemItem($item_id, $xsl_item, $external_propertys,
      $param);

Теперь в XSL после:
<xsl:apply-templates select="item_comments/comment"/>

добавим нумерацию:
            <xsl:call-template name="for">
               <xsl:with-param name="items_on_page" select="/document/CommentsOnPage" />
               <xsl:with-param name="current_page" select="/document/CommentsCurrentPage"/>
               <xsl:with-param name="link" select="/document/item/item_path"/>
               <xsl:with-param name="count_items" select="item_comments/count_comments"/>
               <xsl:with-param name="visible_pages">6</xsl:with-param>
               <xsl:with-param name="prefix">comment-page</xsl:with-param>
            </xsl:call-template>


если на "вторых" страницах с комментариями не хочется, чтобы публиковался весь информационный элемент, а публиковалась только часть, например название (чтобы поисковые системы не посчитали внутренними дубликатами страниц), в XSL те блоки, которые должны публиковаться на главной странице добавим в условие
<!-- если нет текущей страницы комментариев или она больше 0 -->
<xsl:if test="not(/document/CommentsCurrentPage/node()) or /document/CommentsCurrentPage = 0">
...
</xsl:if>

Работать будет с версии 5.2.0.
#
Re: Разбиение комментариев по страницам для информационной системы
Такая ситуация:
Комментариев задано 10.
Ответов на комментарий 50 штук.

При этом коде он просто пропадает с сайта, комментарий с его ответами...
Как сделать что бы учитывался только комментарий, а ответы на них не учитывались. например если на странице выставлено 5 комментариев то что бы было 5 комментариев 1 уровня, а ответов может быть на этой странице хоть 50-100-1000
Skype:ferdinant1988 ICQ:311960596 E-mail: ferdinant@i.ua
Модератор
#
Re: Разбиение комментариев по страницам для информационной системы
ferdinant,
<xsl:with-param name="count_items" select="item_comments/count_comments"/>

в этой строке говорится о количестве комментариев для 1-2-3, соответственно получается их нужно брать не здесь из общего числа, а снаружи расчитывать на PHP и передавать аналогично через $external_propertys
#
Re: Разбиение комментариев по страницам для информационной системы
Пытаюсь сделать разбиение комментариев к товарам в магазине по страницам подобным образом. Изменения -- дал параметру количества на странице другое название (соответственно, переименовал везде по коду), ну и вставил приведенный код в подобные места настроек и страницы (где обрабатывается вывод отдельного товара). Однако не работает. XML дает полный. Что может быть не так?

И еще вопрос: у вас в коде для страницы задаются ключи параметра $param['count'] и $param['begin']. Однако в описании параметра $param метода InformationSystem::ShowInformationSystemItem($item_id, $xsl_item, $external_propertys, $param) в документации данные ключи не приведены. Я что-то пропустил или у вас неполная документация? Может, мои проблемы из-за незнания каких-то ключей параметра метода Shop::ShowItem()?
#
Re: Разбиение комментариев по страницам для информационной системы
Подскажите пожалуйста реализацию для интернет-магазина
HostDev.pw - модули для HostCMS, Telegram: @hostdev
Авторизация