Вы здесьБлоги / RemaGe's blog / Drupal - Урок пятнадцатый - Автоматизация. Модули Triggers и Workflow.

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


By RemaGe - Posted on 20 Декабрь 2009

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

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

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





Если вам понравилась эта статья, можете сделать мне приятно, подписавшись на RSS, FriendFeed или Twitter.


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

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

RemaGe аватар

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

Неизвестный аватар

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

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

RemaGe аватар

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

Неизвестный аватар

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

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. Снимаю вопрос. Что-то на моей стороне сбоит. Все нормально отображается.

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

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

RemaGe аватар

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

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

RemaGe аватар

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

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

RemaGe аватар

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

Неизвестный аватар

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

Неизвестный аватар

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

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

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

Неизвестный аватар

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

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу. If you have a Gravatar account, used to display your avatar.
  • Доступны HTML теги: <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <p> <br />
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Поисковые системы будут индексировать и переходить по ссылкам на разрешённые домены.

  • Строки и параграфы переносятся автоматически.
  • You may post code using <code>...</code> (generic) or <?php ... ?> (highlighted PHP) tags.

Подробнее о форматировании

CAPTCHA
Этот вопрос проверяет человек ли вы, и предотвращает рассылку спама.
Image CAPTCHA
Enter the characters shown in the image.