Формирование списка разделов ИМ

#
Формирование списка разделов ИМ
Здравствуйте. Модераторов прошу сильно не ругать, не хватило фантазии четко сформулировать тему.

В шаблоне получаю и вывожу список разделов интернет-магазина

$Shop_Controller_Show = new Shop_Controller_Show(Core_Entity::factory('Shop', Core_Page::instance()->object->getEntity()->id));
$Shop_Controller_Show->xsl(Core_Entity::factory('Xsl')->getByName('МенюКаталогТоваров'))->groupsMode('tree')->group(0)->limit(0);
if(is_object(Core_Page::instance()->object) && get_class(Core_Page::instance()->object) == 'Shop_Controller_Show')
{
   $Shop_Controller_Show->addEntity(Core::factory('Core_Xml_Entity')->name('current_shop_group_id')
   ->value(intval(Core_Page::instance()->object->group)))->addEntity(Core::factory('Core_Xml_Entity')->name('current_shop_item_id')
   ->value(intval(Core_Page::instance()->object->item)));
}
$Shop_Controller_Show->show();


Что надо прописать в код, чтобы в XML-документ к текущей (активной) группе добавлялся список информационных элементов данного раздела. В итоге, находясь внутри любого товара, хотелось бы видеть следующую структуру навигации по каталогу:

Раздел №1
Раздел №2 (активный)
  Товар №1
  Товар №2 (активный) - тот, где мы сейчас находимся
  Товар №3
Раздел №3

Помогите, пожалуйста, решить задачу. Заранее, большое спасибо.
#
Re: Формирование списка разделов ИМ
Делается через модуль структуры! Карта сайта тебе в помощь.
Skype:ferdinant1988 ICQ:311960596 E-mail: ferdinant@i.ua
#
Re: Формирование списка разделов ИМ
А можно чуть более подробно, не понятно, при чем тут модуль структуры. Код ТДС карты сайта я смотрел, но так ничего и не смог сотворить. Я пробовал в приведенный мной код (первое сообщение) в if добавить $Shop_Controller_Show->shopItems()->queryBuilder()->... с запросом, но в XML ничего не добавляется.
#
Re: Формирование списка разделов ИМ
Пока никто мне не хочет помочь разобраться с данной задачей, сам потихоньку копаю тему.
Поскольку мне надо в итоге добавить дочерние узлы в существующую структуру документа:

<shop id="3">
   ...
   <shop_group id="100">
      <name>Раздел №1</name>
      ...
   </shop_group>
   <shop_group id="101">
      <name>Раздел №2</name>
      ...

      <shop_items>
         <shop_item id="200">
            <name>Товар №1</name>
            <url>...</url>
         </shop_item>
         <shop_item id="201">
            <name>Товар №2</name>
            <url>...</url>
         </shop_item>
         <shop_item id="202">
            <name>Товар №3</name>
            <url>...</url>
         </shop_item>
      </shop_items>

   </shop_group>
   <shop_group id="102">
      <name>Раздел №3</name>
      ...
   </shop_group>
</shop>


почитав форум, я понял, что кодом из макета мне такую задачу скорее всего не решить.

Вопрос, где формируется данная структура документа? В Shop_Controller_Show? Если да, то чтобы решить мою задачу, мне надо создать наследника и переопределить какие-то методы? Какие?

Помогите, пожалуйста.
#
Re: Формирование списка разделов ИМ
Доброе утро. Обращаюсь к представителям HostCMS... Товарищи, не уже ли задача настолько сложная, что вы не можете мне дать ответы на вполне конкретно поставленные вопросы? Не уже ли ни у кого не было надобности в решении подобной задачи? Мне не сложно напрямую сделать выборку из БД и сформировать данное меню минуя XML/XSL, но хочется работать правильно, в рамках системы и API. Я мало знаком с CMS, т.к. программирование не мое профильное занятие. Но возникла надобность и я прошу помощи.
Надеюсь на понимание.
#
Re: Формирование списка разделов ИМ
Уже хоть что-то. Спасибо.
Модератор
#
Re: Формирование списка разделов ИМ
Trogvar писал(а):
Вопрос, где формируется данная структура документа? В Shop_Controller_Show?

