Нетривиальная Задача Для Поля Node Reference В Drupal

Одно из наиболее полезных полей, предоставляемых модулем CCK, — это Ссылка на узел .

Его задача тривиальна и понятна — связать содержимое сайта отношениями, что легко понять на примерах:

  • Компания, которая должна иметь ссылки на Workers в своем контенте
  • Футболист с подключением к своему узлу статистики.

Проблема, с которой мне пришлось столкнуться, заключается в том, как показать это поле:
  • Свежие, состоящие из различных ингредиентов (1 курица, 2 апельсина, 50 г специй)
По умолчанию CCK сам форматирует множественный или одиночный выбор ссылки на узел в виде списка или просто ссылки на соответствующий узел.

Задача вывода рецепта предполагает, что рецепт и ингредиент являются узлами.

Соответственно, при рендеринге контента с помощью Views мы получим:

Курица по-болгарски (рецепт)
  1. Курица(Ингредиент)
  2. Апельсин (ингредиент)
  3. Специи (Ингредиент)
Вместо:

Курица по-болгарски (рецепт)
  1. 1 курица (Ингредиент)
  2. 2 апельсина (ингредиент)
  3. 50 г специй (Ингредиент)
К сожалению, я не смог найти решение этой проблемы ни в Google, ни в Drupal.org, поэтому пришлось искать свой выход, и он оказался довольно простым и красивым.

Для узла «Продукт» добавьте еще одно мультиполе «Текст», которое мы разместим в представлении «Поля» после ссылки на узел.

И в шаблоне view-view-fields.tpl.php (или конкретном представлении, как вам нужно) пишем магию:

<Эphp $nids = array(); ?> <Эphp foreach ($fields as $id => $field): ?> <Эphp if($id == 'field_product_nid') { $nids = array_shift($field->handler->field_values); continue; } if($id == 'field_product_title_value') { $items = array(); $index = 0; $titles = array_shift($field->handler->field_values); foreach($titles as $title) { $items[] = l($title['value'], 'node/' .

$nids[$index++]['nid']); } // TODO: theming here $field->content = theme('item_list', $items); } ?> <Эphp if (!empty($field->separator)): ?> <Эphp print $field->separator; ?> <Эphp endif; ?> <<Эphp print $field->inline_html;?> class="views-field-<Эphp print $field->class; ?>"> <Эphp if ($field->label): ?> <Эphp print $field->label; ?>: <Эphp endif; ?> <Эphp // $field->element_type is either SPAN or DIV depending upon whether or not // the field is a 'block' element type or 'inline' element type. ?> <<Эphp print $field->element_type; ?> class="field-content"><Эphp print $field->content; ?></<Эphp print $field->element_type; ?>> </<Эphp print $field->inline_html;?>> <Эphp endforeach; ?>

Это позволит вам визуализировать представление, заменив заголовок поля Node Reference. Есть ли у вас решение этой проблемы? Теги: #drupal #Chulan #ссылка на узел #CCK

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.