Как выбрать элементы ИС только из активных групп?

#
Как выбрать элементы ИС только из активных групп?
1. Как выбрать элементы ИС только из активных групп?
2. Как не показывать элементы ИС не зарегистрированным пользователям сайта, при вызове ИС и шаблона?
Интеграция дизайна, доработка кода системы, техническое обслуживание сайтов на HostCMS
#
Re: Как выбрать элементы ИС только из активных групп?
1. передайте в метод ShowInformationSystem:
$property = array();
// Заполняем условие
$element['type'] = 0;
$element['prefix'] = ' and (';
$element['name'] = 'information_groups_table.information_groups_activity';
$element['if'] = '=';
$element['value'] = 1;
$element['sufix'] = ')';
$property['select'][] = $element;


2. идентификатор авторизованного пользователя можно получить методом GetCurrentSiteUser класса SiteUsers. Вызовите этот метод перед показом инфосистемы(т.е. перед вызовом метода ShowInformationSystem). Если метод вернет 0 - значит пользователь не авторизован и показывать ИС ему не нужно.
#
Re: Как выбрать элементы ИС только из активных групп?
natalya писал(а):
$property = array();
// Заполняем условие
$element['type'] = 0;
$element['prefix'] = ' and (';
$element['name'] = 'information_groups_table.information_groups_activity';
$element['if'] = '=';
$element['value'] = 1;
$element['sufix'] = '';
$property['select'][] = $element;


А как добавить отбор элементов ещё и по дополнительному полю? :?:
Интеграция дизайна, доработка кода системы, техническое обслуживание сайтов на HostCMS
#
Re: Как выбрать элементы ИС только из активных групп?
3dkvadrat, еще один аналогичный блок добавьте. Только $element['type'] в нем будет равен 1, и нужно будет добавить элемент $element['property_id'] с идентификатором доп. свойства. Пример см. в описании метода ShowInformationSystem в нашем API.
#
Re: Как выбрать элементы ИС только из активных групп?
Смотрите:
У меня отбор идет по 3 параметрам. Правильно ли я это делаю?

$InformationSystem = & singleton('InformationSystem';
$external_propertys=array();
$property=array();
$element = array();
$external_propertys['ОтображатьСсылкуНаАрхив']=0;
$external_propertys['ОтображатьСсылкиНаСледующиеСтраницы']=0;

$element['type'] = 0;
$element['prefix'] = ' and (';
$element['name'] = 'information_groups_table.information_groups_activity';
$element['if'] = '=';
$element['value'] = 1;
$element['sufix'] = ' ) ';
$property['select'][] = $element;

$element['type'] = 1;
$element['property_id'] = 50;
$element['prefix'] = ' AND (';
$element['if'] = '=';
$element['value'] = 1;
$element['sufix']=' ) ';
$property['select'][] = $element;

$element['type'] = 1;
$element['property_id'] = 53;
$element['prefix'] = ' AND (';
$element['if'] = '=';
$element['value'] = 0;
$count_condition = 3;
$having_count = ' HAVING COUNT(information_propertys_items_table.information_propertys_items_id)= '.$count_condition;
$element['sufix']=' ) GROUP BY information_items_table.information_items_id '.$having_count;
$property['select'][] = $element;

$item_count =100;
$InformationSystemId = 36;
$InformationGroupId = false; // false - из всех групп, 0 - из корневой группы
$InformationSystem->ShowInformationSystem($InformationSystemId, $InformationGroupId,'svideos_СписокВидеоНаГлавной',$item_count,0,array (), $external_propertys,$property);
Интеграция дизайна, доработка кода системы, техническое обслуживание сайтов на HostCMS
Модератор
#
Re: Как выбрать элементы ИС только из активных групп?
3dkvadrat, Вы делаете немного н правильно.
1. В $count_condition указывается количество ДОПОЛНИТЕЛЬНЫХ свойств, участвующих в фильтрации, т.е. $count_condition = 2.
2. Если Вы используете фильтрацию по 2-м и более доп. свойствам, то в блоке добавление условия для 2-го и последующих ДОПОЛНИТЕЛЬНЫХ свойств необходимо задавать

$element['prefix'] = 'OR';
, а не

$element['prefix'] = ' AND (';

Таким образом, условия для Ваших доп. свойств будут выглядеть следующим образом

$element['type'] = 1;
$element['property_id'] = 50;
$element['prefix'] = ' AND (';
$element['if'] = '=';
$element['value'] = 1;
$element['sufix']='';
$property['select'][] = $element;

$element['type'] = 1;
$element['property_id'] = 53;
$element['prefix'] = ' OR';
$element['if'] = '=';
$element['value'] = 0;
$count_condition = 2;
$having_count = ' HAVING COUNT (information_propertys_items_table.information_propertys_items_id)= ' . $count_condition;
$element['sufix']=') GROUP BY information_items_table.information_items_id '.$having_count;
$property['select'][] = $element;
#
Re: Как выбрать элементы ИС только из активных групп?
OR - это условие "И"
А нужно отобрать элементы у который и 1 свойство и второе свойство.
Тогда нужно все таки использовать:
$element['prefix'] = ' AND (';
??? Или нет?
Интеграция дизайна, доработка кода системы, техническое обслуживание сайтов на HostCMS
#
Re: Как выбрать элементы ИС только из активных групп?
3dkvadrat писал(а):
Или нет?
- нет. В данном случае использовать нужно именно OR. Подставьте и проверьте. Это особенность данного SQL-запроса.
3dkvadrat писал(а):
OR — это условие «И»
- вообще с точки зрения логики "OR" - это условие "ИЛИ", а не "И".
#
Re: Как выбрать элементы ИС только из активных групп?
А для 3-х условий OR или AND нужно ставить?
Интеграция дизайна, доработка кода системы, техническое обслуживание сайтов на HostCMS
#
Re: Как выбрать элементы ИС только из активных групп?
3dkvadrat, в первом блоке ставится AND, в остальных - OR.
Авторизация