ИНФОСИСТЕМЫ / Ссылка на предыдущую и следующую новость в Инфосистеме

Заметка создана: 18 ноября 2024 г.
в ТДС информационной системы перед показом добавляем:
// добавляем окружающие элементы
// Если мы находимся на странице новости
if ($Informationsystem_Controller_Show->item) {
   $oInformationsystem_Item = Core_Entity::factory('Informationsystem_Item', $Informationsystem_Controller_Show->item);
   
   // Текущий элемент
   $cur_elem = $Informationsystem_Controller_Show->item;
   // Текущая группа
   $cur_group = $oInformationsystem_Item->informationsystem_group_id;

   // SELECT * FROM informationsystem_Items WHERE informationsystem_Items.id < $cur_elem ORDER BY informationsystem_Items.id DESC LIMIT 1
   $oCore_QueryBuilder_Select = Core_QueryBuilder::select()
      ->select('informationsystem_items.path','informationsystem_items.name')
      ->from('informationsystem_items')
      ->open()
      ->where('informationsystem_items.id', '<', $cur_elem)
      ->setAnd()
      ->where('informationsystem_items.informationsystem_group_id', '=', $cur_group)
      ->setAnd()
      ->where('informationsystem_items.deleted', '=', '0')
      ->close()
      ->clearOrderBy()
      ->orderBy('id', 'DESC')
      ->limit(1);
      $prev = $oCore_QueryBuilder_Select->execute()->asAssoc()->current();
      $prev = $prev['path'];
      $prev_name = $oCore_QueryBuilder_Select->execute()->asAssoc()->current();
      $prev_name = $prev_name['name'];

   // SELECT * FROM informationsystem_Items WHERE informationsystem_Items.id > $cur_elem ORDER BY informationsystem_Items.id LIMIT 1
   $oCore_QueryBuilder_Select = Core_QueryBuilder::select()
      ->select('informationsystem_items.path','informationsystem_items.name')
      ->from('informationsystem_items')
      ->open()
      ->where('informationsystem_items.id', '>', $cur_elem)
      ->setAnd()
      ->where('informationsystem_items.informationsystem_group_id', '=', $cur_group)
      ->setAnd()
      ->where('informationsystem_items.deleted', '=', '0')
      ->close()
      ->clearOrderBy()
      ->orderBy('id')
      ->limit(1);
      $next = $oCore_QueryBuilder_Select->execute()->asAssoc()->current();
      $next = $next ['path'];
      $next_name = $oCore_QueryBuilder_Select->execute()->asAssoc()->current();
      $next_name = $next_name['name'];

   $Informationsystem_Controller_Show
      ->addEntity(Core::factory('Core_Xml_Entity')
      ->name('neighboring_items')
         ->addEntity(Core::factory('Core_Xml_Entity')->name('prev_item')->value($prev))
         ->addEntity(Core::factory('Core_Xml_Entity')->name('prev_item_name')->value($prev_name))
         ->addEntity(Core::factory('Core_Xml_Entity')->name('next_item')->value($next))
         ->addEntity(Core::factory('Core_Xml_Entity')->name('next_item_name')->value($next_name))
      );
}
// добавляем окружающие элементы
в XSL в нужное место вставляем:
<!-- Получаем ID родительской группы и записываем в переменную $group -->
      <xsl:variable name="group" select="/informationsystem/group"/>
      <!-- окружающие элементы -->
      <xsl:variable name="link_path" select="/informationsystem//informationsystem_group[@id=$group]/url"/>
      <xsl:variable name="prev_item" select="/informationsystem/neighboring_items/prev_item"/>
      <xsl:variable name="next_item" select="/informationsystem/neighboring_items/next_item"/>
      <xsl:variable name="prev_item_name" select="/informationsystem/neighboring_items/prev_item_name"/>
      <xsl:variable name="next_item_name" select="/informationsystem/neighboring_items/next_item_name"/>
      <div class="navigator">
         <xsl:choose>
            <xsl:when test="$prev_item != ''">
               <a href="{$link_path}{$prev_item}/">&#60; Предыдущий элемент (<xsl:value-of select="$prev_item_name" />)</a>
            </xsl:when>
            <xsl:otherwise>
               <span class="previous">&#60; Предыдущий элемент</span>
            </xsl:otherwise>
         </xsl:choose>
         <xsl:choose>
            <xsl:when test="$next_item != ''">
               <a href="{$link_path}{$next_item}/">(<xsl:value-of select="$next_item_name" />) Следующий элемент &#62;</a>
            </xsl:when>
            <xsl:otherwise>
               <span class="next">Следующий элемент &#62;</span>
            </xsl:otherwise>
         </xsl:choose>
      </div>
      <!-- /окружающие элементы -->
XSL