Как вывести похожие группы в элементе ис?

#
Re: Как вывести похожие группы в элементе ис?
Пример сортировки по дополнительному свойству можно посмотреть здесь https://www.hostcms.ru/documentation/modules/properties/order-by-property/
«Не выходи из комнаты, не совершай ошибку…»
#
Re: Как вывести похожие группы в элементе ис?
Помогите пожалуйста, сортировкой более менее понятно, а как получить значение доп. свойства группы в которой я сейчас нахожусь?
$oProperty = Core_Entity::factory('Property', 88);
     $aPropertyValues = $oProperty->getValues($Informationsystem_Controller_Show->group);

я пробую так, как теперь именно значение получить?
#
Re: Как вывести похожие группы в элементе ис?
Сортировка по доп свойству примерно так будет:

// Подгруппы родительской группы
      $oSubgroups = $oParent_Informationsystem_Group->Informationsystem_Groups;
      $oSubgroups->queryBuilder()
       ->leftJoin('property_value_ints', 'informationsystem_groups.id', '=', 'property_value_ints.entity_id',
       array(
          array('AND' => array('property_value_ints.property_id', '=', 88))
       )
     )
         // Исключаем текущую группу
         ->where('informationsystem_groups.id', '!=', $Informationsystem_Controller_Show->group)
    ->groupBy('informationsystem_groups.id')
         // Сортируем случайно
         ->clearOrderBy()
    ->orderBy('property_value_ints.value', 'DESC');
         // Две группы
         ->limit(2);


в зависимости от типа свойства вместо property_value_ints может быть другая таблица. Значения дополнительных свойств хранятся в 6 разных таблицах в зависимости от типа свойства: property_value_datetimes, property_value_files, property_value_floats, property_value_ints, property_value_strings, property_value_texts.

Цитата:
я пробую так, как теперь именно значение получить?


значение доп свойства будет  в $aPropertyValues[0]->value

$oProperty = Core_Entity::factory('Property', 88);
$aPropertyValues = $oProperty->getValues($Informationsystem_Controller_Show->group);
echo $aPropertyValues[0]->value;
   
«Не выходи из комнаты, не совершай ошибку…»
#
Re: Как вывести похожие группы в элементе ис?
Спасибо большое))
#
Re: Как вывести похожие группы в элементе ис?
Это пример для магазина, а не для ИС?
Модератор
#
Re: Как вывести похожие группы в элементе ис?
activ214365,
shop меняете на informationsystem
#
Re: Как вывести похожие группы в элементе ис?
if ( $Informationsystem_Controller_Show->group)
{
   // Текущая группа
   $oInformationsystem_Group = Core_Entity::factory('Informationsystem_Group', $Informationsystem_Controller_Show->group);

   // Родительская группа
   $oParent_Informationsystem_Group = $oInformationsystem_Group->getParent();
   // Родитель не корень
   if ($oParent_Informationsystem_Group)
   {
      // Подгруппы родительской группы
      $oSubgroups = $oParent_Informationsystem_Group->Informationsystem_Groups;
      $oSubgroups->queryBuilder()
            ->leftJoin('property_value_strings', 'informationsystem_group.id', '=', 'property_value_strings.entity_id',
       array(
          array('AND' => array('property_value_strings.property_id', '=', 88))
       )
     )
         // Исключаем текущую группу
         ->where('id', '!=', $Informationsystem_Controller_Show->group)
            ->groupBy('informationsystem_group.id')
         // Сортируем случайно
         ->clearOrderBy()
         ->orderBy('property_value_strings.value', 'DESC')
         // Две группы
         ->limit(4);

      $aSubgroups = $oSubgroups->findAll(FALSE);

      if (count($aSubgroups))
      {
         $oXmlSameGroups = Core::factory('Core_Xml_Entity')->name('sameGroups');
         $Informationsystem_Controller_Show->addEntity($oXmlSameGroups);

         foreach ($aSubgroups as $oSubgroup)
         {
            $oTmpGroup = clone $oSubgroup;
            $oTmpGroup
               ->clearEntities()
               ->clearEntitiesAfterGetXml(FALSE)
               ->id($oSubgroup->id)
                    ->showXmlProperties(TRUE);

            $oXmlSameGroups->addEntity($oTmpGroup);
         }
      }
   }
}

ошибка: Exception: Query error 23000: SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous. Query: SELECT * FROM `informationsystem_groups` LEFT OUTER JOIN `property_value_strings` ON `informationsystem_group`.`id` = `property_value_strings`.`entity_id` AND `property_value_strings`.`property_id` = 88 WHERE `informationsystem_groups`.`parent_id` = '521' AND `id` != '1413' AND `informationsystem_groups`.`deleted` = 0 GROUP BY `informationsystem_group`.`id` ORDER BY `property_value_strings`.`value` DESC LIMIT 4
Модератор
#
Re: Как вывести похожие группы в элементе ис?
activ214365 писал(а):
Column 'id' in where clause is ambiguous

Очевидно теперь нужно уточнить, что именно за id имеется ввиду в строке
->where('id', '!=', $Informationsystem_Controller_Show->group)

очевидно это будет
if ( $Informationsystem_Controller_Show->group)
{
   // Текущая группа
   $oInformationsystem_Group = Core_Entity::factory('Informationsystem_Group', $Informationsystem_Controller_Show->group);

   // Родительская группа
   $oParent_Informationsystem_Group = $oInformationsystem_Group->getParent();
   // Родитель не корень
   if ($oParent_Informationsystem_Group)
   {
      // Подгруппы родительской группы
      $oSubgroups = $oParent_Informationsystem_Group->Informationsystem_Groups;
      $oSubgroups->queryBuilder()
            ->select('informationsystem_groups.*')
            ->leftJoin('property_value_strings', 'informationsystem_groups.id', '=', 'property_value_strings.entity_id',
       array(
          array('AND' => array('property_value_strings.property_id', '=', 88))
       )
     )
         // Исключаем текущую группу
         ->where('informationsystem_groups.id', '!=', $Informationsystem_Controller_Show->group)
         ->groupBy('informationsystem_groups.id')
         // Сортируем случайно
         ->clearOrderBy()
         ->orderBy('property_value_strings.value', 'DESC')
         // Две группы
         ->limit(4);

      $aSubgroups = $oSubgroups->findAll(FALSE);

      if (count($aSubgroups))
      {
         $oXmlSameGroups = Core::factory('Core_Xml_Entity')->name('sameGroups');
         $Informationsystem_Controller_Show->addEntity($oXmlSameGroups);

         foreach ($aSubgroups as $oSubgroup)
         {
            $oTmpGroup = clone $oSubgroup;
            $oTmpGroup
               ->clearEntities()
               ->clearEntitiesAfterGetXml(FALSE)
               ->id($oSubgroup->id)
               ->showXmlProperties(TRUE);

            $oXmlSameGroups->addEntity($oTmpGroup);
         }
      }
   }
}
#
Re: Как вывести похожие группы в элементе ис?
Exception: SQLSTATE[HY000]: General error: could not call class constructor
Модератор
#
Re: Как вывести похожие группы в элементе ис?
activ214365,
нужно дописать
            ->select('informationsystem_groups.*')
Авторизация