Как получить список сущностей программно?


Я написал действие пользовательских правил, чтобы получить список активных подписчиков 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));
   }

Не могу определить, что я сделал не так. Пожалуйста, помогите!

Author: Alexander Mudrov, 2017-08-17

1 answers

С самого начала я пошел неверным путем. Проблема решается с помощью модуля vievs_rules. Я сделал обзор подписчиков simplenews с отношениями с подписчиком: электронная почта и подписка: категория, затем добавил фильтры по сроку (категория подписки), по пользователю (активному или нет) и статусу подписки. Я использовал сущность пользователя в качестве результирующей переменной. Затем я просто импортировал представление в цикл представлений (пользовательский интерфейс правил) и вуаля!

Большое спасибо @Pierre.Vriens за то, что указал мне на просмотры_рулей

 1
Author: Alexander Mudrov, 2017-08-21 12:09:40