Ссылка на предыдущий и следующий товар в интернет-магазине
Добрый день)) поделитесь пожалуйста готовым решением для информационных систем

astroom-design,
благодаря поддержке разобралась как сделать ссылки на след и пред элемент, но вот у вас на примере ссылка перестает показываться, если далее нет элемента, как вы это реализовали? )) спасибо!
благодаря поддержке разобралась как сделать ссылки на след и пред элемент, но вот у вас на примере ссылка перестает показываться, если далее нет элемента, как вы это реализовали? )) спасибо!
Вставлять приведенный в топике код желательно вставить перед $Informationsystem_Controller_Show в ТДС
Если появились ошибки объявления переменной после вставки XSL кода, вставить следующее:
Тогда у меня возникла проблема с $link_path, которая выводит URL до требуемого нам элемента. Т.к кода к ней тут не было,
попытался дописать что-то сам:
<xsl:variable name="link_path" select="/informationsystem/url"/>
Так переменная будет выводить ссылку до инфосистемы, мне собственно это и нужно было, поэтому ссылку до текущей группы реализовывать не стал.
Надеюсь, кому-нить поможет. Так же спасибо поддержке HostCMS
Если появились ошибки объявления переменной после вставки XSL кода, вставить следующее:
<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="next_item" select="/informationsystem/neighboring_items/next_item"/>
Тогда у меня возникла проблема с $link_path, которая выводит URL до требуемого нам элемента. Т.к кода к ней тут не было,
попытался дописать что-то сам:
<xsl:variable name="link_path" select="/informationsystem/url"/>
Так переменная будет выводить ссылку до инфосистемы, мне собственно это и нужно было, поэтому ссылку до текущей группы реализовывать не стал.
Надеюсь, кому-нить поможет. Так же спасибо поддержке HostCMS
Немного допиленное:
в ТДС интернет-магазина перед показом вставляем:
в XSL товара под:
добавляем:
Пользуйтесь на здоровье!
в ТДС интернет-магазина перед показом вставляем:
// добавляем окружающие элементы
// Если мы находимся на странице товара
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')
->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();
$prev = $prev['path'];
$prev_name = $oCore_QueryBuilder_Select->execute()->asAssoc()->current();
$prev_name = $prev_name['name'];
// 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')
->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'];
$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('next_item')->value($next))
->addEntity(Core::factory('Core_Xml_Entity')->name('next_item_name')->value($next_name))
);
}
// добавляем окружающие элементы
// Если мы находимся на странице товара
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')
->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();
$prev = $prev['path'];
$prev_name = $oCore_QueryBuilder_Select->execute()->asAssoc()->current();
$prev_name = $prev_name['name'];
// 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')
->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'];
$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('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="/shop/group"/>
<xsl:variable name="group" select="/shop/group"/>
добавляем:
<!-- окружающие элементы -->
<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"/>
<div class="navigator">
<xsl:choose>
<xsl:when test="$prev_item != ''">
<a href="{$link_path}{$prev_item}/">< Предыдущий товар (<xsl:value-of select="$prev_item_name" />)</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}/">(<xsl:value-of select="$next_item_name" />) Следующий товар ></a>
</xsl:when>
<xsl:otherwise>
<span class="next">Следующий товар ></span>
</xsl:otherwise>
</xsl:choose>
</div>
<!-- /окружающие элементы -->
<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"/>
<div class="navigator">
<xsl:choose>
<xsl:when test="$prev_item != ''">
<a href="{$link_path}{$prev_item}/">< Предыдущий товар (<xsl:value-of select="$prev_item_name" />)</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}/">(<xsl:value-of select="$next_item_name" />) Следующий товар ></a>
</xsl:when>
<xsl:otherwise>
<span class="next">Следующий товар ></span>
</xsl:otherwise>
</xsl:choose>
</div>
<!-- /окружающие элементы -->
Пользуйтесь на здоровье!
Знания имеют свои пределы, и только глупость человеческая не знает границ...
в ТДС информационной системы перед показом добавляем:
в XSL в нужное место вставляем:
пользуйтесь на здоровье!
// добавляем окружающие элементы
// Если мы находимся на странице товара
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))
);
}
// добавляем окружающие элементы
// Если мы находимся на странице товара
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="group"/>
<!-- окружающие элементы -->
<xsl:variable name="path">
<xsl:choose>
<xsl:when test="/informationsystem//group[@id=$group]/node()"><xsl:value-of select="/informationsystem//group[@id=$group]/url"/></xsl:when>
<xsl:otherwise><xsl:value-of select="/informationsystem/url"/></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="link_path" select="/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}/">< Предыдущий элемент (<xsl:value-of select="$prev_item_name" />)</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}/">(<xsl:value-of select="$next_item_name" />) Следующий элемент ></a>
</xsl:when>
<xsl:otherwise>
<span class="next">Следующий элемент ></span>
</xsl:otherwise>
</xsl:choose>
</div>
<!-- /окружающие элементы -->
<xsl:variable name="group" select="group"/>
<!-- окружающие элементы -->
<xsl:variable name="path">
<xsl:choose>
<xsl:when test="/informationsystem//group[@id=$group]/node()"><xsl:value-of select="/informationsystem//group[@id=$group]/url"/></xsl:when>
<xsl:otherwise><xsl:value-of select="/informationsystem/url"/></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="link_path" select="/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}/">< Предыдущий элемент (<xsl:value-of select="$prev_item_name" />)</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}/">(<xsl:value-of select="$next_item_name" />) Следующий элемент ></a>
</xsl:when>
<xsl:otherwise>
<span class="next">Следующий элемент ></span>
</xsl:otherwise>
</xsl:choose>
</div>
<!-- /окружающие элементы -->
пользуйтесь на здоровье!
Знания имеют свои пределы, и только глупость человеческая не знает границ...
Для тех кому вдруг надо интегрировать с сортировкой из магазина.
На вариант для ТДМ
$oShop = $Shop_Controller_Show->getEntity();
$direction = $oShop->items_sorting_direction == 0?'ASC':'DESC';
if($oShop->items_sorting_field == 0)
$column = 'id';
elseif($oShop->items_sorting_field == 1)
$column = 'name';
elseif($oShop->items_sorting_field == 2)
$column = 'sorting';
$Shop_Controller_ShowItemNextPrev = Core_Entity::factory('Shop_item');
$Shop_Controller_ShowItemNextPrev
->queryBuilder()
->where('shop_items.id', '>', $Shop_Controller_Show->item)
->clearOrderBy()
->limit(1)
->order($column, $direction);
$ShopItemPrev = $Shop_Controller_ShowItemNextPrev->findAll();
$Shop_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('next')
->addEntity(
$ShopItemPrev[0]
)
);
$Shop_Controller_ShowItemNextPrev
->queryBuilder()
->where('shop_items.id', '<', $Shop_Controller_Show->item)
->clearOrderBy()
->limit(1)
->order($column, $direction);
$ShopItemPrev = $Shop_Controller_ShowItemNextPrev->findAll();
$Shop_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('prev')
->addEntity(
$ShopItemPrev[0]
)
);
На вариант для ТДМ
$oShop = $Shop_Controller_Show->getEntity();
$direction = $oShop->items_sorting_direction == 0?'ASC':'DESC';
if($oShop->items_sorting_field == 0)
$column = 'id';
elseif($oShop->items_sorting_field == 1)
$column = 'name';
elseif($oShop->items_sorting_field == 2)
$column = 'sorting';
$Shop_Controller_ShowItemNextPrev = Core_Entity::factory('Shop_item');
$Shop_Controller_ShowItemNextPrev
->queryBuilder()
->where('shop_items.id', '>', $Shop_Controller_Show->item)
->clearOrderBy()
->limit(1)
->order($column, $direction);
$ShopItemPrev = $Shop_Controller_ShowItemNextPrev->findAll();
$Shop_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('next')
->addEntity(
$ShopItemPrev[0]
)
);
$Shop_Controller_ShowItemNextPrev
->queryBuilder()
->where('shop_items.id', '<', $Shop_Controller_Show->item)
->clearOrderBy()
->limit(1)
->order($column, $direction);
$ShopItemPrev = $Shop_Controller_ShowItemNextPrev->findAll();
$Shop_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('prev')
->addEntity(
$ShopItemPrev[0]
)
);
ArpaWeb
Добрый вечер, не получается вывести ссылку на элемент, т.е. она так выводится <a href="{$prev_item}/"> - без {$link_path} (т.е. если по ней кликнуть, эта ссылка просто прибавляется к текущему)
добрый день)) спасибо за код)) вопрос в следующем...мне нужно добавить к выводу предыдущего и следующего изображения. Я добавила в ТДС и шаблон код...изобрадение в xsl показывается, но без пути до него. подстановка
Как указать путь до папки следующего\предыдущего товара?? спасибо
ТДС
Шаблон
{dir}
ведет до папки текущего товара. Как указать путь до папки следующего\предыдущего товара?? спасибо

