Ошибка "Field is not presented in selected object types" — различия между версиями
Alexei (обсуждение | вклад) (Новая страница: «'''Актуально для версии 2.9''' Иногда при составлении выборок с помощью selector возникает ошибк…») |
Vitaliks (обсуждение | вклад) |
||
(не показаны 2 промежуточные версии 2 участников) | |||
Строка 1: | Строка 1: | ||
− | '''Актуально для версии | + | '''Актуально для версии 18''' |
Иногда при составлении выборок с помощью selector возникает ошибка "Field is not presented in selected object types", хотя данное поле присутствует у обьектов. Такая ошибка может возникать из-за того, что в разное время были внесены изменения в типы данных, по которым делается выборка, или были изменения в иерархии типах данных. Из-за этого, подобный код для выборки по полю "data_razmeweniya" среди всех объектов не работает: | Иногда при составлении выборок с помощью selector возникает ошибка "Field is not presented in selected object types", хотя данное поле присутствует у обьектов. Такая ошибка может возникать из-за того, что в разное время были внесены изменения в типы данных, по которым делается выборка, или были изменения в иерархии типах данных. Из-за этого, подобный код для выборки по полю "data_razmeweniya" среди всех объектов не работает: | ||
<source lang="php"> | <source lang="php"> | ||
− | $ | + | $sel = new selector('pages'); |
− | $ | + | $sel->types('hierarchy-type')->name('catalog', 'object'); |
− | $ | + | $sel->order('data_razmeweniya')->desc(); |
</source> | </source> | ||
Строка 21: | Строка 21: | ||
</source> | </source> | ||
− | Для решения проблемы | + | Для решения проблемы Вы можете воспользоваться следующим способом - необходимо сначала выбрать по type id Каталога, чтобы выбрать все, и после этого уже добавить выборку по name('catalog', 'object'), таким образом исключив из выборки подкаталоги. Итоговый код выборки будет следующий: |
+ | |||
<source lang="php"> | <source lang="php"> | ||
− | $ | + | $sel = new selector('pages'); |
− | $ | + | $sel->types('object-type')->id(125); |
− | $ | + | $sel->types('hierarchy-type')->name('catalog', 'object'); |
− | $ | + | $sel->order('data_razmeweniya')->desc(); |
</source> | </source> | ||
+ | Также приводим пример usel-выборки с явно заданным id типа данных: | ||
+ | |||
+ | <source lang="xml"> | ||
+ | <?xml version="1.0" encoding="utf-8"?> | ||
+ | <selection> | ||
+ | <target result="pages"> | ||
+ | <type id="125" /> | ||
+ | <type module="catalog" method="object" /> | ||
+ | </target> | ||
+ | <property name="best_offers" value="1" /> | ||
+ | <sort>rand()</sort> | ||
+ | <limit page="0">{limit}</limit> | ||
+ | </selection> | ||
+ | </source> | ||
[[Категория:API]][[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Написание кастомных макросов]] | [[Категория:API]][[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Написание кастомных макросов]] |
Текущая версия на 12:55, 16 августа 2018
Актуально для версии 18
Иногда при составлении выборок с помощью selector возникает ошибка "Field is not presented in selected object types", хотя данное поле присутствует у обьектов. Такая ошибка может возникать из-за того, что в разное время были внесены изменения в типы данных, по которым делается выборка, или были изменения в иерархии типах данных. Из-за этого, подобный код для выборки по полю "data_razmeweniya" среди всех объектов не работает:
$sel = new selector('pages');
$sel->types('hierarchy-type')->name('catalog', 'object');
$sel->order('data_razmeweniya')->desc();
Хотя поле "data_razmeweniya" присутствует. Примерная структура:
*Каталог
*Подкаталог_1
*Объект_1
*Подкаталог_2
*Объект_2
*Подкаталог_3
*Объект_3
Для решения проблемы Вы можете воспользоваться следующим способом - необходимо сначала выбрать по type id Каталога, чтобы выбрать все, и после этого уже добавить выборку по name('catalog', 'object'), таким образом исключив из выборки подкаталоги. Итоговый код выборки будет следующий:
$sel = new selector('pages');
$sel->types('object-type')->id(125);
$sel->types('hierarchy-type')->name('catalog', 'object');
$sel->order('data_razmeweniya')->desc();
Также приводим пример usel-выборки с явно заданным id типа данных:
<?xml version="1.0" encoding="utf-8"?>
<selection>
<target result="pages">
<type id="125" />
<type module="catalog" method="object" />
</target>
<property name="best_offers" value="1" />
<sort>rand()</sort>
<limit page="0">{limit}</limit>
</selection>