Отправка сообщения после сохранения материала всем пользователям, у которых заполненное поле равно полю в материале

Главные вкладки

Аватар пользователя engenes engenes 11 июня 2017 в 21:03

Создал материал рассылка, есть 3 поля

* тема(заголовок)
* тест(body)
* и список муниципальных образований (можно выбрать несколько)(ссылка на термин таксономии)

1. Первый район
2. Второй район
3. ...
4. 30-район

При регистрации пользователь так же может выбыть одно из МО.

После сохранения материала, его текст должен отправиться всем пользователям у которых МО совпадает с МО материала
Обычным правилом пока сделал что сообщение приходит на почту всем пользователям

я так понял нужно добавить условие но как его оформить не знаю
вот так я сейчас выкачал список всех МО из сохраненного материала

<?php
 $arr_mo
=$node->field_mo_org['und'];
    
$result count($arr_mo);
    for (
$i=0$i<$result$i++) {
        
$mo=$node->field_mo_org['und'][$x]['taxonomy_term']->name;
        
drupal_set_message('<pre>'.print_r($mo,true).'</pre>');
    
//Второй район
    //25-район
    
}
?>

А дальше все.. тупик как оформить условие нужен ли здесь вообще перебор не понимаю
в условии ведь можно вернуть только true либо false, допустим я выкачаю массив из пользователей у которых МО равен тем, что в результате выше, но опять же я получу массив, а как заставить работать условие не знаю.

Комментарии

Аватар пользователя gun_dose gun_dose 11 июня 2017 в 21:13

1. Выбрать список юзеров по условию.
2. Обойти циклом всех выбранных юзеров (в цикле будет выполняться отправка сообщения).

Аватар пользователя juto juto 11 июня 2017 в 21:50

engenes wrote:

drupal_set_message('<pre>'.print_r($mo,true).'</pre>');

Поставьте devel.

engenes wrote:

допустим я выкачаю массив из пользователей у которых МО равен тем, что в результате выше, но опять же я получу массив, а как заставить работать условие не знаю.

foreach, не?

P.S. И зачем вам count, непонятно.

Аватар пользователя engenes engenes 11 июня 2017 в 21:58

как отправить письма всем пользователям перебрав полученный массив?
допустим я их переберу а как в цикле запустить отправку я не понял, не писать же мне в цикле целый скрипт отправки письма на php
у меня стоит devel мне нужно было задать переменную по которой я буду извлекать пользователей drupal_set_message я написал только чтобы проверить что в переменную действительно попало значение
count задает ограничитель для перебора for, который в свою очередь нужен был чтобы в переменную попадали разные значения, дальше по-хорошему в зависимости от значения переменной мне нужно выкачивать пользователей у которых поле МО равно текущему значению $mo, снова получу массив, и как мне разослать письма все пользователям массива не понимаю

Аватар пользователя engenes engenes 11 июня 2017 в 22:07

juto wrote:

foreach, не?

с foreach понял что вы имели в виду, но условие в правилах возвращает только true либо false если я туда засуну foreach то он мне вернется результат из кучи true и fаlse соответственно условие не сработает

Аватар пользователя gun_dose gun_dose 11 июня 2017 в 23:12

Имхо, имеет смысл написать для рулсов кастомный экшен, который в качестве аргумента примет значение поля. За основу взять стандартный экшен отправки емэйла, чтобы можно было из админки менять текст письма.

Аватар пользователя bumble bumble 12 июня 2017 в 6:28

Если сможете "наклацать" вьюшку с контекстным фильтром по нужному полю - можно реагировать на добавление ноды (триггер "После добавления материала"), и по аналогии с этим мануалом сообразить правило.

Если нет - смотрите EntityFieldQuery, там можно делать выборку по параметрам и значениям полей, и по ней уже циклом.

engenes wrote:

не писать же мне в цикле целый скрипт отправки письма на php

Почему нет??

Аватар пользователя engenes engenes 12 июня 2017 в 11:43

bumble wrote:

Почему нет??


Потому что велосипед уже готов.
Могу сделать представление с контекстным фильтром. За подсказку спасибо, не знал что можно повесить правило на views