Всем добрый день.
Подскажите пожалуйста, как вывести содержимое в node.tpl только если выбран определенный термин.
Есть словарь с терминами:
- Автобус
- Грузовой автомобиль
-- Тягач
-- Тягач с полуприцепом
-- Тягач с прицепом
- Легковой автомобиль
- Мотоцикл
- Полуприцеп
- Прицеп
В зависимости от выбранного термина хочу менять заголовок в таблице...
Допустим выбран термин "Тягач" - Подробнее о тягаче
А если выбран термин "Автомобиль" - Подробнее об автомобиле
Естественно темизирую .tpl для конкретного типа материала - карточка модели. У остальных будет свой шаблон.
В карточке модели формирую таблицу которая заполняется на основании тех или иных полей. Есть раздел общая информация, куда выводятся все поля которые общие для всех моделей... и есть раздел для каждой категории транспортного средства туда вывожу поля которые относятся только к этому типу ТС.
Выглядит примерно так:
Надо чтоб в заголовок подраздела "Дополнительная информация по ....." вставлялся определенный вид ТС в зависимости от выбранного в другом поле термина. Проблема в том как добраться до id термина в node.tpl... чтоб вызвать <?php if чего-то тут ?>
:)
Спасибо.
Ответы
Все содержимое ноды и ее полей - находится в переменной $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. Это, конечно, требует также некоторого обучения. :)
$node->field_taxonomy['und'][0]['tid']
Спасибо, а как таким же способом сделать проверку выбран ли термин с id 7?
<?php
if ($node->field_taxonomy['und'][0]['tid'] == 7) {
print render($content['field_name']);
}
не врубаюсь, как сделать подсветку синтаксиса )
Спасибо, то что нужно :) это и пытался спросить в основном вопросе :)
А через views разве не проще?
Не понимаю как и зачем тут использовать views.
У ноды есть словарь с терминами, и нужно сделать проверку на заполнение поля по определенному значению (id термина в моем случае) и менять заголовок в таблице в зависимости от значения этого поля. Проблема в том, что не знаю как докопаться до проверки по tid.
Если Вы поменяете весь node.tpl так как хотите, то другие ноды не будут отображаться.
Вообще через views правильно.
Или Вы неправильно описали задачу. Вам что надо, в самой ноде что-то поменять, или в этой ноде будет вывод тех терминов и нужно заголок поменять?
Если всё же хотите через шаблоны, то дергайте поле с терминов и выводите.
Спасибо, видимо не точно описал задачу.
Естественно темизирую .tpl для конкретного типа материала - карточка модели. У остальных будет свой шаблон.
В карточке модели формирую таблицу которая заполняется на основании тех или иных полей. Есть раздел общая информация, куда выводятся все поля которые общие для всех моделей... и есть раздел для каждой категории транспортного средства туда вывожу поля которые относятся только к этому типу ТС.
Выглядит примерно так:
Надо чтоб в заголовок подраздела "Дополнительная информация по ....." вставлялся определенный вид ТС в зависимости от выбранного в другом поле термина. Проблема в том как добраться до id термина в node.tpl... чтоб вызвать <?php if чего-то тут ?>
:)
<?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) - не знаю :(
На красивость решений не смотрю - делаю сайт для своей коллекции... :)
switch case?
Можно всё этой действо запизать в функцию и вызывать её с входной переменной - массив терминов.