EntityFieldQuery вместо Views
В Друпал 7 для получения сущностей (нод, пользователей, комментариев и т.д.) программным способом используется класс EntityFieldQuery.
$query = new EntityFieldQuery(); $query ->entityCondition('entity_type', 'node') ->entityCondition('bundle', 'photo') ->propertyCondition('uid', $account->uid) ->propertyCondition('status', 1) ->fieldCondition('field_city', 'value', 'Moscow', '=') ->fieldCondition('field_date', 'value', array('2010-01-01', '2011-02-31'), 'BETWEEN') ->fieldOrderBy('field_date', 'value', 'ASC') ->pager(30) ->execute(); if (!empty($query['node'])) { $entities = entity_load('node', array_keys($query['node'])); $views = node_view_multiple($entities, 'full'); $build['#nodes'] = $views['nodes']; $build['#theme'] = 'theming'; return $build; }
В entityCondition('entity_type', $value, $operator = NULL) указываем сущность ($value):
entityCondition(‘entity_type’, ‘node’) entityCondition(‘entity_type’, ‘taxonomy_term’) entityCondition(‘entity_type’, ‘user’) entityCondition(‘entity_type’, ‘comment’)
В entityCondition('bundle', $value, $operator = NULL) указываем тип сущности ($value). Для терминов таксономии и комментариев нельзя выбрать):
entityCondition(‘bundle’, ‘photo’) entityCondition(‘bundle’, ‘product’)
В propertyCondition($column, $value, $operator = NULL) указываем название столбца ($column) и его значение ($value). Для ноды названия столбцов можно просмотреть в таблице node. Например, название столбца uid (номер автора ноды) равно $account->uid, status равен 1 (нода опубликована):
propertyCondition('uid', $account->uid) propertyCondition('status', 1)
В fieldCondition($field, $column, $value, $operator = NULL, $delta_group = NULL, $language_group = NULL) указываем название поля ноды field_city ($field), 'value' - из таблицы field_data_field_city последнее слово в названии столбца field_data_field_city_value ($column), само значение ($value), '=', 'BETWEEN' - оператор сравнения ($operator):
fieldCondition('field_city', 'value', 'Moscow', '=') fieldCondition('field_date', 'value', array('2010-01-01', '2011-02-31'), 'BETWEEN')