Как создать "хук" для php, для последующего использования в xsl?

#
Как создать "хук" для php, для последующего использования в xsl?
Здравствуте! Есть вывод всех категорий в магазине. Он работает из макета. Можно ли его запихать в ТДС  и как-то обернуть, чтобы можно было его вызывать в xsl?

<?php
         if (Core::moduleIsActive('shop'))
         {
            $Shop_Controller_Show = new Shop_Controller_Show(
               Core_Entity::factory('Shop', 3)
            );
            $Shop_Controller_Show
               ->xsl(
                  Core_Entity::factory('Xsl')->getByName('МагазинГруппыТоваров')
               )
               ->groupsMode('all')
               ->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_group_id')
                   ->value(intval(Core_Page::instance()->object->group))
               );
            }

            $Shop_Controller_Show->show();
         }         
   ?>


Чтобы в xsl выводился например так
<xsl:value-of disable-output-escaping="yes" select="тут тег/хук вывода"/>


P.S. диз сайта у меня не стандартный и поэтому пришлось организовать в макете, а лучше было бы в xsl

Заранее спасибо
#
Re: Как создать "хук" для php, для последующего использования в xsl?
Добавьте в ТДС показа магазина следующий код:

  $oGroups = Core_Entity::factory('Shop_Group');
  $oGroups->queryBuilder()
    ->where('shop_id', '=', $Shop_Controller_Show->getEntity()->id)
    ->where('deleted', '=', 0)
    ->where('active', '=', 1);
  $aGroups = $oGroups->findAll();
  $Shop_Controller_Show
    ->addEntity(
      Core::factory('Core_Xml_Entity')
        ->name('Groups')
        ->addEntities($aGroups)
    );

В XSL соответственно работаете со списком(!) групп из /shop/Groups
Если нужно получить именно дерево групп, то нужно использовать отдельный контроллер показа магазина:

  $oShopControllerShowTreeAllGroups = new Shop_Controller_Show(
    Core_Page::instance()->object
  );

  $oShopControllerShowTreeAllGroups
    ->addAllGroups();

  $Shop_Controller_Show
    ->addEntity(
      Core::factory('Core_Xml_Entity')
        ->name('Groups')
        ->addEntities($oShopControllerShowTreeAllGroups->getEntities())
    );
ARTatom
#
Re: Как создать "хук" для php, для последующего использования в xsl?
artatom, т.е. получается пишем свой контроллер (что угодно выводим) и делаем хук:

$Shop_Controller_Show
    ->addEntity(
      Core::factory('Core_Xml_Entity')
        ->name('Groups')
        ->addEntities($aGroups)
    );


->name('Groups' - это есть тот самый тег по которому внутри xsl выводтся то что мы написали в контроллере.
->addEntities($aGroups) - здесь мы возвращаем результат работы контроллера

И чтобы все это вывести например в каталоге товаров,я пишу так:
<xsl:value-of disable-output-escaping="yes" select="/shop/Groups"/>


Все правильно я понял?
#
Re: Как создать "хук" для php, для последующего использования в xsl?
В HostCMS хуками называется кое-что другое http://www.hostcms.ru/documentation/modules/core/events/

Мы просто в генерируемый XML, выводим доп.узел, который содержит или узлы линейного массива (см. выше вариант 1), или узлы дерева (вариант 2)

Цитата:

И чтобы все это вывести например в каталоге товаров,я пишу так:

<xsl:value-of disable-output-escaping="yes" select="/shop/Groups"/>


Нет, похоже вы не очень понимаете как работает XSL. Этим кодом вы отобразите все содержимое узла /shop/Groups как текст, а вам нужно "пройти" по всем дочерним узлам /shop/Groups чтобы из них составить список категорий (меню магазина?).
Почитайте этот http://www.hostcms.ru/documentation/step-by-step/xslt/ раздел документации
Вот здесь http://www.zvon.org/xxl/XPathTutorial/Output_rus/ вы можете узнать как работают те или иные конструкции xPath
ARTatom
Авторизация