да.

Trogvar писал(а):
Если да, то чтобы решить мою задачу, мне надо создать наследника и переопределить какие-то методы? Какие?

Варианта два:
1) Написать хук, который к группам будет добавлять товары. Примеры хуков в соседней теме, сложного там ничего нет.
2) Выводить все товары в корень, как они выводятся стандартно (контроллеру указать limit в 9999), на XSL внутри группы выбирать товары этой группы из общего списка в корне XML.

Trogvar писал(а):
Товарищи, не уже ли задача настолько сложная, что вы не можете мне дать ответы на вполне конкретно поставленные вопросы?

Задача несложная, однако вы путаете техническую поддержку и форум, который не является филиалом поддержки.
#
Re: Формирование списка разделов ИМ
Спасибо еще раз за помощь. Попробовал я работать с хуками... В классе  Shop_Controller_Show у метода show() нашел только событие onBeforeRedeclaredShow. Создал файл observer.php, положил его в /modules/shop/controller/


<?php
defined('HOSTCMS') || exit('HostCMS: доступ закрыт.');

class Shop_Controller_Show_Observer
{
   static public function onBeforeRedeclaredShow($object, $args)
   {
      $object->addXmlTag('myTag', '12345');
   }
}
?>


В файл bootstrap.php в конец добавил строку


Core_Event::attach('Shop_Controller_Show.onBeforeRedeclaredShow', array('Shop_Controller_Show_Observer', 'onBeforeRedeclaredShow'));


В итоге получаю ошибку call_user_func() expects parameter 1 to be a valid callback, class 'Shop_Controller_Show_Observer' not found в файле /home/.../modules/core/event.php (строка 84)

Я так понимаю система не подхватывает файл observer.php. Что я делаю не так?
Модератор
#
Re: Формирование списка разделов ИМ
Trogvar,
не тот хук и не на то. Вам нужен хук на генерацию группы, т.е. внутрь группы добавить товары. Группы у нас генерируются в Shop_Item_Model, поэтому хук в данном случае нужно навешивать на:
class Shop_Group_Observer
{
   static public function onBeforeGetXml($object, $args)
   {
      $object->addXmlTag('myTag', '12345');
   }
}

Core_Event::attach('shop_group.onBeforeGetXml', array('Shop_Group_Observer', 'onBeforeGetXml'));

и не размещайте его в отдельном файле, можете прям в ТДС добавить в месте до ->show()
и желательного после ->show() сразу выполнить, чтобы у других выводов не начало тоже выводить товары в группах
Core_Event::detach('shop_group.onBeforeGetXml', array('Shop_Group_Observer', 'onBeforeGetXml'));
#
Re: Формирование списка разделов ИМ
Если я правильно Вас понял, мне надо в шаблоне страницы магазина, в том месте, где формируется меню добавить такой код

class Shop_Group_Observer
{
   static public function onBeforeGetXml($object, $args)
   {
      $object->addXmlTag('myTag', '12345');
   }
}
Core_Event::attach('Shop_Group.onBeforeGetXml', array('Shop_Group_Observer', 'onBeforeGetXml'));


$Shop_Controller_Show = new Shop_Controller_Show(Core_Entity::factory('Shop', Core_Page::instance()->object->getEntity()->id));
$Shop_Controller_Show->xsl(Core_Entity::factory('Xsl')->getByName('МенюКаталогТоваров'))->groupsMode('tree')->group(0)->limit(0);
if(is_object(Core_Page::instance()->object) && get_class(Core_Page::instance()->object) == 'Shop_Controller_Show')
{
   $Shop_Controller_Show->addEntity(Core::factory('Core_Xml_Entity')->name('current_shop_group_id')
   ->value(intval(Core_Page::instance()->object->group)))->addEntity(Core::factory('Core_Xml_Entity')->name('current_shop_item_id')
   ->value(intval(Core_Page::instance()->object->item)));
}
$Shop_Controller_Show->show();
Core_Event::detach('Shop_Group.onBeforeGetXml', array('Shop_Group_Observer', 'onBeforeGetXml'));


Сделал, в XML тега не наблюдаю. Опять что-то не так?
Авторизация