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

#
Re: Ссылка на предыдущий и следующий товар в интернет-магазине
$cur_elem = $Informationsystem_Controller_Show ->item;

Чтобы сравнение шло именно с ИМЕНЕМ name, а не с числом (id или sorting).
#
Re: Ссылка на предыдущий и следующий товар в интернет-магазине
Огромное спасибо!
Написал вот так:
// Текущий элемент и группа
   $cur_elem = $oInformationsystem_Controller_Show = Core_Entity::factory('Informationsystem_Item', $Informationsystem_Controller_Show->item)->name;
   $cur_group = $oInformationsystem_Item ->informationsystem_id;

Всё отлично работает!
#
Re: Ссылка на предыдущий и следующий товар в интернет-магазине
Добрый день!

Может быть кто-нить сталкивался и есть решение.

Ссылки на пред и след товары работают, но на первом товаре не показывает ссылку на след, а на последнем товаре показывает ссылку на пред, но выдает ошибки:

Предупреждение: Trying to access array offset on value of type bool в файле /home/l/lullabycoon/melisun/public_html/hostcmsfiles/lib/lib_71/lib_config_71.php (строка 327)Предупреждение: Trying to access array offset on value of type bool в файле /home/l/lullabycoon/melisun/public_html/hostcmsfiles/lib/lib_71/lib_config_71.php (строка 329)Предупреждение: Trying to access array offset on value of type bool в файле /home/l/lullabycoon/melisun/public_html/hostcmsfiles/lib/lib_71/lib_config_71.php (строка 331)Предупреждение: Trying to access array offset on value of type bool в файле /home/l/lullabycoon/melisun/public_html/hostcmsfiles/lib/lib_71/lib_config_71.php (строка 333)


ТДС
// добавляем окружающие элементы
// Если мы находимся на странице товара
if ($Shop_Controller_Show->item) {
   $oShop_Item = Core_Entity::factory('Shop_Item', $Shop_Controller_Show->item);

   // Текущий элемент
   $cur_elem = $Shop_Controller_Show->item;
   // Текущая группа
   $cur_group = $oShop_Item->shop_group_id;
   // SELECT * FROM shop_items WHERE shop_items.id < $cur_elem ORDER BY shop_items.id DESC LIMIT 1
   $oCore_QueryBuilder_Select = Core_QueryBuilder::select()
      ->select('shop_items.path','shop_items.name','shop_items.id','shop_items.image_large')
      ->from('shop_items')
      ->open()
      ->where('shop_items.id', '<', $cur_elem)
      ->setAnd()
      ->where('shop_items.shop_group_id', '=', $cur_group)
      ->setAnd()
      ->where('shop_items.deleted', '=', '0')
      ->close()
      ->clearOrderBy()
      ->orderBy('id', 'DESC')
      ->limit(1);
      $prev = $oCore_QueryBuilder_Select->execute()->asAssoc()->current();
      if (is_array($prev))
      {
          $prev = $prev['path'];
          $prev_name = $oCore_QueryBuilder_Select->execute()->asAssoc()->current();
          $prev_name = $prev_name['name'];
          $prev_image = $oCore_QueryBuilder_Select->execute()->asAssoc()->current();
          $prev_image = $prev_image['image_large'];
          $prev_dir = $oCore_QueryBuilder_Select->execute()->asAssoc()->current();
          $prev_id = $prev_dir['id'];
          $dir_prev = Core_Entity::factory('Shop_Item', $prev_id)->getItemHref();
       // SELECT * FROM shop_items WHERE shop_items.id > $cur_elem ORDER BY shop_items.id LIMIT 1
       $oCore_QueryBuilder_Select = Core_QueryBuilder::select()
          ->select('shop_items.path','shop_items.name','shop_items.id','shop_items.image_large')
          ->from('shop_items')
          ->open()
          ->where('shop_items.id', '>', $cur_elem)
          ->setAnd()
          ->where('shop_items.shop_group_id', '=', $cur_group)
          ->setAnd()
          ->where('shop_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'];
          $next_image = $oCore_QueryBuilder_Select->execute()->asAssoc()->current();
          $next_image = $next_image['image_large'];
          $next_dir = $oCore_QueryBuilder_Select->execute()->asAssoc()->current();
          $next_id = $next_dir['id'];
          $dir_next = Core_Entity::factory('Shop_Item', $next_id)->getItemHref();
       $Shop_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('prev_item_image')->value($prev_image))
             ->addEntity(Core::factory('Core_Xml_Entity')->name('prev_item_idprev')->value($dir_prev))
             ->addEntity(Core::factory('Core_Xml_Entity')->name('next_item')->value($next))
             ->addEntity(Core::factory('Core_Xml_Entity')->name('next_item_name')->value($next_name))
             ->addEntity(Core::factory('Core_Xml_Entity')->name('next_item_image')->value($next_image))
             ->addEntity(Core::factory('Core_Xml_Entity')->name('next_item_idnext')->value($dir_next))
          );
    }
}
// добавляем окружающие элементы


