Ссылка на предыдущий и следующий товар в интернет-магазине
$cur_elem = $Informationsystem_Controller_Show ->item;
Чтобы сравнение шло именно с ИМЕНЕМ name, а не с числом (id или sorting).
Огромное спасибо!
Написал вот так:
Всё отлично работает!
Написал вот так:
// Текущий элемент и группа
$cur_elem = $oInformationsystem_Controller_Show = Core_Entity::factory('Informationsystem_Item', $Informationsystem_Controller_Show->item)->name;
$cur_group = $oInformationsystem_Item ->informationsystem_id;
$cur_elem = $oInformationsystem_Controller_Show = Core_Entity::factory('Informationsystem_Item', $Informationsystem_Controller_Show->item)->name;
$cur_group = $oInformationsystem_Item ->informationsystem_id;
Всё отлично работает!
Добрый день!
Может быть кто-нить сталкивался и есть решение.
Ссылки на пред и след товары работают, но на первом товаре не показывает ссылку на след, а на последнем товаре показывает ссылку на пред, но выдает ошибки:
ТДС
Шаблон
Может быть кто-нить сталкивался и есть решение.
Ссылки на пред и след товары работают, но на первом товаре не показывает ссылку на след, а на последнем товаре показывает ссылку на пред, но выдает ошибки:
Предупреждение: 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))
);
}
}
// добавляем окружающие элементы
// Если мы находимся на странице товара
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>
<!-- /окружающие элементы -->
<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>
<!-- /окружающие элементы -->
jfstyle,
В вашем примере, сортировка строго по ID товара. Ведь у магазина может настраиваться сортировка по:
В вашем примере, сортировка строго по ID товара. Ведь у магазина может настраиваться сортировка по:
$oShop->items_sorting_direction
$oShop->items_sorting_field
$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]
Добрый вечер! Может быть, кому то поможет. Ошибка возникает из-за версии 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))
);
}
}
// добавляем окружающие элементы
Цитата:
Уведомление 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))
);
}
}
// добавляем окружающие элементы
Авторизация