Информация о наличие ярлыка на информационный элемент в какой-то группе

#
Информация о наличие ярлыка на информационный элемент в какой-то группе
Как при выводе информационных элементов передать каждому элементу тег с названием группы, где есть ярлык на этот элемент.
Например:
Группа 1:
   Элемент 1 (этому элементу добавить тег с указанием названия группы, где присутствует ссылка, то есть <anchor_group_name>Группа 2</anchor_group_name>)
   Элемент 2 (и т.д. аналогично если где-то будет ссылка)
   Элемент 3
Группа 2:
   Ярлык на Элемент 1

Флаг наличия ярлыка на элемент задан в поле shortcut_id   в таблице informationsystem_items. Получается нужно выцепить группу, где есть элемент id ярлыка и передать название. Помогите советом.
#
Re: Информация о наличие ярлыка на информационный элемент в какой-то группе
Помогите пожалуйста советом, никак не могу добавить данную информацию к элементу
Модератор
#
Re: Информация о наличие ярлыка на информационный элемент в какой-то группе
Добавляете обработчик события на getXML информационного элемента.
http://www.hostcms.ru/documentation/modules/core/events/

Внутри обработчика выбираете ярлыки текущего инф. элемента, проходитесь по ним в цикле и добавляете нужные названия групп элементу.
Как добавлять см. http://www.hostcms.ru/documentation/modules/core/controllers/
->addEntity(
   Core::factory('Core_Xml_Entity')->name('mytag')->value(123)
)
#
Re: Информация о наличие ярлыка на информационный элемент в какой-то группе
HostCMS,
спасибо. Буду пробовать.
#
Re: Информация о наличие ярлыка на информационный элемент в какой-то группе
Добрый день. У меня получился observer.php следующего вида:
<?php

class Informationsystem_Item_Observer
{
    static public function onBeforeGetXml($object, $args)
    {
        $oCore_QueryBuilder_Select = Core_QueryBuilder::select()
            ->select('informationsystem_groups.name', 'informationsystem_groups.path')
            ->from('informationsystem_items')
            ->leftJoin('informationsystem_groups', 'informationsystem_items.informationsystem_group_id', '=', 'informationsystem_groups.id')
            ->open()
            ->where('informationsystem_items.shortcut_id', '=', $object->id)
            ->setAnd()
            ->where('informationsystem_items.deleted', '=', '0')
            ->close()
            ->limit(1);

        $shortcut = $oCore_QueryBuilder_Select->execute()->asAssoc()->current();

        if (!empty($shortcut['name'])) {
            // Добавить новый тег
            $object->addXmlTag('theme', $shortcut['name']);
            $object->addXmlTag('theme_path', $shortcut['path']);
        }
    }
}


Возникло два вопроса:
1) Как получить full_path до группы, а не только путь самой группы?
2) Есть ли что оптимизировать или это оптимально?
#
Re: Информация о наличие ярлыка на информационный элемент в какой-то группе
Вы не учли то, что ярлыков м.б. несколько (в разных группах), к тому же можно написать проще, используя ORM:

<?php

class Informationsystem_Item_Observer
{
    static public function onBeforeGetXml($object, $args)
    {
        $oItem = Core_Entity::factory('Informationsystem_Item');
        $oItem->QueryBuilder()
            // Т.к. ярлыков м.б. несколько - в разных группах
            // то ищем все ярлыки во всех группах
            // т.к. ищем по ссылке на PK, то id ИС можем не указывать
            ->where('shortcut_id', '=', $object->id);
        $aShortcutItems = $oItem->findAll();

        // Получаем ID всех групп, содержащих ярлыки
        $aShortcutItemsGroups = array_unique(array_map(function($v){ return $v->shop_group_id }, $aShortcutItems));

        $oGroup = Core_Entity::factory('Informationsystem_Group');
        $oGroup->QueryBuilder()
            ->where('id', 'IN', $aShortcutItemsGroups);
        $aGroupsContainShortcutItems = $oGroup->findAll();

        if (!empty($aGroupsContainShortcutItems)) {
            // Добавляем дочерние группы, содержащие ярлыки на данный элемент
            // В поле url группы содержится полный путь к ней
            $object->addEntities();
        }
    }
}
ARTatom
#
Re: Информация о наличие ярлыка на информационный элемент в какой-то группе
artatom,
спасибо за разъяснения.
#
Re: Информация о наличие ярлыка на информационный элемент в какой-то группе
Не подскажите, как передать в XML родительскую группу товара, для которого создан Ярлык? Я нахожусь в группе, где находятся только Ярлыки и мне нужно знать в какой группе основной товар этих Ярлыков.

И еще, в вашем коде какая-то ошибка в этой строке ( помимо shop_group_id)
$aShortcutItemsGroups = array_unique(array_map(function($v){ return $v->shop_group_id }, $aShortcutItems));


Parse error: syntax error, unexpected '}' i
iNikSite - дизайн и фронтенд разработка
Модератор
#
Re: Информация о наличие ярлыка на информационный элемент в какой-то группе
iNik,
полагаю через хук добавлять группу от ярлыка.

iNik писал(а):
И еще, в вашем коде какая-то ошибка в этой строке ( помимо shop_group_id)

http://php.net/manual/ru/functions.anonymous.php
Авторизация