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

Модератор
#
Re: Ссылка на предыдущий и следующий товар в интернет-магазине
volgastar,

Смотрите XML, который формируется на странице и по нему проверяйте правильность указания переменных в XSL-шаблоне.
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Ссылка на предыдущий и следующий товар в интернет-магазине
Подскажите а как сделать чтобы окружаешие элементы информ системы строились с учетом порядка сортировки?
Делаю то благодаря чему, несмотря ни на что
#
Re: Ссылка на предыдущий и следующий товар в интернет-магазине
для инфосистем есть маленькая проблема  в начале темы  - при достижении последнего новости из любой инфосистемы, ссылка на следующий материал брался из другой инфосистемы. Решилось изменением в коде обнаружения текущей группы.  И подправил обнаружение пути url к инфосистеме. У меня сейчас версия hostcms 6.6.2

Рабочий код:

для ТДС ИНФОСИСТЕМЫ:


// Если мы находимся на странице инфоэлемента
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;


   // 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')
      ->from('informationsystem_Items')
      ->open()
         ->where('informationsystem_Items.id', '<', $cur_elem)
         ->setAnd()
         ->where('informationsystem_Items.informationsystem_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'];

   // 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')
      ->from('informationsystem_Items')
      ->open()
         ->where('informationsystem_Items.id', '>', $cur_elem)
         ->setAnd()
         ->where('informationsystem_Items.informationsystem_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'];

   $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('next_item')->value($next))
      );
}



Для Шаблона

      <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="link_path" select="/informationsystem/url"/>

            <div class="prevnext">
               <xsl:choose>
                  <xsl:when test="$prev_item != ''">
                     <a href="{$link_path}{$prev_item}/">предыдущая новость</a>
                  </xsl:when>
                  <xsl:otherwise>
                     <span class="previous">предыдущая новость</span>
                  </xsl:otherwise>
               </xsl:choose>
               <xsl:choose>
                  <xsl:when test="$next_item != ''">
                     <a href="{$link_path}{$next_item}/">следующая новость</a>
                  </xsl:when>
                  <xsl:otherwise>
                     <span class="next">следующая новость</span>
                  </xsl:otherwise>
               </xsl:choose>
            </div>
#
Re: Ссылка на предыдущий и следующий товар в интернет-магазине
Хорошее решение, полезная информация - помогла!
А не подскажете, как осуществить навигацию, где порядок определяется не по коду (id) инфоэлемента, а по алфавиту?
#
Re: Ссылка на предыдущий и следующий товар в интернет-магазине
Добрый день!
Может кто-нибудь подскажет: как сделать следующее...
Вывод ссылок на предыдущий и следующий элемент инфосистемы, таким образом чтобы:
  • в ссылках выводились "Название информационного элемента";
  • сортировка ссылок была не по коду (id) информационного элемента, а по алфавиту.

Делаю вроде всё правильно.

ТДС (настройка страницы):
...
   $next = $oCore_QueryBuilder_Select->execute()->asAssoc()->current();
   $next = $next ['path'];
   $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('next_item')->value($next))
         ->addEntity(Core::factory('Core_Xml_Entity')->name('prev_item_name')->value($prev))
         ->addEntity(Core::factory('Core_Xml_Entity')->name('next_item_name')->value($next))
      );
...


XSL-шаблон:
...
<xsl:template match="/"><xsl:apply-templates select="/informationsystem/informationsystem_item" /></xsl:template>
<xsl:template match="/informationsystem/informationsystem_item">
<xsl:variable name="link_path" select="/informationsystem/url" />
<xsl:variable name="group" select="informationsystem_group_id" />
<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><xsl:value-of select="$prev_item_name" /></span></li></xsl:otherwise>
</xsl:choose>
...


У кого есть опыт?
#
Re: Ссылка на предыдущий и следующий товар в интернет-магазине
Друзья, добрый день!
Решил все проблемы с выводом:

  • окружающие элементы только из текущей инфосистемы;
  • в качестве ссылок окружающих элементов выводятся названия инфоэлементов.

Решил всё за исключением одного...
Не могу понял как сделать так, чтобы окружающие элементы сортировались по названию в алфавитном порядке.
Кто-нибудь подскажет? А?
https://www.mebelib.ru/wood-tree/ajlant-vysochajshij/
#
Re: Ссылка на предыдущий и следующий товар в интернет-магазине
Друзья, для того чтобы не показывались неактивные ссылки в окружающих элементах в настройках ТДС после
->from('informationsystem_items')

надо добавить
->where('active', '=', 1)
#
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.id', 'informationsystem_items.sorting', 'informationsystem_items.name')
      ->from('informationsystem_items')
      ->where('active', '=', 1)
      ->open()
      ->where('informationsystem_items.id', '<', $cur_elem)
      ->setAnd()
      ->where('informationsystem_items.informationsystem_id', '=', $cur_group)
      ->setAnd()
      ->where('informationsystem_items.deleted', '=', '0')
      ->close()
    ->clearOrderBy()
      ->orderBy('informationsystem_items.name', '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.id', 'informationsystem_items.sorting', 'informationsystem_items.name')
      ->from('informationsystem_items')
      ->where('active', '=', 1)
      ->open()
      ->where('informationsystem_items.id', '>', $cur_elem)
      ->setAnd()
      ->where('informationsystem_items.informationsystem_id', '=', $cur_group)
      ->setAnd()
      ->where('informationsystem_items.deleted', '=', '0')
      ->close()
    ->clearOrderBy()
      ->orderBy('informationsystem_items.name')
      ->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))
      );
}
/* Окружающие элементы - КОНЕЦ */
#
Re: Ссылка на предыдущий и следующий товар в интернет-магазине
->orderBy('informationsystem_items.name', 'ASC')
Email: golden-puma@yandex.ru; Skype: golden_puma; Telegram: @GoldenPuma; Сайт: https://goldenpuma.ru
#
Re: Ссылка на предыдущий и следующий товар в интернет-магазине
Puma, может я что-то не правильно делаю?
Но снова нее работает как надо. Можно проверить - https://www.mebelib.ru/wood-tree/akaciya-belaya/
Вот такое окружение должно быть  ▪ Айлант высочайшийАкация белаяАкация чёрная ▪  - это по алфавиту.

/* Окружающие элементы - НАЧАЛО */
// Если мы находимся на странице инфоэлемента
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.id', 'informationsystem_items.sorting', 'informationsystem_items.name')
      ->from('informationsystem_items')
      ->where('active', '=', 1)
      ->open()
      ->where('informationsystem_items.id', '<', $cur_elem)
      ->setAnd()
      ->where('informationsystem_items.informationsystem_id', '=', $cur_group)
      ->setAnd()
      ->where('informationsystem_items.deleted', '=', '0')
      ->close()
      ->clearOrderBy()
      ->orderBy('informationsystem_items.name', 'ASC')
      ->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.id', 'informationsystem_items.sorting', 'informationsystem_items.name')
      ->from('informationsystem_items')
      ->where('active', '=', 1)
      ->open()
      ->where('informationsystem_items.id', '>', $cur_elem)
      ->setAnd()
      ->where('informationsystem_items.informationsystem_id', '=', $cur_group)
      ->setAnd()
      ->where('informationsystem_items.deleted', '=', '0')
      ->close()
      ->clearOrderBy()
      ->orderBy('informationsystem_items.name')
      ->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))
      );
}
/* Окружающие элементы - КОНЕЦ */
Авторизация