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

logo.pngАвтоматизация — это слово беспокоит людей с первой НТР произошедшей в 17 веке, что может быть лучше, чем поставить производство на поток? Отладить работу, и пожинать лавры?

Видео к уроку. (Скачать в хорошем качестве) (55Мб)

Сегодня мы поговорим о том, что может предложить 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.png

drupal-lesson-trigger-workfow-actions-14.png

Статус (creation) добавляется по умолчанию.
Сохраняем, и идем в « Administer → Content management → Content types», добавляем свой тип материалов

drupal-lesson-trigger-workfow-actions-15.png

Name: Статья пользователя
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.png

Description: Сообщение пользователю добавившему статью
Message: Статья сохранена, и ожидает проверки модератором.

Возвращаемся на «Administer → workflow». Жмем ссылку Actions

drupal-lesson-trigger-workfow-actions-22.png

И добавляем нужные события (событие «Save post» добавляется автоматом).

drupal-lesson-trigger-workfow-actions-24.png
drupal-lesson-trigger-workfow-actions-25.png

Теперь идем в «Administer → User management → Permissions» и разрешаем авторизированным пользователям создавать и редактировать свои статьи типа « user_article»

drupal-lesson-trigger-workfow-actions-26.png

Все. Теперь можете проверить, создайте пользователя, и создайте им статью, она сохранится, пользователь увидит сообщение, но она не будет опубликована, и не будет выведена на главную.

Спасибо за внимание -)

29 comments so far:

webremake

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

RemaGe

Спасибо, скачаю -сравню -)

wolfXXXL (не проверено)

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

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

RemaGe

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

Ska1n (не проверено)

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

RemaGe

Простой способ - модуль Views. Потруднее - написать свой снипет (если знаете PHP, то это не трудно).

жЕ Ка

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

RemaGe

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

Dematron

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

RemaGe

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

Dematron

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

RemaGe

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

Dematron

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

Dematron

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

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

komandor43

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

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

RemaGe

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

komandor43

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

RemaGe

можно посмотреть здесь вашсайт/admin/build/path

komandor43

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

RemaGe

С друпалом идет модуль Upload

ogerero (не проверено)

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

Fonarik (не проверено)

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

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

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

Любовь (не проверено)

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

set

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

RemaGe

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

set

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

Avenger

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

Неизвестный (не проверено)

Спасибо за столь Нужные уроки. Спасибо Вам!

Чаус Константин

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

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

RSS-материал RSS-материал