Вы здесь

Drupal - Урок пятнадцатый - Автоматизация. Модули Triggers и Workflow

Автоматизация — это слово беспокоит людей с первой НТР произошедшей в 17 веке, что может быть лучше, чем поставить производство на поток? Отладить работу, и пожинать лавры?Сегодня мы поговорим о том, что может предложить Drupal, для автоматизации некоторых процессов. Для начала давайте установим модуль Trigger, он идет с Drupal. drupal-lesson-trigger-workfow.png после установки на странице «Administer» появится 2 новых ссылки: Triggers и Actions. Если объяснять по простому, тригеры (Triggers), - это какие то системные события, например создание материала, или комментария, а действия (Actions) — это то, как мы можем на них отреагировать. Такая вот, причинно-следственная связь -) Давайте создадим свое действие. Заходим на страницу «Administer → Actions», и видим список действий созданных по умолчанию, а так же форму для создания своих действий. drupal-lesson-trigger-workfow-actions.png Давайте попробуем создать действие, например, мы хотим, что бы при определенном тригере, пользователя перекидывало на страницу www.yandex.ru (Смилостивись, и дай мне еще немного ТИЦа -) ), для этого создаем действие «Redirect to URL». drupal-lesson-trigger-workfow-actions-3.png В настройках вбиваем название (желательно его изменить, так как таких действий может быть несколько), и адрес: drupal-lesson-trigger-workfow-actions-4.png Действие добавилось в список, в отличие от добавленных по умолчанию, его можно изменить, или удалить: drupal-lesson-trigger-workfow-actions-5.png Теперь давайте закрепим наше действие, за каким-либо событием. Заходим на страницу «Administer → triggers» drupal-lesson-trigger-workfow-actions-6.png События разбиты по типам. Изначально мы попадаем на события связанные с материалами, давайте повесим наше действие, на событие «After saving a new post», то есть, после добавления материала, пользователь будет перекинут на яндекс. drupal-lesson-trigger-workfow-actions-7.png Прикрепляем... drupal-lesson-trigger-workfow-actions-8.png и добавляем новый материал. Если все сделано правильно, вас перекинет на яндекс. Так же можно добавить любое другое действие, например, что бы на каждый коммент, вы получали сообщение. Конечно, доступно немного действий, но есть множество модулей, которые работают с модулем Trigger, и добавляют свои действия в систему. Например, модуль Token, который очень часто встречается в моих уроках (штука крайне полезная). drupal-lesson-trigger-workfow-actions-9.png Вместе с ним идет модуль Token actions, который добавляет 3 события: Послать пользователю сообщение, Послать e-mail, Редирект на страницу. Но при этом, можно использовать токены. Например послать сообщение, включающее в себя текст свежедобавленного комментария, автора, время, и кучу другой информации. Теперь давайте установим модуль Workflow, и Workflow access. Он тесно связан с модулем Trigger, и позволяет добавить к типам материалов различные статусы, разграничить, какие роли могут производить перевод из статуса в статус, и вызывать при каждом переходе какое то действие. После установки, появляется сообщение drupal-lesson-trigger-workfow-actions-10.png переходим по ссылке, и жмем кнопку «rebuild permissions» (Друпал большой — ему видней). Теперь заходим на страницу «Administer → Workflow». Для того что бы понять как это все работает (с первого раза сам слегка затупил -) ), давайте решим какую-либо задачу. Например, нужно сделать сайт, и дать зарегистрированным пользователям возможность создавать статьи, которым будет присваиваться статус «Не проверенно», после создания пользователю выводится сообщение о удачном добавлении, при этом статья не публикуется, и не выводится на главную. Пользователь с правами может дать статье статус «Проверенно», или «Лучшее», в первом случае статья публикуется, во втором публикуется и выводится на главную. Приступим. Создаем свой Workflow drupal-lesson-trigger-workfow-actions-11.png Пусть он называется «User_article_workflow» drupal-lesson-trigger-workfow-actions-12.png Теперь нужно создать статусы, добавим «Не проверенно», «Проверенно» и «Лучшее». drupal-lesson-trigger-workfow-actions-13.pngdrupal-lesson-trigger-workfow-actions-14.png Статус (creation) добавляется по умолчанию. Сохраняем, и идем в « Administer → Content management → Content types», добавляем свой тип материалов drupal-lesson-trigger-workfow-actions-15.pngName: Статья пользователя Type: user_article Workflow settings - Default options: все галочки сняты. drupal-lesson-trigger-workfow-actions-16.png Сохраняем, и возвращаемся на страницу «Administer → Workflow». Там уже появился наш тип, ассоциируем его с Workflow «User_article_workflow». drupal-lesson-trigger-workfow-actions-17.png Осталось настроить права, и действия. Но для начала добавим пользователя "модератор" (он не обязателен, но так нагляднее). Идем в «Administer → User management → Roles». drupal-lesson-trigger-workfow-actions-19.png Возвращаемся на страницу «Administer → Workflow». Кликаем по ссылке Edit, напротив Workflow «User_article_workflow», drupal-lesson-trigger-workfow-actions-18.png и видим таблицу, в которой нужно указать, какие роли, могут переводить из одного состояния в другое. drupal-lesson-trigger-workfow-actions-20.png Из состояния «(creation)» в непроверенное может перевести авторизированный пользователь и автор (какое то состояние у статьи должно быть, а так как выбор один, при создании статьи авторизированным пользователем, она автоматом примет статус «Не проверенно» у Модератора будет выбор), остальное может модератор. Workflow tab permissions Галочка Модератору. Далее идут таблицы доступа.«Administer → Workflow» drupal-lesson-trigger-workfow-actions-21.pngСостояние «Непроверенно» Видят: Модератор, Автор Редактируют:Модератор, Автор Могут удалить: Модератор Состояние «Проверенно» Видят: Все Редактируют:Модератор Могут удалить: Модератор Состояние «Лучшее» Видят: Все Редактируют:Модератор Могут удалить: Модератор Сохраняем. Теперь нужно присвоить действия, но для начала нужно создать действие, которое покажет пользователю сообщение, после создания статьи. Переходим на «Administer → Actions» и добавляем действие «Display a message to the user». drupal-lesson-trigger-workfow-actions-23.pngDescription: Сообщение пользователю добавившему статью Message: Статья сохранена, и ожидает проверки модератором. Возвращаемся на «Administer → workflow». Жмем ссылку Actions drupal-lesson-trigger-workfow-actions-22.png И добавляем нужные события (событие «Save post» добавляется автоматом). drupal-lesson-trigger-workfow-actions-24.pngdrupal-lesson-trigger-workfow-actions-25.png Теперь идем в «Administer → User management → Permissions» и разрешаем авторизированным пользователям создавать и редактировать свои статьи типа « user_article» drupal-lesson-trigger-workfow-actions-26.png Все. Теперь можете проверить, создайте пользователя, и создайте им статью, она сохранится, пользователь увидит сообщение, но она не будет опубликована, и не будет выведена на главную. Спасибо за внимание -)

