Contemplates

Аватар пользователя Equ13 Equ13 30 июля 2008 в 2:13

Подскажите, пожалуйста, как можно через contemplates достать значение из поля для определенного типа материала?

Поясню: у меня есть тип материала, допустим Event. Там есть поле, из которого выбирается значение города (из словаря "Города" в таксономии). Теперь я создаю шаблон с помощью contemplates. Но там проблема с этим, т.к. для того, чтобы вытащить город в шаблон contemplates предлагает использовать
$node->taxonomy[1702]->name Но это работает только для примера, на котором contemplates показывает различные значения. Если же я это вставлю в свой шаблон, то все события (Event) будут иметь один город, который в таксономии имеет ID 1702.

Как решить данную проблему?

Комментарии

Аватар пользователя direqtor direqtor 30 июля 2008 в 5:02

Вот мне когда такое надо, я делаю просто.
Добавляю в node.tpl.php такой PHP

   drupal_set_message ("<pre>".print_r($node, true)."</pre>");

Потом открываю ноду нужного типа и о-о-о-очень внимательно читаю вывод.

Аватар пользователя glu2006 glu2006 30 июля 2008 в 11:41

а лучше поставить модуль "devel" и тогда по нажатию одной кнопки вы увидите все поля и их значения.

Аватар пользователя Equ13 Equ13 30 июля 2008 в 12:49

Попробовал оба способа (и со вставкой php на страницу и с модулем devel). Но пока мои познания в php слабоваты Sad
То, что выдает мне код:

[taxonomy] => Array
        (
            [1702] => stdClass Object
                (
                    [tid] => 1702
                    [vid] => 12
                    [name] => Владивосток
                    [description] =>
                    [weight] => 13
                )

        )

Как мне из этого что-то полезное можно извлечь?

Аватар пользователя Equ13 Equ13 30 июля 2008 в 23:11

Долго искал ответ, и пришел к следующему:

<?php foreach ((array)$taxonomy as $item) {
                if ($item->vid == 12):
                  print $item->name;
                endif;
            } ?>

Здесь 12 это ID словаря для ограничения вывода терминов, иначе он будет выводить все термины, связанные с этой нодой.

Аватар пользователя beerman beerman 31 июля 2008 в 11:07

была подобная проблема с созданием title ноды. Решение нашел такое:

<?php
$massiv = array_keys($node->taxonomy);
$manufacturer = $node->taxonomy[$massiv[0]]->name;
$modelmota = check_plain($node->title);
$bikeyear = check_plain($node->field_year[0]['value']);
$classbike = $node->taxonomy[$massiv[1]]->name;
drupal_set_title( $manufacturer.' '.$modelmota.', '.$bikeyear.' ('.$classbike.')') ?>

в итоге получил HONDA NV 400 STEED, 1996 (ЧОППЕР)

$manufacturer = HONDA
$modelmota = NV 400 STEED
$bikeyear = 1996
$classbike = ЧОППЕР

$manufacturer и $classbike термины разных словарей
[0] и [1] жестко заданы, по причине их постоянного местонахождения там.

Аватар пользователя Equ13 Equ13 2 августа 2008 в 13:14

Странно, но эта вставка работает только при сохранении

<?php foreach ((array)$taxonomy as $item) {
                if ($item->vid == 12):
                  print $item->name;
                endif;
            } ?>

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

Аватар пользователя beerman beerman 2 августа 2008 в 17:15

потому как таксономия еще не прописана.
пропишется только после сохранения материала

Аватар пользователя Equ13 Equ13 2 августа 2008 в 19:13

Спасибо, это понял, но опять вопросы... Если по заданным параметрым у ноды несколько терминов, то они выводятся так "термин1термин2термин3...терминn", без пробелов/запятых/других знаков или в виде списка. Как можно вышеуказанный код изменить так, чтобы это нормально отображалось?

Аватар пользователя beerman beerman 3 августа 2008 в 3:43

выводятся через запятую в порядке в котором они были внесены при добавлении ноды.
вывод/разбор посредсвом contemplate я описал выше..