Шаблон
<!-- окружающие элементы -->

         <xsl:variable name="path">
            <xsl:choose>
               <xsl:when test="/shop//shop_group[@id=$group]/node()"><xsl:value-of select="/shop//shop_group[@id=$group]/url"/></xsl:when>
               <xsl:otherwise><xsl:value-of select="/shop/url"/></xsl:otherwise>
            </xsl:choose>
         </xsl:variable>
         <xsl:variable name="link_path" select="/shop//shop_group[@id=$group]/url"/>
         <xsl:variable name="prev_item" select="/shop/neighboring_items/prev_item"/>
         <xsl:variable name="next_item" select="/shop/neighboring_items/next_item"/>
         <xsl:variable name="prev_item_name" select="/shop/neighboring_items/prev_item_name"/>
         <xsl:variable name="next_item_name" select="/shop/neighboring_items/next_item_name"/>
         <xsl:variable name="prev_item_image" select="/shop/neighboring_items/prev_item_image"/>
         <xsl:variable name="prev_item_idprev" select="/shop/neighboring_items/prev_item_idprev"/>
         <xsl:variable name="next_item_idnext" select="/shop/neighboring_items/next_item_idnext"/>
         <xsl:variable name="next_item_image" select="/shop/neighboring_items/next_item_image"/>
         <section class="item_pagination">
            <div class="container border-top">
               <xsl:choose>
                  <xsl:when test="$prev_item != ''">

                     <div class="left_prev" onclick="location.href='{$link_path}{$prev_item}/'">
                        <div class="hover-image-1" >
                           <div class="img" style="background-image: url({$prev_item_idprev}{$prev_item_image});"></div>
                           <i>
                              <img src="/theme/img/Arrow1.svg" alt="" />
                           </i>
                        </div>
                        <div>
                           <span class="label">prev</span>
                           <div class="title"><xsl:value-of select="$prev_item_name" /></div>
                        </div>
                     </div>

                  </xsl:when>
                  <xsl:otherwise>

                  </xsl:otherwise>
               </xsl:choose>
               <xsl:choose>
                  <xsl:when test="$next_item != ''">
                     <div class="right_next" onclick="location.href='{$link_path}{$next_item}/'">

                        <div>
                           <span class="label">next</span>
                           <div class="title"><xsl:value-of select="$next_item_name" /></div>
                        </div>
                        <div class="hover-image-1">
                           <div class="img" style="background-image: url({$next_item_idnext}{$next_item_image});"></div>
                           <i>
                              <img src="/theme/img/Arrow.svg" alt="" />
                           </i>
                        </div>
                     </div>

                  </xsl:when>
                  <xsl:otherwise>

                  </xsl:otherwise>
               </xsl:choose>
            </div>
         </section>
         <!-- /окружающие элементы -->
#
Re: Ссылка на предыдущий и следующий товар в интернет-магазине
jfstyle,
В вашем примере, сортировка строго по ID товара. Ведь у магазина может настраиваться сортировка по:
$oShop->items_sorting_direction
$oShop->items_sorting_field
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
#
Re: Ссылка на предыдущий и следующий товар в интернет-магазине
Добрый вечер! Может быть, кому то поможет. Ошибка возникает из-за версии php:

Цитата:

Уведомление Trying to access array offset on value of type null/bool/int
Часто возникает при использовании синтаксиса обращения к элементу массива на других типах данных. Пример:

