Добавление групп и подгрупп в ИС

#
Добавление групп и подгрупп в ИС
Приходит два POST c id группой магазина и её подгруппой, в ИС создается группа и подгруппа, с таким же именем, как и в магазине, если такие группы не существует в ИС.
Загвоздка: вставляется последняя только запись, которая пришла в $_POST['model'] - подкаталог магазина.

Что должно происходить в коде на мой взгляд.
1. Проверяем $_POST['mark'] на наличие в ис
2. Если нет $_POST['mark'] в ИС, то создём группу
3. Проверяем $_POST['model'] на наличие в ис
4. Если нет $_POST['model'] в ИС, то создём группу,  с родительским ID элемента ИС от $_POST['mark']

Проблема: создается группа только от $_POST['model'] с родительским ID таким же как ID этой же записи.

Предполагаю, что когда я создал элемент от $_POST['mark'], то он тупо переписывается в базе.

ЗЫ:  прошу поправить, где не верно использовал объекты, и как можно лучше это реализовать?



if(Core_Array::getPost('mark')) {
            $parent = 0;    
            $oShop = Core_Entity::factory('Shop', 2);
            $group = $oShop->Shop_Groups->getById(Core_Array::getPost('mark'));

            $oIS = Core_Entity::factory('Informationsystem', 15);
            $aGIS = $oIS->Informationsystem_Groups->findAll();
            
            $oInformationsystem_groups = Core_Entity::factory('Informationsystem_Group', 15);
            $flag = false;

//проверяю наличие группы в ИС
            foreach($aGIS as $oGIS){
                if(strtolower( trim($group->name) ) == strtolower(  trim($oGIS->name) ) ) {
                    $flag = true;
                    $parent = $oGIS->id;
                    break;
                }
            }
//если нет в ИС группы, создаем
            if(!$flag) {
                $oInformationsystem_groups->name = $group->name;
                $oIS->add($oInformationsystem_groups);
                $parent = $oInformationsystem_groups->id;
            }
            
            if(Core_Array::getPost('model')) {
//тут убиваю все объекты
                unset($oInformationsystem_groups);
                unset($oIS);
                unset($oShop);
              
                $oShop = Core_Entity::factory('Shop', 2);
                $group = $oShop->Shop_Groups->getById(Core_Array::getPost('model'));
                
                $oIS = Core_Entity::factory('Informationsystem', 15);
                $aGIS = $oIS->Informationsystem_Groups->findAll();
                                
                $flag = false;

                foreach($aGIS as $oGIS){
                    if(strtolower( trim($group->name) ) == strtolower( trim($oGIS->name) )) {
                        $parent = $oGIS->id;
                        $flag = true;
                        break;
                    }
                }

                if(!$flag) {
//А вот тут начинается какая-то ерунда
                    $oInformationsystem_groups = Core_Entity::factory('Informationsystem_Group', 15);
                    $oInformationsystem_groups->name = $group->name;
                    $oInformationsystem_groups->parent_id = $parent;
//вот тут $parent=  $oInformationsystem_groups->id о_О, вот как то так.
                    
                    $oIS->add($oInformationsystem_groups);
                    $parent = $oInformationsystem_groups->id;
                }
            }
            //передаю родительскую группу в создаваемый элемент
            $oInformationsystem_Item->informationsystem_group_id = $parent;
        }
d-sant.com
Модератор
#
Re: Добавление групп и подгрупп в ИС
t0xas, очень много замечаний по коду. Зачем Вы выбираете все группы, а потом перебираете и сравниваете имена? Используйте QueryBuilder + ORM и получайте только нужную группу!

//А вот тут начинается какая-то ерунда
                    $oInformationsystem_groups = Core_Entity::factory('Informationsystem_Group', 15);
И зачем Вы создаете объект 15-й группы и потом у него перезаписываете атрибуты?
#
Re: Добавление групп и подгрупп в ИС
Хых, а я думал это ID ИС указал. Спасибо, кажись разобрался.


        if(Core_Array::getPost('mark')) {
            $parent = 0;    
            $oShop = Core_Entity::factory('Shop', 2);
            $group = $oShop->Shop_Groups->getById(Core_Array::getPost('mark'));
            
            $oIS = Core_Entity::factory('Informationsystem', 15);
            $oInformationsystem_groups = Core_Entity::factory('Informationsystem_Group');
            $gis = $oInformationsystem_groups->getByName(trim($group->name));
            
            if ( empty($gis) ) {
                $oInformationsystem_groups->name = $group->name;
                $oIS->add($oInformationsystem_groups);
                $parent = $oInformationsystem_groups->id;
            }
            else {
                $parent = $gis->id();
            }

            if(Core_Array::getPost('model')) {
              
                $group = $oShop->Shop_Groups->getById(Core_Array::getPost('model'));
                
                $oInformationsystem_groups = Core_Entity::factory('Informationsystem_Group');
                $gis = $oInformationsystem_groups->getByName(trim($group->name));
            
                if ( empty($gis) ) {
                    $oInformationsystem_groups->name = $group->name;
                    $oInformationsystem_groups->parent_id = $parent;
                    $oIS->add($oInformationsystem_groups);
                    $parent = $oInformationsystem_groups->id;
                }
                else {
                    $parent = $gis->id();
                }
                
            }

            $oInformationsystem_Item->informationsystem_group_id = $parent;
        }

d-sant.com
#
Re: Добавление групп и подгрупп в ИС
Вопрос.
В ИС есть группа, в ней подгруппы.
Как мне выбрать все элементы из подгрупп этой группы?

Я пытался сделать так.



  
  $IS_Controller_Show = new Informationsystem_Controller_Show(
                Core_Entity::factory('Informationsystem', 15)
            );
   $IS_Controller_Show
   ->xsl(
      Core_Entity::factory('Xsl')->getByName('СписокСтатей')
   )
   ->groupsMode('none')
   ->itemsProperties(FALSE)
   ->limit(5);
  
   $arr=array();
   foreach($aGis2 as $oGis) {
        $arr[]= $oGis->id;
   }
  
   $IS_Controller_Show
        ->informationsystemItems()
        ->queryBuilder()
        ->where('informationsystem_items.informationsystem_group_id', 'IN', $arr);

   $IS_Controller_Show->show();
d-sant.com
Модератор
#
Re: Добавление групп и подгрупп в ИС
http://www.hostcms.ru/forums/2/7122/page-8/ 5-е сообщение сверху.
Авторизация