Найти все объекты данного типа?


8

Я работаю над интерфейсом администратора для модуля, который использует пользовательский тип объекта. Есть ли функция или какой-либо способ, которым я могу использовать, чтобы найти все объекты данного типа, чтобы я мог показать пользователям список их?

Ответы:


8

Вы ищете EntityFieldQueryкласс :

$query = new EntityFieldQuery;

$query->entityCondition('entity_type', 'node')
  ->entityCondition('bundle', 'article')
  ->fieldCondition('field_my_field', 'value', 'a_value')
  ->propertyCondition('status', 1)
  ->fieldOrderBy('field_my_field', 'value', 'DESC');

$results = $query->execute();
if (isset($results['node'])) {
  $nodes = node_load_multiple(array_keys($results['node']));

  foreach ($nodes as $nid => $node) {
    // Do something with the node object
  }
}

Приведенный выше код загружает все сущности узлов с типом контента article. Фильтрует по настраиваемому полю field_my_fieldи statusсвойству узла. Я только добавил это для справки, вам не понадобится загружать все узлы без каких-либо фильтров. То же самое касается порядка по заявлению.

Надеюсь, это поможет.


1

Вы также можете попробовать следующий простой двухслойный:

$res = (new EntityFieldQuery)->entityCondition('entity_type', 'node')->execute(); 
$entities = entity_load('node', array_keys(reset($res)));

Или следующий однострочный (PHP> = 5.5), готовый к использованию с drush eval:

print_r((new EntityFieldQuery)->entityCondition("entity_type", "node")->entityCondition("bundle", "page")->execute());

Чтобы удалить их, пожалуйста, проверьте: Могу ли я удалить узлы данного типа контента с помощью Drush?

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.