Комментарии

Полезный урок! И как всегда коротко, просто и понятно.
Намного лучше чем в книге "Using Drupal" издательства O'Reilly Media.

Как то не сталкивался, но всегда интересно было как работает и как можно применить модуль Triggers.
Спасибо автору за статью теперь все стало понятно.
Теперь осмысливая многие решения, понимаю можно было сделать намного проще через описанный выше функционал.
Радует перспектива дальнейшего использования полученых знаний довольно таки гибкого и мощного инструмента который значительно разгрузит административную работу над сайтом.

Ещё раз спасибо и не только за эту статью, но и за много полезного для 'drupal-разработчика' на этом сайте.

Незачто, сам многое узнал, во время написания уроков)

полезная статья, спасибо, единственный вопрос, который продолжает меня мучить с темой про модерацию - как сделать так, чтобы пользователь, написавший статью, мог после зайти в нее и отредактировать\удалить, на момент, пока статья находится на модерации? знаю, что достаточно запомнить урл и юзер может просматривать свои неопубликованные статьи, но как реализовать раздел\список статей, в котором и будут находится эти статьи?

вопрос по 8ому уроку. файл закачивается, но в нем таблица только с заголовками полей. записей нету. кароче, таблица из одной строки и например 3х колонок. в чем трабл?

Проверьте фильтры, видимо вьювсам нечего выбирать.

