Вывод всех групп и элементов ИС, доп свойств ИЭ на одной странице (ТДС)

#
Вывод всех групп и элементов ИС, доп свойств ИЭ на одной странице (ТДС)
Здравствуйте!
Есть вот такая структура информационной системы: группа ИС-элемент ИС (с доп свойствами).
Задача - вывести на одной странице группы инфосистем, элементы инфосистем с дополнительными свойствами.
Подскажите, пожалуйста, какие изменения и ГДЕ их нужно внести в ТДС и в XSL для решения данной задачи?
Нашел вариант предложенный в этой ветке http://www.hostcms.ru/forums/3/8751/, но так и не понял где именно в настройках ТДС это нужно добавлять.

Заранее благодарю за помощь!
Модератор
#
Re: Вывод всех групп и элементов ИС, доп свойств ИЭ на одной странице (ТДС)
Так чем Ваша задача отличается от обычного вывода групп и элементов списком под ними?
#
Re: Re: Вывод всех групп и элементов ИС, доп свойств ИЭ на одной странице (ТДС)
Ну по умолчанию на корневой странице раздела структуры выводятся только группы ИС. Кликаешь на группу и попадаешь на страницу с элементами этой группы.
Мне же нужно вывести все на одной странице списком:

Группа 1
Элемент группы 1 (доп свойства этого элемента)
Элемент группы 1 (доп свойства этого элемента)
Элемент группы 1 (доп свойства этого элемента)

Группа 2
Элемент группы 2 (доп свойства этого элемента)
Элемент группы 2 (доп свойства этого элемента)
Элемент группы 2 (доп свойства этого элемента)

Группа 3
Элемент группы 3 (доп свойства этого элемента)
Элемент группы 3 (доп свойства этого элемента)
Элемент группы 3 (доп свойства этого элемента)

и т.д
Модератор
#
Re: Вывод всех групп и элементов ИС, доп свойств ИЭ на одной странице (ТДС)
borisych,
вот приведенная выше ссылка и позволяет это делать.
#
Re: Вывод всех групп и элементов ИС, доп свойств ИЭ на одной странице (ТДС)
Подскажите тогда куда именно и где нужно вставить данный код. Как я понял, в настройках ТДС. А вот где именно?

class My_Informationsystem_Controller_Show extends Informationsystem_Controller_Show
{
   protected function _groupCondition()
   {
      $oInformationsystem = $this->getEntity();
  
      if ($this->group)
      {
         // если ID группы не 0, т.е. не корневая группа
         // получаем подгруппы
         $aSubGroupsID = $this->fillInformationsystemGroup($oInformationsystem->id, $this->group); // добавляем текущую группу в массив
         $aSubGroupsID[] = $this->group;

         $this->informationsystemItems()
            ->queryBuilder()
            ->where('informationsystem_items.informationsystem_group_id', 'IN', $aSubGroupsID); // получаем все товары из подгрупп
      }
      else
      {
         $this->informationsystemItems()
            ->queryBuilder()
            ->where('informationsystem_items.informationsystem_group_id', 'NOT IN', Core_QueryBuilder::select('id')->from('informationsystem_groups')->where('informationsystem_id', '=', $oInformationsystem->id)->where('active', '=', 0));
      }

      return $this;
   }

   protected $_aGroupTree = array();

   public function fillInformationsystemGroup($iInformationsystemId, $iInformationsystemGroupParentId = 0, $iLevel = 0)
   {
      $iInformationsystemId = intval($iInformationsystemId);
      $iInformationsystemGroupParentId = intval($iInformationsystemGroupParentId);
      $iLevel = intval($iLevel);

      if ($iLevel == 0)
      {
         $aTmp = Core_QueryBuilder::select('id', 'parent_id')
            ->from('informationsystem_groups')
            ->where('informationsystem_id', '=', $iInformationsystemId)
            ->where('deleted', '=', 0)
            ->execute()->asAssoc()->result();

         foreach ($aTmp as $aGroup)
         {
            $this->_aGroupTree[$aGroup['parent_id']][] = $aGroup;
         }
      }

      $aReturn = array();

      if (isset($this->_aGroupTree[$iInformationsystemGroupParentId]))
      {
         foreach ($this->_aGroupTree[$iInformationsystemGroupParentId] as $childrenGroup)
         {
            $aReturn[] = $childrenGroup['id'];
            $aReturn = array_merge($aReturn, $this->fillInformationsystemGroup($iInformationsystemId, $childrenGroup['id'], $iLevel + 1));
         }
      }

      $iLevel == 0 && $this->_aGroupTree = array();

      return $aReturn;
   }
}