$a = false;
var_dump($a['somekey']);
// PHP 7.3:
// NULL
//
// PHP 7.4:
// Notice: Trying to access array offset on value of type bool in Command line code on line ...
Так бывает, например, если функция может возвращать массив в нормальном случае и false/null в случае ошибки, а дальше вверх по стеку информация о false/null теряется и этот случай не обрабатывается отдельно.

Решение - проверять с помощью is_array, является ли объект массивом.


Поэтому сделала так. Работает, ошибки нет, следующий у первого товара появился. За кошерность ничего не могу сказать.


// добавляем окружающие элементы
// Если мы находимся на странице товара
if ($Shop_Controller_Show->item) {
   $oShop_Item = Core_Entity::factory('Shop_Item', $Shop_Controller_Show->item);

   // Текущий элемент
   $cur_elem = $Shop_Controller_Show->item;
   // Текущая группа
   $cur_group = $oShop_Item->shop_group_id;
  
   // SELECT * FROM shop_items WHERE shop_items.id < $cur_elem ORDER BY shop_items.id DESC LIMIT 1
   $oCore_QueryBuilder_Select = Core_QueryBuilder::select()
      ->select('shop_items.path','shop_items.name','shop_items.id','shop_items.image_large')
      ->from('shop_items')
      ->open()
      ->where('shop_items.id', '<', $cur_elem)
      ->setAnd()
      ->where('shop_items.shop_group_id', '=', $cur_group)
      ->setAnd()
      ->where('shop_items.deleted', '=', '0')
      ->close()
      ->clearOrderBy()
      ->orderBy('id', 'DESC')
      ->limit(1);

      $prev = $oCore_QueryBuilder_Select->execute()->asAssoc()->current();
if (is_array($prev))
      {

          $prev = $prev['path'];
          $prev_name = $oCore_QueryBuilder_Select->execute()->asAssoc()->current();
          $prev_name = $prev_name['name'];
          $prev_image = $oCore_QueryBuilder_Select->execute()->asAssoc()->current();
          $prev_image = $prev_image['image_large'];
          $prev_dir = $oCore_QueryBuilder_Select->execute()->asAssoc()->current();
          $prev_id = $prev_dir['id'];
          $dir_prev = Core_Entity::factory('Shop_Item', $prev_id)->getItemHref();
          
                 $Shop_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('prev_item_image')->value($prev_image))
             ->addEntity(Core::factory('Core_Xml_Entity')->name('prev_item_idprev')->value($dir_prev))
          );
     }
       // SELECT * FROM shop_items WHERE shop_items.id > $cur_elem ORDER BY shop_items.id LIMIT 1
       $oCore_QueryBuilder_Select = Core_QueryBuilder::select()
          ->select('shop_items.path','shop_items.name','shop_items.id','shop_items.image_large')
          ->from('shop_items')
          ->open()
          ->where('shop_items.id', '>', $cur_elem)
          ->setAnd()
          ->where('shop_items.shop_group_id', '=', $cur_group)
          ->setAnd()
          ->where('shop_items.deleted', '=', '0')
          ->close()
          ->clearOrderBy()
          ->orderBy('shop_items.id')
          ->limit(1);
          $next = $oCore_QueryBuilder_Select->execute()->asAssoc()->current();
if (is_array($next))
      {

          $next = $next ['path'];
          $next_name = $oCore_QueryBuilder_Select->execute()->asAssoc()->current();
          $next_name = $next_name['name'];
          $next_image = $oCore_QueryBuilder_Select->execute()->asAssoc()->current();
          $next_image = $next_image['image_large'];
          $next_dir = $oCore_QueryBuilder_Select->execute()->asAssoc()->current();
          $next_id = $next_dir['id'];
          $dir_next = Core_Entity::factory('Shop_Item', $next_id)->getItemHref();
      
       $Shop_Controller_Show
          ->addEntity(Core::factory('Core_Xml_Entity')
          ->name('neighboring_items')

             ->addEntity(Core::factory('Core_Xml_Entity')->name('next_item')->value($next))
             ->addEntity(Core::factory('Core_Xml_Entity')->name('next_item_name')->value($next_name))
             ->addEntity(Core::factory('Core_Xml_Entity')->name('next_item_image')->value($next_image))
             ->addEntity(Core::factory('Core_Xml_Entity')->name('next_item_idnext')->value($dir_next))
          );
     }
      
}
// добавляем окружающие элементы
Авторизация