Вы здесь

Как вывести содержимое в node.tpl только если выбран определенный термин?

1

Всем добрый день.
Подскажите пожалуйста, как вывести содержимое в node.tpl только если выбран определенный термин.
Есть словарь с терминами:
- Автобус
- Грузовой автомобиль
-- Тягач
-- Тягач с полуприцепом
-- Тягач с прицепом
- Легковой автомобиль
- Мотоцикл
- Полуприцеп
- Прицеп

В зависимости от выбранного термина хочу менять заголовок в таблице...
Допустим выбран термин "Тягач" - Подробнее о тягаче
А если выбран термин "Автомобиль" - Подробнее об автомобиле

Естественно темизирую .tpl для конкретного типа материала - карточка модели. У остальных будет свой шаблон.

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

Выглядит примерно так:

пример

Надо чтоб в заголовок подраздела "Дополнительная информация по ....." вставлялся определенный вид ТС в зависимости от выбранного в другом поле термина. Проблема в том как добраться до id термина в node.tpl... чтоб вызвать <?php if чего-то тут ?> :)

Спасибо.

Версия Drupal: 
7.x
Категория: 
Field APITaxonomy APITheming
Вопрос задан 23.02.2015 - 15:28
Аватар пользователя 69
69
11

Ответы

3

Все содержимое ноды и ее полей - находится в переменной $node, доступном в шаблоне ноды. Вопрос достаточно странный, поскольку те, кто знают как темировать шаблон для типа материала обычно знают, как добраться до полей, так что я постараюсь рассказать как можно подробнее. :)

Вам надо поставить модуль devel (для того, чтобы видеть содержимое переменной $node), и вывести эту переменную на экран через команду <?php dsm($node);?> Почитайте по модулю devel, это самый важный инструмент разработчика под Друпал.

При перезагрузке страницы ноды на экран выведутся (в удобном джаваскрипт-интерфейсе) все переменные ноды, в том числе id выбранного термина, название этого термина и так далее. Просто найдете нужную вам переменную и информацию в ней и выведете то, что надо.

В данном случае это скорее всего будет в вашей таблице <?php print $node->field_taxonomy['und'][0][term]->name; ?> или что-то подобной структуры, выводящее название автобуса в нужном месте. Это, так сказать, быстрый и грязный метод:) Оно сработает, но это считается типа "некрасиво" и "непрофессионально", писать код в шаблоне.

Разумеется, если в этом поле ничего не выбрано, то нода будет выкидывать notice, так что надо сделать сперва проверку на то, что какой-то терм выбран.

Если вы хотите делать "все правильно", то имеет смысл делать это в препроцессе ноды, создавая переменную, скажем, bus_name, доступную в шаблоне ноды, и делать просто <?php print $bus_name; ?> в нужном месте. Как работать с препроцессами - надо читать инструкции. :)

Если вы хотите сделать все совсем правильно, то с полями ноды в препроцессе надо работать через https://www.drupal.org/documentation/entity-metadata-wrappers Entity metadata wrappers. Это, конечно, требует также некоторого обучения. :)

Ответ дан 24.02.2015 - 00:23

<?php print $node->field_taxonomy['und'][0][term]->name; ?> - выводит имя термина. Вы правильно сказали, если его нет, то будет выскакивать notice. Чтоб нотиса не было нужно сделать "непрофессиональную" проверку <?php if (!empty($content["field_taxonomy"])): ?> и именно таким способом выведены с картинки термин Междугородний :)

Но в данном случае мне нужно сделать по другому... нужно сделать проверку на конкретное значение термина...
<?php if (!empty($content["field_taxonomy"] [id термина выбранного при создании ноды])): ?>

В общем логика нужна такая: если tid=2 выводим "по автобус", если tid=4 выводим "по тягачу" и т.д.
Но как это сделать кодом (проверку на наличие термина по id) - не знаю :(

На красивость решений не смотрю - делаю сайт для своей коллекции... :)

Комментарий оставлен 24.02.2015 - 01:26

switch case?
Можно всё этой действо запизать в функцию и вызывать её с входной переменной - массив терминов.

Комментарий оставлен 24.02.2015 - 04:25
2

$node->field_taxonomy['und'][0]['tid']

Ответ дан 24.02.2015 - 14:22

Спасибо, а как таким же способом сделать проверку выбран ли термин с id 7?

Комментарий оставлен 24.02.2015 - 19:45
<?php
if ($node->field_taxonomy['und'][0]['tid'] == 7) {
  print render($content['field_name']);
}

не врубаюсь, как сделать подсветку синтаксиса )

Комментарий оставлен 25.02.2015 - 07:37

Спасибо, то что нужно :) это и пытался спросить в основном вопросе :)

Комментарий оставлен 25.02.2015 - 22:22
0

А через views разве не проще?

Ответ дан 23.02.2015 - 16:15

Не понимаю как и зачем тут использовать views.

У ноды есть словарь с терминами, и нужно сделать проверку на заполнение поля по определенному значению (id термина в моем случае) и менять заголовок в таблице в зависимости от значения этого поля. Проблема в том, что не знаю как докопаться до проверки по tid.

Комментарий оставлен 23.02.2015 - 17:47

Если Вы поменяете весь node.tpl так как хотите, то другие ноды не будут отображаться.
Вообще через views правильно.

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

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

Комментарий оставлен 23.02.2015 - 20:18

Спасибо, видимо не точно описал задачу.
Естественно темизирую .tpl для конкретного типа материала - карточка модели. У остальных будет свой шаблон.

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

Выглядит примерно так:

пример

Надо чтоб в заголовок подраздела "Дополнительная информация по ....." вставлялся определенный вид ТС в зависимости от выбранного в другом поле термина. Проблема в том как добраться до id термина в node.tpl... чтоб вызвать <?php if чего-то тут ?> :)

Комментарий оставлен 23.02.2015 - 22:42