Как получить список сущностей программно?
Я написал действие пользовательских правил, чтобы получить список активных подписчиков simplenews, но я не могу обработать его с помощью цикла "цикл". Действие должно получить список активных подписчиков simplenews (массив "entity_fetched"). Затем я передаю его в "цикл" для обработки (и для получения переменной "элемент списка"), и ошибок нет. Но когда я пытаюсь установить сообщение о состоянии (добавить действие - системное сообщение) с помощью "элемент списка: uid", система говорит: "Элемент списка выбора данных: uid для сообщения параметра недействительный". Более того, я вообще не могу выбрать маркер "элемент списка". Я думаю, что есть некоторые ошибки, когда код возвращает массив "entity_fetched". Вот мой код:
<?php
function custom_simplenews_rules_rules_action_info() {
$actions = array(
'custom_simplenews_rules_actions_get_subscribers' => array(
'label' => t('Get subscribers by Simplenews Newsletters category'),
'group' => t('Custom'),
'parameter' => array(
'category' => array(
'type' => 'text',
'label' => t('Category'),
'options list' => 'custom_simplenews_rules_options_list',
'description' => t('Specify category to select users from'),
),
),
'provides' => array(
'entity_fetched' => array('type' => 'list', 'label' => t('Fetched entity')),
),
),
);
return $actions;
}
function custom_simplenews_rules_options_list() {
$taxonomy_vids_objects = db_query("SELECT vid FROM {taxonomy_vocabulary} WHERE module = :module", array(':module' => 'simplenews'))->fetchAll();
$taxonomy_vids_array = array();
foreach ($taxonomy_vids_objects as $value) {
$taxonomy_vids_array[$value->vid] = $value->vid;
}
$taxonomy_vids = implode(',', $taxonomy_vids_array);
$taxonomy_tids = db_query("SELECT tid, name FROM {taxonomy_term_data} WHERE vid IN (:vids)", array(':vids' => $taxonomy_vids))->fetchAll();
$categories = array();
foreach ($taxonomy_tids as $value) {
$categories[$value->tid] = $value->name;
}
return $categories;
}
function custom_simplenews_rules_actions_get_subscribers(&$category) {
$categories_array = array();
foreach ($category as $key => $value) {
$categories_array[$key] = $key;
}
$categories = implode(',', $categories_array);
$subscribers_snids = db_query("SELECT snid FROM {simplenews_subscription} WHERE vid IN (:vid)", array(':vid' => array_keys($categories)))->fetchAll();
$subscribers_uids = array();
foreach ($subscribers_snids as $value) {
$subscribers_uids[$value->snid] = db_query("SELECT uid FROM {simplenews_subscriber} WHERE snid = :snid AND activated = 1", array(':snid' => $value->snid))->fetchAll();
}
$users_list = entity_load('user', $subscribers_uids);
return array('entity_fetched' => array_values($users_list));
}
Не могу определить, что я сделал не так. Пожалуйста, помогите!
1 answers
С самого начала я пошел неверным путем. Проблема решается с помощью модуля vievs_rules. Я сделал обзор подписчиков simplenews с отношениями с подписчиком: электронная почта и подписка: категория, затем добавил фильтры по сроку (категория подписки), по пользователю (активному или нет) и статусу подписки. Я использовал сущность пользователя в качестве результирующей переменной. Затем я просто импортировал представление в цикл представлений (пользовательский интерфейс правил) и вуаля!
Большое спасибо @Pierre.Vriens за то, что указал мне на просмотры_рулей