Ссылка на предыдущий и следующий товар в интернет-магазине
Для пятой версии была реализация подобного функционала. Как добиться подобного для шестерки?
Может кому пригодится.
Добавить в ТДС перед показом:
В XML появится узел:
Сам XSL-шаблон:
Замечания, корректировки и предложения приветствуются.
Единственное, что я не понимаю - почему между узлами в XML пропуск строки?
Добавить в ТДС перед показом:
// Если мы находимся на странице товара
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')
->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'];
// 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')
->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'];
$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('next_item')->value($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')
->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'];
// 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')
->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'];
$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('next_item')->value($next))
);
}
В XML появится узел:
<neighboring_items>
<prev_item>046</prev_item>
<next_item></next_item>
</neighboring_items>
<prev_item>046</prev_item>
<next_item></next_item>
</neighboring_items>
Сам XSL-шаблон:
<div class="navigator">
<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>
<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>
Замечания, корректировки и предложения приветствуются.
Единственное, что я не понимаю - почему между узлами в XML пропуск строки?
Делаю для инфосистем но выдает ошибки.
Не подскажите что не так.
// Если мы находимся на странице товара
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')
->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'];
// 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_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'];
$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))
);
}
Не подскажите что не так.
// Если мы находимся на странице товара
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')
->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'];
// 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_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'];
$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))
);
}
Предупреждение: XSLTProcessor::transformToDoc() [<a href='xsltprocessor.transformtodoc'>xsltprocessor.transformtodoc</a>]: runtime error: file /var/www/2wind/data/www/a2com.host2wind.ru/ line 80 element choose в файле /var/www/2wind/data/www/a2com.host2wind.ru/modules/xsl/processor/xslt.php (строка 53)Предупреждение: XSLTProcessor::transformToDoc() [<a href='xsltprocessor.transformtodoc'>xsltprocessor.transformtodoc</a>]: Variable 'prev_item' has not been declared. в файле /var/www/2wind/data/www/a2com.host2wind.ru/modules/xsl/processor/xslt.php (строка 53)
Exception: Query error 1146: Table 'a2com.informationsystem_Items' doesn't exist. Query: SELECT `informationsystem_Items`.`path` FROM `informationsystem_Items` WHERE ( `informationsystem_Items`.`id` < '313' AND `informationsystem_Items`.`informationsystem_group_id` = '22' AND `informationsystem_Items`.`deleted` = '0' ) ORDER BY `id` DESC LIMIT 1
35 modules/core/exception.php
641 modules/core/database/mysql.php
60 modules/core/querybuilder/statement.php
188 hostcmsfiles/lib/lib_1/lib_1.php
271 modules/lib/model.php
100 modules/core/page.php
161 templates/template21/template.htm
86 modules/template/model.php
100 modules/core/page.php
375 modules/core/command/controller/default.php
190 modules/core/router/route.php
205 index.php
Exception: Query error 1146: Table 'a2com.informationsystem_Items' doesn't exist. Query: SELECT `informationsystem_Items`.`path` FROM `informationsystem_Items` WHERE ( `informationsystem_Items`.`id` < '313' AND `informationsystem_Items`.`informationsystem_group_id` = '22' AND `informationsystem_Items`.`deleted` = '0' ) ORDER BY `id` DESC LIMIT 1
35 modules/core/exception.php
641 modules/core/database/mysql.php
60 modules/core/querybuilder/statement.php
188 hostcmsfiles/lib/lib_1/lib_1.php
271 modules/lib/model.php
100 modules/core/page.php
161 templates/template21/template.htm
86 modules/template/model.php
100 modules/core/page.php
375 modules/core/command/controller/default.php
190 modules/core/router/route.php
205 index.php
1. У Вас не объявлены переменные prev_item, next_item.
2. Вы неверно заменили, регистр имеет значение, таблица называется informationsystem_items, а не informationsystem_Items
2. Вы неверно заменили, регистр имеет значение, таблица называется informationsystem_items, а не informationsystem_Items
1. Где нужно объявить переменные?
2. Заменил регистр и выдал одну ошибку Parse error: syntax error, unexpected '<' in /var/www/2wind/data/www/a2com.host2wind.ru/hostcmsfiles/lib/lib_1/lib_1.php on line 164
страница с ошибкой
2. Заменил регистр и выдал одну ошибку Parse error: syntax error, unexpected '<' in /var/www/2wind/data/www/a2com.host2wind.ru/hostcmsfiles/lib/lib_1/lib_1.php on line 164
страница с ошибкой
1. в XSL-шаблоне объявить, они получаются из XML.
2. Откройте строку 164 и посмотрите в чем там ошибка, я ваш код даже не вижу, как по такой ошибке можно что-либо советовать?!
2. Откройте строку 164 и посмотрите в чем там ошибка, я ваш код даже не вижу, как по такой ошибке можно что-либо советовать?!
Вот что получилось
В коде страницы ТДС
И шаблон XSL
В коде страницы ТДС
<?php
$Informationsystem_Controller_Show = Core_Page::instance()->object;
$xslName = $Informationsystem_Controller_Show->item
? Core_Array::get(Core_Page::instance()->libParams, 'informationsystemItemXsl')
: Core_Array::get(Core_Page::instance()->libParams, 'informationsystemXsl');
$Informationsystem_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('ОтображатьСсылкуНаАрхив')->value(0)
)->addEntity(
Core::factory('Core_Xml_Entity')
->name('ОтображатьСсылкиНаСледующиеСтраницы')->value(1)
)->addEntity(
Core::factory('Core_Xml_Entity')
->name('ТекущаяГруппа')->value($Informationsystem_Controller_Show->group)
)->addEntity(
Core::factory('Core_Xml_Entity')
->name('show_comments')->value(
intval(Core_Array::get(Core_Page::instance()->libParams, 'showComments', 1))
)
)->addEntity(
Core::factory('Core_Xml_Entity')
->name('show_add_comments')->value(
intval(Core_Array::get(Core_Page::instance()->libParams, 'showAddComment', 2))
)
);
$Informationsystem_Controller_Show
->tags(TRUE)
->comments(TRUE);
if ($Informationsystem_Controller_Show->item == 0)
{
$Informationsystem_Controller_Show->itemsForbiddenTags(array('text'));
}
else
{
if (Core_Array::getPost('add_comment') && Core_Array::get(Core_Page::instance()->libParams, 'showAddComment') != 0)
{
$Informationsystem_Controller_Show->cache(FALSE);
$oLastComment = Core_Entity::factory('Comment')->getLastCommentByIp(
Core_Array::get($_SERVER, 'REMOTE_ADDR')
);
$oXmlCommentTag = Core::factory('Core_Xml_Entity')
->name('document');
$siteuser_id = 0;
if (Core::moduleIsActive('siteuser'))
{
$oSiteuser = Core_Entity::factory('Siteuser')->getCurrent();
if ($oSiteuser)
{
$siteuser_id = $oSiteuser->id;
}
}
$oComment = Core_Entity::factory('Comment');
$allowable_tags = '<b><strong><i><em><br><p><u><strike><ul><ol><li>';
$oComment->parent_id = intval(Core_Array::getPost('parent_id', 0));
$oComment->active = Core_Array::get(Core_Page::instance()->libParams, 'addedCommentActive', 1) == 1 ? 1 : 0;
$oComment->author = Core_Str::stripTags(Core_Array::getPost('author'));
$oComment->email = Core_Str::stripTags(Core_Array::getPost('email'));
$oComment->phone = Core_Str::stripTags(Core_Array::getPost('phone'));
$oComment->grade = intval(Core_Array::getPost('grade', 0));
$oComment->subject = Core_Str::stripTags(Core_Array::getPost('subject'));
$oComment->text = nl2br(Core_Str::stripTags(Core_Array::getPost('text'), $allowable_tags));
$oComment->siteuser_id = $siteuser_id;
$oInformationsystem_Item = Core_Entity::factory('Informationsystem_Item', $Informationsystem_Controller_Show->item);
$oXmlCommentTag
->addEntity($oComment)
->addEntity($oInformationsystem_Item);
if (is_null($oLastComment) || time() > Core_Date::sql2timestamp($oLastComment->datetime) + ADD_COMMENT_DELAY)
{
$oInformationsystem = $Informationsystem_Controller_Show->getEntity();
if ($oInformationsystem->use_captcha == 0 || $siteuser_id > 0 || Core_Captcha::valid(Core_Array::getPost('captcha_id'), Core_Array::getPost('captcha')))
{
$oComment->save();
$oInformationsystem_Item->add($oComment);
$oXmlCommentTag->addEntity($oInformationsystem);
// Отправка письма администратору
$sText = Xsl_Processor::instance()
->xml($oXmlCommentTag->getXml())
->xsl(Core_Entity::factory('Xsl')->getByName(Core_Array::get(Core_Page::instance()->libParams, 'addCommentAdminMailXsl')))
->process();
$oCore_Mail_Driver = Core_Mail::instance()
->to(EMAIL_TO)
->from(Core_Valid::email($oComment->email)
? $oComment->email
: EMAIL_TO
)
->subject(Core::_('Informationsystem.comment_mail_subject'))
->message(trim($sText))
->contentType(Core_Array::get(Core_Page::instance()->libParams, 'commentMailNoticeType', 0) == 0
? 'text/plain'
: 'text/html'
)
->send();
}
else
{
$oXmlCommentTag->addEntity(Core::factory('Core_Xml_Entity')
->name('error_captcha')->value(1)
);
$oComment->text = Core_Str::br2nl($oComment->text);
$Informationsystem_Controller_Show->addEntity($oComment);
}
}
else
{
$oXmlCommentTag->addEntity(Core::factory('Core_Xml_Entity')
->name('error_time')->value(1)
);
$oComment->text = Core_Str::br2nl($oComment->text);
$Informationsystem_Controller_Show->addEntity($oComment);
}
// Результат добавления комментария
$xsl_result = Xsl_Processor::instance()
->xml($oXmlCommentTag->getXml())
->xsl(Core_Entity::factory('Xsl')->getByName(
Core_Array::get(Core_Page::instance()->libParams, 'addCommentNoticeXsl'))
)
->process();
$Informationsystem_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('message')->value($xsl_result)
);
}
}
// В корне выводим из всех групп
if ($Informationsystem_Controller_Show->group == 0)
{
$Informationsystem_Controller_Show->group(FALSE);
}
$Informationsystem_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName($xslName)
)
->itemsProperties(TRUE)
->show();
<?php
$Informationsystem_Controller_Show = Core_Page::instance()->object;
$xslName = $Informationsystem_Controller_Show->item
? Core_Array::get(Core_Page::instance()->libParams, 'informationsystemItemXsl')
: Core_Array::get(Core_Page::instance()->libParams, 'informationsystemXsl');
$Informationsystem_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('ОтображатьСсылкуНаАрхив')->value(0)
)->addEntity(
Core::factory('Core_Xml_Entity')
->name('ОтображатьСсылкиНаСледующиеСтраницы')->value(1)
)->addEntity(
Core::factory('Core_Xml_Entity')
->name('ТекущаяГруппа')->value($Informationsystem_Controller_Show->group)
)->addEntity(
Core::factory('Core_Xml_Entity')
->name('show_comments')->value(
intval(Core_Array::get(Core_Page::instance()->libParams, 'showComments', 1))
)
)->addEntity(
Core::factory('Core_Xml_Entity')
->name('show_add_comments')->value(
intval(Core_Array::get(Core_Page::instance()->libParams, 'showAddComment', 2))
)
);
$Informationsystem_Controller_Show
->tags(TRUE)
->comments(TRUE);
if ($Informationsystem_Controller_Show->item == 0)
{
$Informationsystem_Controller_Show->itemsForbiddenTags(array('text'));
}
else
{
if (Core_Array::getPost('add_comment') && Core_Array::get(Core_Page::instance()->libParams, 'showAddComment') != 0)
{
$Informationsystem_Controller_Show->cache(FALSE);
$oLastComment = Core_Entity::factory('Comment')->getLastCommentByIp(
Core_Array::get($_SERVER, 'REMOTE_ADDR')
);
$oXmlCommentTag = Core::factory('Core_Xml_Entity')
->name('document');
$siteuser_id = 0;
if (Core::moduleIsActive('siteuser'))
{
$oSiteuser = Core_Entity::factory('Siteuser')->getCurrent();
if ($oSiteuser)
{
$siteuser_id = $oSiteuser->id;
}
}
$oComment = Core_Entity::factory('Comment');
$allowable_tags = '<b><strong><i><em><br><p><u><strike><ul><ol><li>';
$oComment->parent_id = intval(Core_Array::getPost('parent_id', 0));
$oComment->active = Core_Array::get(Core_Page::instance()->libParams, 'addedCommentActive', 1) == 1 ? 1 : 0;
$oComment->author = Core_Str::stripTags(Core_Array::getPost('author'));
$oComment->email = Core_Str::stripTags(Core_Array::getPost('email'));
$oComment->phone = Core_Str::stripTags(Core_Array::getPost('phone'));
$oComment->grade = intval(Core_Array::getPost('grade', 0));
$oComment->subject = Core_Str::stripTags(Core_Array::getPost('subject'));
$oComment->text = nl2br(Core_Str::stripTags(Core_Array::getPost('text'), $allowable_tags));
$oComment->siteuser_id = $siteuser_id;
$oInformationsystem_Item = Core_Entity::factory('Informationsystem_Item', $Informationsystem_Controller_Show->item);
$oXmlCommentTag
->addEntity($oComment)
->addEntity($oInformationsystem_Item);
if (is_null($oLastComment) || time() > Core_Date::sql2timestamp($oLastComment->datetime) + ADD_COMMENT_DELAY)
{
$oInformationsystem = $Informationsystem_Controller_Show->getEntity();
if ($oInformationsystem->use_captcha == 0 || $siteuser_id > 0 || Core_Captcha::valid(Core_Array::getPost('captcha_id'), Core_Array::getPost('captcha')))
{
$oComment->save();
$oInformationsystem_Item->add($oComment);
$oXmlCommentTag->addEntity($oInformationsystem);
// Отправка письма администратору
$sText = Xsl_Processor::instance()
->xml($oXmlCommentTag->getXml())
->xsl(Core_Entity::factory('Xsl')->getByName(Core_Array::get(Core_Page::instance()->libParams, 'addCommentAdminMailXsl')))
->process();
$oCore_Mail_Driver = Core_Mail::instance()
->to(EMAIL_TO)
->from(Core_Valid::email($oComment->email)
? $oComment->email
: EMAIL_TO
)
->subject(Core::_('Informationsystem.comment_mail_subject'))
->message(trim($sText))
->contentType(Core_Array::get(Core_Page::instance()->libParams, 'commentMailNoticeType', 0) == 0
? 'text/plain'
: 'text/html'
)
->send();
}
else
{
$oXmlCommentTag->addEntity(Core::factory('Core_Xml_Entity')
->name('error_captcha')->value(1)
);
$oComment->text = Core_Str::br2nl($oComment->text);
$Informationsystem_Controller_Show->addEntity($oComment);
}
}
else
{
$oXmlCommentTag->addEntity(Core::factory('Core_Xml_Entity')
->name('error_time')->value(1)
);
$oComment->text = Core_Str::br2nl($oComment->text);
$Informationsystem_Controller_Show->addEntity($oComment);
}
// Результат добавления комментария
$xsl_result = Xsl_Processor::instance()
->xml($oXmlCommentTag->getXml())
->xsl(Core_Entity::factory('Xsl')->getByName(
Core_Array::get(Core_Page::instance()->libParams, 'addCommentNoticeXsl'))
)
->process();
$Informationsystem_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('message')->value($xsl_result)
);
}
}
// В корне выводим из всех групп
if ($Informationsystem_Controller_Show->group == 0)
{
$Informationsystem_Controller_Show->group(FALSE);
}
$Informationsystem_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName($xslName)
)
->itemsProperties(TRUE)
->show();
// Если мы находимся на странице товара
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')
->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'];
// 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_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'];
$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))
);
}
$Informationsystem_Controller_Show = Core_Page::instance()->object;
$xslName = $Informationsystem_Controller_Show->item
? Core_Array::get(Core_Page::instance()->libParams, 'informationsystemItemXsl')
: Core_Array::get(Core_Page::instance()->libParams, 'informationsystemXsl');
$Informationsystem_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('ОтображатьСсылкуНаАрхив')->value(0)
)->addEntity(
Core::factory('Core_Xml_Entity')
->name('ОтображатьСсылкиНаСледующиеСтраницы')->value(1)
)->addEntity(
Core::factory('Core_Xml_Entity')
->name('ТекущаяГруппа')->value($Informationsystem_Controller_Show->group)
)->addEntity(
Core::factory('Core_Xml_Entity')
->name('show_comments')->value(
intval(Core_Array::get(Core_Page::instance()->libParams, 'showComments', 1))
)
)->addEntity(
Core::factory('Core_Xml_Entity')
->name('show_add_comments')->value(
intval(Core_Array::get(Core_Page::instance()->libParams, 'showAddComment', 2))
)
);
$Informationsystem_Controller_Show
->tags(TRUE)
->comments(TRUE);
if ($Informationsystem_Controller_Show->item == 0)
{
$Informationsystem_Controller_Show->itemsForbiddenTags(array('text'));
}
else
{
if (Core_Array::getPost('add_comment') && Core_Array::get(Core_Page::instance()->libParams, 'showAddComment') != 0)
{
$Informationsystem_Controller_Show->cache(FALSE);
$oLastComment = Core_Entity::factory('Comment')->getLastCommentByIp(
Core_Array::get($_SERVER, 'REMOTE_ADDR')
);
$oXmlCommentTag = Core::factory('Core_Xml_Entity')
->name('document');
$siteuser_id = 0;
if (Core::moduleIsActive('siteuser'))
{
$oSiteuser = Core_Entity::factory('Siteuser')->getCurrent();
if ($oSiteuser)
{
$siteuser_id = $oSiteuser->id;
}
}
$oComment = Core_Entity::factory('Comment');
$allowable_tags = '<b><strong><i><em><br><p><u><strike><ul><ol><li>';
$oComment->parent_id = intval(Core_Array::getPost('parent_id', 0));
$oComment->active = Core_Array::get(Core_Page::instance()->libParams, 'addedCommentActive', 1) == 1 ? 1 : 0;
$oComment->author = Core_Str::stripTags(Core_Array::getPost('author'));
$oComment->email = Core_Str::stripTags(Core_Array::getPost('email'));
$oComment->phone = Core_Str::stripTags(Core_Array::getPost('phone'));
$oComment->grade = intval(Core_Array::getPost('grade', 0));
$oComment->subject = Core_Str::stripTags(Core_Array::getPost('subject'));
$oComment->text = nl2br(Core_Str::stripTags(Core_Array::getPost('text'), $allowable_tags));
$oComment->siteuser_id = $siteuser_id;
$oInformationsystem_Item = Core_Entity::factory('Informationsystem_Item', $Informationsystem_Controller_Show->item);
$oXmlCommentTag
->addEntity($oComment)
->addEntity($oInformationsystem_Item);
if (is_null($oLastComment) || time() > Core_Date::sql2timestamp($oLastComment->datetime) + ADD_COMMENT_DELAY)
{
$oInformationsystem = $Informationsystem_Controller_Show->getEntity();
if ($oInformationsystem->use_captcha == 0 || $siteuser_id > 0 || Core_Captcha::valid(Core_Array::getPost('captcha_id'), Core_Array::getPost('captcha')))
{
$oComment->save();
$oInformationsystem_Item->add($oComment);
$oXmlCommentTag->addEntity($oInformationsystem);
// Отправка письма администратору
$sText = Xsl_Processor::instance()
->xml($oXmlCommentTag->getXml())
->xsl(Core_Entity::factory('Xsl')->getByName(Core_Array::get(Core_Page::instance()->libParams, 'addCommentAdminMailXsl')))
->process();
$oCore_Mail_Driver = Core_Mail::instance()
->to(EMAIL_TO)
->from(Core_Valid::email($oComment->email)
? $oComment->email
: EMAIL_TO
)
->subject(Core::_('Informationsystem.comment_mail_subject'))
->message(trim($sText))
->contentType(Core_Array::get(Core_Page::instance()->libParams, 'commentMailNoticeType', 0) == 0
? 'text/plain'
: 'text/html'
)
->send();
}
else
{
$oXmlCommentTag->addEntity(Core::factory('Core_Xml_Entity')
->name('error_captcha')->value(1)
);
$oComment->text = Core_Str::br2nl($oComment->text);
$Informationsystem_Controller_Show->addEntity($oComment);
}
}
else
{
$oXmlCommentTag->addEntity(Core::factory('Core_Xml_Entity')
->name('error_time')->value(1)
);
$oComment->text = Core_Str::br2nl($oComment->text);
$Informationsystem_Controller_Show->addEntity($oComment);
}
// Результат добавления комментария
$xsl_result = Xsl_Processor::instance()
->xml($oXmlCommentTag->getXml())
->xsl(Core_Entity::factory('Xsl')->getByName(
Core_Array::get(Core_Page::instance()->libParams, 'addCommentNoticeXsl'))
)
->process();
$Informationsystem_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('message')->value($xsl_result)
);
}
}
// В корне выводим из всех групп
if ($Informationsystem_Controller_Show->group == 0)
{
$Informationsystem_Controller_Show->group(FALSE);
}
$Informationsystem_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName($xslName)
)
->itemsProperties(TRUE)
->show();
<?php
$Informationsystem_Controller_Show = Core_Page::instance()->object;
$xslName = $Informationsystem_Controller_Show->item
? Core_Array::get(Core_Page::instance()->libParams, 'informationsystemItemXsl')
: Core_Array::get(Core_Page::instance()->libParams, 'informationsystemXsl');
$Informationsystem_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('ОтображатьСсылкуНаАрхив')->value(0)
)->addEntity(
Core::factory('Core_Xml_Entity')
->name('ОтображатьСсылкиНаСледующиеСтраницы')->value(1)
)->addEntity(
Core::factory('Core_Xml_Entity')
->name('ТекущаяГруппа')->value($Informationsystem_Controller_Show->group)
)->addEntity(
Core::factory('Core_Xml_Entity')
->name('show_comments')->value(
intval(Core_Array::get(Core_Page::instance()->libParams, 'showComments', 1))
)
)->addEntity(
Core::factory('Core_Xml_Entity')
->name('show_add_comments')->value(
intval(Core_Array::get(Core_Page::instance()->libParams, 'showAddComment', 2))
)
);
$Informationsystem_Controller_Show
->tags(TRUE)
->comments(TRUE);
if ($Informationsystem_Controller_Show->item == 0)
{
$Informationsystem_Controller_Show->itemsForbiddenTags(array('text'));
}
else
{
if (Core_Array::getPost('add_comment') && Core_Array::get(Core_Page::instance()->libParams, 'showAddComment') != 0)
{
$Informationsystem_Controller_Show->cache(FALSE);
$oLastComment = Core_Entity::factory('Comment')->getLastCommentByIp(
Core_Array::get($_SERVER, 'REMOTE_ADDR')
);
$oXmlCommentTag = Core::factory('Core_Xml_Entity')
->name('document');
$siteuser_id = 0;
if (Core::moduleIsActive('siteuser'))
{
$oSiteuser = Core_Entity::factory('Siteuser')->getCurrent();
if ($oSiteuser)
{
$siteuser_id = $oSiteuser->id;
}
}
$oComment = Core_Entity::factory('Comment');
$allowable_tags = '<b><strong><i><em><br><p><u><strike><ul><ol><li>';
$oComment->parent_id = intval(Core_Array::getPost('parent_id', 0));
$oComment->active = Core_Array::get(Core_Page::instance()->libParams, 'addedCommentActive', 1) == 1 ? 1 : 0;
$oComment->author = Core_Str::stripTags(Core_Array::getPost('author'));
$oComment->email = Core_Str::stripTags(Core_Array::getPost('email'));
$oComment->phone = Core_Str::stripTags(Core_Array::getPost('phone'));
$oComment->grade = intval(Core_Array::getPost('grade', 0));
$oComment->subject = Core_Str::stripTags(Core_Array::getPost('subject'));
$oComment->text = nl2br(Core_Str::stripTags(Core_Array::getPost('text'), $allowable_tags));
$oComment->siteuser_id = $siteuser_id;
$oInformationsystem_Item = Core_Entity::factory('Informationsystem_Item', $Informationsystem_Controller_Show->item);
$oXmlCommentTag
->addEntity($oComment)
->addEntity($oInformationsystem_Item);
if (is_null($oLastComment) || time() > Core_Date::sql2timestamp($oLastComment->datetime) + ADD_COMMENT_DELAY)
{
$oInformationsystem = $Informationsystem_Controller_Show->getEntity();
if ($oInformationsystem->use_captcha == 0 || $siteuser_id > 0 || Core_Captcha::valid(Core_Array::getPost('captcha_id'), Core_Array::getPost('captcha')))
{
$oComment->save();
$oInformationsystem_Item->add($oComment);
$oXmlCommentTag->addEntity($oInformationsystem);
// Отправка письма администратору
$sText = Xsl_Processor::instance()
->xml($oXmlCommentTag->getXml())
->xsl(Core_Entity::factory('Xsl')->getByName(Core_Array::get(Core_Page::instance()->libParams, 'addCommentAdminMailXsl')))
->process();
$oCore_Mail_Driver = Core_Mail::instance()
->to(EMAIL_TO)
->from(Core_Valid::email($oComment->email)
? $oComment->email
: EMAIL_TO
)
->subject(Core::_('Informationsystem.comment_mail_subject'))
->message(trim($sText))
->contentType(Core_Array::get(Core_Page::instance()->libParams, 'commentMailNoticeType', 0) == 0
? 'text/plain'
: 'text/html'
)
->send();
}
else
{
$oXmlCommentTag->addEntity(Core::factory('Core_Xml_Entity')
->name('error_captcha')->value(1)
);
$oComment->text = Core_Str::br2nl($oComment->text);
$Informationsystem_Controller_Show->addEntity($oComment);
}
}
else
{
$oXmlCommentTag->addEntity(Core::factory('Core_Xml_Entity')
->name('error_time')->value(1)
);
$oComment->text = Core_Str::br2nl($oComment->text);
$Informationsystem_Controller_Show->addEntity($oComment);
}
// Результат добавления комментария
$xsl_result = Xsl_Processor::instance()
->xml($oXmlCommentTag->getXml())
->xsl(Core_Entity::factory('Xsl')->getByName(
Core_Array::get(Core_Page::instance()->libParams, 'addCommentNoticeXsl'))
)
->process();
$Informationsystem_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('message')->value($xsl_result)
);
}
}
// В корне выводим из всех групп
if ($Informationsystem_Controller_Show->group == 0)
{
$Informationsystem_Controller_Show->group(FALSE);
}
$Informationsystem_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName($xslName)
)
->itemsProperties(TRUE)
->show();
// Если мы находимся на странице товара
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')
->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'];
// 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_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'];
$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
<div class="navigator">
<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>
<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>
Ошибка теперь указывает на строку 79 в XSL в блоке на тег <xsl:choose> выделил жирным
<div class="navigator">
<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>
<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>
Авторизация