$Informationsystem_Controller_Show = new My_Informationsystem_Controller_Show($oInformationsystem);
#
Re: Вывод всех групп и элементов ИС, доп свойств ИЭ на одной странице (ТДС)
Спасибо! Разобрался. Может у кого-то будет аналогичный вопрос. Автор решения пользователь ferdinant:

В настройках ТДС Информационная система вместо строки:
$Informationsystem_Controller_Show = new Informationsystem_Controller_Show($oInformationsystem);


Вставляем следующий код:
class My_Informationsystem_Controller_Show extends Informationsystem_Controller_Show
{
   protected function _groupCondition()
   {
      $oInformationsystem = $this->getEntity();
  
      if ($this->group)
      {
         // если ID группы не 0, т.е. не корневая группа
         // получаем подгруппы
         $aSubGroupsID = $this->fillInformationsystemGroup($oInformationsystem->id, $this->group); // добавляем текущую группу в массив
         $aSubGroupsID[] = $this->group;

         $this->informationsystemItems()
            ->queryBuilder()
            ->where('informationsystem_items.informationsystem_group_id', 'IN', $aSubGroupsID); // получаем все товары из подгрупп
      }
      else
      {
         $this->informationsystemItems()
            ->queryBuilder()
            ->where('informationsystem_items.informationsystem_group_id', 'NOT IN', Core_QueryBuilder::select('id')->from('informationsystem_groups')->where('informationsystem_id', '=', $oInformationsystem->id)->where('active', '=', 0));
      }

      return $this;
   }

   protected $_aGroupTree = array();

   public function fillInformationsystemGroup($iInformationsystemId, $iInformationsystemGroupParentId = 0, $iLevel = 0)
   {
      $iInformationsystemId = intval($iInformationsystemId);
      $iInformationsystemGroupParentId = intval($iInformationsystemGroupParentId);
      $iLevel = intval($iLevel);

      if ($iLevel == 0)
      {
         $aTmp = Core_QueryBuilder::select('id', 'parent_id')
            ->from('informationsystem_groups')
            ->where('informationsystem_id', '=', $iInformationsystemId)
            ->where('deleted', '=', 0)
            ->execute()->asAssoc()->result();

         foreach ($aTmp as $aGroup)
         {
            $this->_aGroupTree[$aGroup['parent_id']][] = $aGroup;
         }
      }

      $aReturn = array();

      if (isset($this->_aGroupTree[$iInformationsystemGroupParentId]))
      {
         foreach ($this->_aGroupTree[$iInformationsystemGroupParentId] as $childrenGroup)
         {
            $aReturn[] = $childrenGroup['id'];
            $aReturn = array_merge($aReturn, $this->fillInformationsystemGroup($iInformationsystemId, $childrenGroup['id'], $iLevel + 1));
         }
      }

      $iLevel == 0 && $this->_aGroupTree = array();

      return $aReturn;
   }
}

$Informationsystem_Controller_Show = new My_Informationsystem_Controller_Show($oInformationsystem);


Подскажите, пожалуйста, фрагмент XSL шаблона который даст такой результат:

Название группы 1
Элемент группы 1 (доп свойства этого элемента)
Элемент группы 1 (доп свойства этого элемента)
Элемент группы 1 (доп свойства этого элемента)

Название группы 2
Элемент группы 2 (доп свойства этого элемента)
Элемент группы 2 (доп свойства этого элемента)
Элемент группы 2 (доп свойства этого элемента)

Название группы 3
Элемент группы 3 (доп свойства этого элемента)
Элемент группы 3 (доп свойства этого элемента)
Элемент группы 3 (доп свойства этого элемента)

и т.д

Буду очень благодарен!
Авторизация