К сожалению не смог отписаться именно в теме урока (Урок номер 5 по Меню). Тоже как и у других не получалось сделать так чтобы появлялись подменю. Но заметил такую странную закономерность - при смене темы Garland (та что по умолчанию), на другую (в моем случае была тема Obsidian) - меню стали отображаться нормально. Возможно ли, что это проблемы темы или например PHP (не 5.2 а 5.3) на котором стоит сайт?

Проблема темы - возможно. Попробуйте опять поменять, если закономерность есть, значит проблема в этом.
Проблема ПХП - нет.

Возник вопрос по меню... Есть ли возможность сделать так чтобы часть пользователей (например анонимы) могли видеть только часть пунктов меню (имеется ввиду Primary Links), зарегистрированные немного больше, а модераторы например все пункты? Смотрел просто на вкладке разрешений и Правил доступа как то такого не нашел.

Наверное есть какой то модуль, но не сталкивался.
Попробуйте просто выделить пункты меню доступные модератору в отдельное меню, и в настройках задать к нему доступ.

Модуль Menu access - правила доступа к меню.
Модуль menu_per_role - правила доступа к пунктам меню (х.з. так это или нет не проверял, но вроде как ограничивается только доступ к пункту меню, но не материалу на которое ссылается этот пункт, для этого рекомендуется content_access).

Вопрос по темизации. Странным образом отображаются добавляемые по уроку элементы. Все прописал и в css и в *.tpl, добавил файлы. При вводе адреса http://mysite.ru все нормально, все отображается. При вводе http://www.mysite.ru - ни уголки ни фон в блоках не отображаются. С чем это может быть связано?

P.S. Снимаю вопрос. Что-то на моей стороне сбоит. Все нормально отображается.

Вопрос к уроку 7:
taxonomy/term/n, где n — это номер термина

Где можно найти номер термина?

Зайдите в таксономию, в список терминов, в нужный термин, в строке адрема, в конце, будет цифра, меняющаяся в зависимости от термина, это номер термина.

Изучаю Drupal по Вашим урокам. Во втором уроке подключил модуль "Создание человеко понятных адресов". И теперь когда я захожу в список терминов в строке адреса вместо цифры высвечивается человеко-понятный адрес. Есть ли еще какой-нибудь способ найти номер термина?

Спасибо за хорошие уроки.
Извините за вопрос не по теме. Нужно загрузить файл с моего компьютера на сайт.
- Как вызвать диалог выбора файла?
- Можно ли это сделать штатными средствами Drupal?

Подскажите пожалуйста как отобразить текущее состояние в материале.
(напр. при просмотре пользователь видит Состояние «Проверенно»)
Спасибо

Спасибо за понятный урок и за Ваш труд.
часто ищу информацию на вашем сайте. правда не всегда нахожу поиском по сайту.
Например сегодня ввел "тригер" не нашел, а через гугл - нашел.

1. Можно ли сделать подшивку уроков по порядку? Например этот урок отсутствует, если открыть тег Уроки.

2. Можно ли создать действие, чтобы при добавлении материала в определенный тип, происходила отправка на электронный адрес, не во все типы?

Тоже интересует данный вопрос. С помощью триггеров сделала отправку письма на определенный адрес при добавлении материала. А вот как сделать, чтобы отправка почты производилась только при добавлении определенного типа материалов?

Видео к уроку. (Скачать в хорошем качестве) (55Мб)
Ссылка сдохла, к сожалению :(

с 1 числа без интернета, помочь не могу.
Посмотрите на rutracker org, там выкладывались мои уроки вместе с видео

Да, я нашёл в итоге, но решил вас всё же уведомить... Евгений, может, вам помочь с хостингом, чтоб не приходилось заливать всё на сторонние ресурсы?

Помогите правильно настроить workflow. После написания пользователем статьи статус ей присваивается но пользователь может править только сразы (она не в одной ссылке не отображается). в настройкаж workflow стоит галочка что модератор может править, а на самом деле он не видит статью пока та не опубликуется. Что делать?

Извините, что вопрос не по теме, но где я на Вашем сайте найти инфу по поисковой оптимизации Друпал?

А за уроки огромное спасибо! Очень удобно, понятно и доступно