Ссылка на предыдущий и следующий товар в интернет-магазине

#
Re: Ссылка на предыдущий и следующий товар в интернет-магазине
Может кто-нибудь подскажет - что я делаю не так?
#
Re: Ссылка на предыдущий и следующий товар в интернет-магазине
#
Re: Ссылка на предыдущий и следующий товар в интернет-магазине
Элемент выбирается по "id", а окружающие его элементы по "sorting".
Что я делаю не так!
#
Re: Ссылка на предыдущий и следующий товар в интернет-магазине
Часть кода ТДС
...
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_id;
   
   $oCore_QueryBuilder_Select = Core_QueryBuilder::select()
      ->select('informationsystem_items.path', 'informationsystem_items.name', 'informationsystem_items.sorting', 'informationsystem_items.id')
      ->from('informationsystem_items')
      ->where('informationsystem_items.sorting', '=', $cur_elem);
   
   $oCore_QueryBuilder_Select = Core_QueryBuilder::select()
      ->select('informationsystem_items.path', 'informationsystem_items.name', 'informationsystem_items.sorting', 'informationsystem_items.id')
      ->from('informationsystem_items')
      ->where('active', '=', 1)
      ->open()
      ->where('informationsystem_items.sorting', '<', $cur_elem)
      ->setAnd()
      ->where('informationsystem_items.informationsystem_id', '=', $cur_group)
      ->setAnd()
      ->where('informationsystem_items.deleted', '=', '0')
      ->close()
      ->clearOrderBy()
      ->orderBy('informationsystem_items.sorting', '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'];

   $oCore_QueryBuilder_Select = Core_QueryBuilder::select()
      ->select('informationsystem_items.path', 'informationsystem_items.name', 'informationsystem_items.sorting', 'informationsystem_items.id')
      ->from('informationsystem_items')
      ->where('active', '=', 1)
      ->open()
      ->where('informationsystem_items.sorting', '>', $cur_elem)
      ->setAnd()
      ->where('informationsystem_items.informationsystem_id', '=', $cur_group)
      ->setAnd()
      ->where('informationsystem_items.deleted', '=', '0')
      ->close()
      ->clearOrderBy()
      ->orderBy('informationsystem_items.sorting')
      ->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-шаблона
<xsl:template match="/informationsystem/informationsystem_item">
<xsl:variable name="link_path" select="/informationsystem/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" />

<!-- Б Л О К  -  окружающие элементы - Предыдущий-Следующий -->
<nav><ul class="pagination">
<xsl:choose>
<xsl:when test="$prev_item != ''"><li class="w-50 page-item text-right"><a class="page-link" href="{$link_path}{$prev_item}/">
<i class="fa fa-lg fa-arrow-circle-left mx-2" aria-hidden="true"></i><xsl:value-of select="$prev_item_name" /></a></li></xsl:when>
<xsl:otherwise><li class="w-50 page-item text-right disabled"><span class="page-link"><i class="fa fa-lg fa-arrow-circle-left mx-2" aria-hidden="true"></i>Начало</span></li></xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="$next_item != ''"><li class="w-50 page-item"><a class="page-link" href="{$link_path}{$next_item}/">
<xsl:value-of select="$next_item_name" /><i class="fa fa-lg fa-arrow-circle-right mx-2" aria-hidden="true"></i></a></li></xsl:when>
<xsl:otherwise><li class="w-50 page-item disabled"><span class="page-link">Конец<i class="fa fa-lg fa-arrow-circle-right mx-2" aria-hidden="true"></i></span></li></xsl:otherwise>
</xsl:choose>
</ul></nav>
Модератор
#
Re: Ссылка на предыдущий и следующий товар в интернет-магазине
Dmitry K.,
Так а в чем проблема то? Элементы не выбираются, или выбираются но не те?
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Ссылка на предыдущий и следующий товар в интернет-магазине
Проблему я постарался описать выше на картинке.
Мне, к примеру, надо чтобы окружающие элементы строились по "sorting".
А у меня происходит следующее:
...берётся "id" текущего элемента, а окружающие элементы сравниваются по "sorting".

770 < 775 < 780;
sorting < id < sorting;
только 770 и 780 - это значения sorting,
775 - id.
#
Re: Ссылка на предыдущий и следующий товар в интернет-магазине
Попробуйте в querybuilder  заменить informationsystem_items.sorting на informationsystem_items.id
«Не выходи из комнаты, не совершай ошибку…»
#
Re: Ссылка на предыдущий и следующий товар в интернет-магазине
Это понятно! Тогда сортировка будет по "id", и она будет "правильная".
Но в том-то всё и дело, что мне нужна сортировка по "sorting"
(в идеале по "name", но сейчас хотя бы так!)
#
Re: Ссылка на предыдущий и следующий товар в интернет-магазине
А как присвоить текущему элементу не id, а имя?
$cur_elem = $Informationsystem_Controller_Show ->item;
Авторизация