ТДС
// добавляем окружающие элементы
// Если мы находимся на странице товара
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.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();
$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'];
// 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.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'];
$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('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))
);
}
// добавляем окружающие элементы
// Если мы находимся на странице товара
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.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();
$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'];
// 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.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'];
$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('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))
);
}
// добавляем окружающие элементы
Шаблон
<!-- окружающие элементы -->
<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="next_item_image" select="/shop/neighboring_items/next_item_image"/>
<div class="navigator">
<xsl:choose>
<xsl:when test="$prev_item != ''">
<a class="sit-preview" href="{$link_path}{$prev_item}/" data-preview-url="{$prev_item_image}" data-item-name="$prev_item_name" data-item-cost="14" data-item-category="WordPress / Miscellaneous" data-item-author="GDragoN" data-title="Smart Posts Index"><xsl:value-of select="$prev_item_name" /></a>
</xsl:when>
<xsl:otherwise>
<span class="previous">< Предыдущий товар</span>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="$next_item != ''">
<a class="sit-preview" href="{$link_path}{$next_item}/" data-preview-url="{$next_item_image}" data-item-name="$next_item_name" data-item-cost="14" data-item-category="WordPress / Miscellaneous" data-item-author="GDragoN" data-title="Smart Posts Index"><xsl:value-of select="$next_item_name" /></a>
</xsl:when>
<xsl:otherwise>
<span class="next">Следующий товар ></span>
</xsl:otherwise>
</xsl:choose>
</div>
<!-- /окружающие элементы -->
<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="next_item_image" select="/shop/neighboring_items/next_item_image"/>
<div class="navigator">
<xsl:choose>
<xsl:when test="$prev_item != ''">
<a class="sit-preview" href="{$link_path}{$prev_item}/" data-preview-url="{$prev_item_image}" data-item-name="$prev_item_name" data-item-cost="14" data-item-category="WordPress / Miscellaneous" data-item-author="GDragoN" data-title="Smart Posts Index"><xsl:value-of select="$prev_item_name" /></a>
</xsl:when>
<xsl:otherwise>
<span class="previous">< Предыдущий товар</span>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="$next_item != ''">
<a class="sit-preview" href="{$link_path}{$next_item}/" data-preview-url="{$next_item_image}" data-item-name="$next_item_name" data-item-cost="14" data-item-category="WordPress / Miscellaneous" data-item-author="GDragoN" data-title="Smart Posts Index"><xsl:value-of select="$next_item_name" /></a>
</xsl:when>
<xsl:otherwise>
<span class="next">Следующий товар ></span>
</xsl:otherwise>
</xsl:choose>
</div>
<!-- /окружающие элементы -->
Решение с изображением (спасибо поддержке)
для ТДС
для Шаблона
для ТДС
// добавляем окружающие элементы
// Если мы находимся на странице товара
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','shop_items.price')
->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();
$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();
$prev_price = $oCore_QueryBuilder_Select->execute()->asAssoc()->current();
$prev_price = $prev_price['price'];
// 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','shop_items.price')
->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();
$next_price = $oCore_QueryBuilder_Select->execute()->asAssoc()->current();
$next_price = $next_price['price'];
$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('prev_item_price')->value($prev_price))
->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('prev_item_idnext')->value($dir_next))
->addEntity(Core::factory('Core_Xml_Entity')->name('next_item_price')->value($next_price))
);
}
// добавляем окружающие элементы
// Если мы находимся на странице товара
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','shop_items.price')
->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();
$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();
$prev_price = $oCore_QueryBuilder_Select->execute()->asAssoc()->current();
$prev_price = $prev_price['price'];
// 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','shop_items.price')
->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();
$next_price = $oCore_QueryBuilder_Select->execute()->asAssoc()->current();
$next_price = $next_price['price'];
$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('prev_item_price')->value($prev_price))
->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('prev_item_idnext')->value($dir_next))
->addEntity(Core::factory('Core_Xml_Entity')->name('next_item_price')->value($next_price))
);
}
// добавляем окружающие элементы
для Шаблона
<!-- окружающие элементы -->
<!-- Получаем ID родительской группы и записываем в переменную $group -->
<xsl:variable name="group" select="/shop/group"/>
<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="prev_item_idnext" select="/shop/neighboring_items/prev_item_idnext"/>
<xsl:variable name="next_item_image" select="/shop/neighboring_items/next_item_image"/>
<xsl:variable name="prev_item_price" select="/shop/neighboring_items/prev_item_price"/>
<xsl:variable name="next_item_price" select="/shop/neighboring_items/next_item_price"/>
<div class="navigator">
<xsl:choose>
<xsl:when test="$prev_item != ''">
<a class="sit-preview prev" href="{$link_path}{$prev_item}/" data-preview-url="{$prev_item_idprev}{$prev_item_image}" data-item-name="{$prev_item_name}" data-item-cost="{$prev_item_price}" data-item-category="{/shop/name} / {/shop//shop_group[@id=$group]/name}" data-item-author="" data-title="{$prev_item_name}"><xsl:value-of select="$prev_item_name" /></a>
</xsl:when>
<xsl:otherwise>
<span class="previous">< Предыдущий товар</span>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="$next_item != ''">
<a class="sit-preview next" href="{$link_path}{$next_item}/" data-preview-url="{$prev_item_idnext}{$next_item_image}" data-item-name="$next_item_name" data-item-cost="{$next_item_price}" data-item-category="{/shop/name} / {/shop//shop_group[@id=$group]/name}" data-item-author="" data-title="{$next_item_name}"><xsl:value-of select="$next_item_name" /></a>
</xsl:when>
<xsl:otherwise>
<span class="next">Следующий товар ></span>
</xsl:otherwise>
</xsl:choose>
</div>
<!-- /окружающие элементы -->
<!-- Получаем ID родительской группы и записываем в переменную $group -->
<xsl:variable name="group" select="/shop/group"/>
<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="prev_item_idnext" select="/shop/neighboring_items/prev_item_idnext"/>
<xsl:variable name="next_item_image" select="/shop/neighboring_items/next_item_image"/>
<xsl:variable name="prev_item_price" select="/shop/neighboring_items/prev_item_price"/>
<xsl:variable name="next_item_price" select="/shop/neighboring_items/next_item_price"/>
<div class="navigator">
<xsl:choose>
<xsl:when test="$prev_item != ''">
<a class="sit-preview prev" href="{$link_path}{$prev_item}/" data-preview-url="{$prev_item_idprev}{$prev_item_image}" data-item-name="{$prev_item_name}" data-item-cost="{$prev_item_price}" data-item-category="{/shop/name} / {/shop//shop_group[@id=$group]/name}" data-item-author="" data-title="{$prev_item_name}"><xsl:value-of select="$prev_item_name" /></a>
</xsl:when>
<xsl:otherwise>
<span class="previous">< Предыдущий товар</span>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="$next_item != ''">
<a class="sit-preview next" href="{$link_path}{$next_item}/" data-preview-url="{$prev_item_idnext}{$next_item_image}" data-item-name="$next_item_name" data-item-cost="{$next_item_price}" data-item-category="{/shop/name} / {/shop//shop_group[@id=$group]/name}" data-item-author="" data-title="{$next_item_name}"><xsl:value-of select="$next_item_name" /></a>
</xsl:when>
<xsl:otherwise>
<span class="next">Следующий товар ></span>
</xsl:otherwise>
</xsl:choose>
</div>
<!-- /окружающие элементы -->
Цитата:
да, ссылки на инфоэлементы не верные.. к урлу элемента добавляется еще кусочек из урла другого элемента
Добрый вечер, не получается вывести ссылку на элемент, т.е. она так выводится <a href="{$prev_item}/"> - без {$link_path} (т.е. если по ней кликнуть, эта ссылка просто прибавляется к текущему)
да, ссылки на инфоэлементы не верные.. к урлу элемента добавляется еще кусочек из урла другого элемента

Авторизация