Pull to refresh

Модуль для кулинарного сайта

Reading time 2 min
Views 2.3K
Привет %username%,

В ответ на «Нетривиальная задача для Node Reference поля Drupal», решил подпилить для кулинарии один из кастомных модулей.

Для работы модуля предполагается следующая структура материалов сайта:
Тип материала «Рецепт» — основной контент с описанием рецепта
Типы материалов с ингредиентами:
  1. Ингредиент 1 — Материалы сайта с ингредиентами первой группы (Напр. тип материала «Специи»)
  2. Ингредиент 2 — Материалы сайта с ингредиентами второй группы (Напр. тип материала «Фрукты»)
  3. ...
  4. Ингредиент N — Материалы сайта с ингредиентами N группы

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

После включения модуля в списке доступных типов полей появится дополнительный тип — «Ingredient».
Модуль позволяет добавлять референсные ссылки на ноды ингредиентов, устанавливать количество продукта и единицы измерения. Поддерживается множественное добавление строк, drag&drop сортировка.

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

Полезной функцией модуля является функция темизации отображаемых данных

function theme_recipe_site_formatter_default($element) {
  $fields = $element['#item'];
  $res = '';
  if (!empty($fields)) {
    $item = explode('[nid:', $fields['ingredient_name']);
    $title = trim($item[0]);
    $nid = drupal_substr($item[1], 0, -1);
    $res = l($title, 'node/'. $nid) .' — '. $fields['ingredient_qty'] .($fields['ingredient_unit'] == '<space>' ? '' : ' '. $fields['ingredient_unit']);
  }

  return $res; 
}


В файле темы template.php создаем свою функцию и формируем переменную $res как ссылку на заранее подготовленный views, которому в качестве аргумента передается nid ингредиента. Это позволит получить список всех рецептов, в которых используется данный ингредиент:

function ИМЯТЕМЫ_recipe_site_formatter_default($element) {
  $fields = $element['#item'];
  $res = '';

  if (!empty($fields)) {
    $item = explode('[nid:', $fields['ingredient_name']);
    $title = trim($item[0]);
    $nid = drupal_substr($item[1], 0, -1);
    $res = l($title, 'ПУТЬ_К_ВЬЮС/'. $nid) .' — '. $fields['ingredient_qty'] .($fields['ingredient_unit'] == '<space>' ? '' : ' '. $fields['ingredient_unit']);
  }

  return $res; 
}

Не забываем сбросить кэш.

Собственно, сам модуль

Как это ни странно — работает ;)

Статья для получения инвайта моим другом, пока что не пользователем Хабрахабра.
Если найдутся добрые люди, отправьте ему на serjik.bozhko@gmail.com, пожалуйста, приглашение =).

Tags:
Hubs:
+10
Comments 6
Comments Comments 6

Articles