Ошибка "Field is not presented in selected object types" — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
 
(не показана 1 промежуточная версия 1 участника)
Строка 1: Строка 1:
'''Актуально для версии 2.9'''
+
'''Актуально для версии 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">
$obj_list = new selector('pages');
+
$sel = new selector('pages');
$obj_list->types('hierarchy-type')->name('catalog', 'object');
+
$sel->types('hierarchy-type')->name('catalog', 'object');
$obj_list->order('data_razmeweniya')->desc();
+
$sel->order('data_razmeweniya')->desc();
 
</source>
 
</source>
  
Строка 22: Строка 22:
  
 
Для решения проблемы Вы можете воспользоваться следующим способом - необходимо сначала выбрать по type id Каталога, чтобы выбрать все, и после этого уже добавить выборку по name('catalog', 'object'), таким образом исключив из выборки подкаталоги. Итоговый код выборки будет следующий:
 
Для решения проблемы Вы можете воспользоваться следующим способом - необходимо сначала выбрать по type id Каталога, чтобы выбрать все, и после этого уже добавить выборку по name('catalog', 'object'), таким образом исключив из выборки подкаталоги. Итоговый код выборки будет следующий:
 +
 
<source lang="php">
 
<source lang="php">
$obj_list = new selector('pages');
+
$sel = new selector('pages');
$obj_list->types('object-type')->id(125);
+
$sel->types('object-type')->id(125);
$obj_list->types('hierarchy-type')->name('catalog', 'object');
+
$sel->types('hierarchy-type')->name('catalog', 'object');
$obj_list->order('data_razmeweniya')->desc();
+
$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>