[РЕШЕНО] Вывод значения поля из ноды

Главные вкладки

Аватар пользователя iloveny iloveny 4 июля 2013 в 19:22

Темизировал поле ноды, вставил код iframe:

</head>
<body>
<iframe src="LINK" width="91%" height="323" frameborder="1"> </iframe>
</body>
</html>

Скажите пожалуйста, как вместо LINK вывести значения поля ноды field_link? Что бы в iframe отображалась страница ссылка на которую вставлена в поле.

Комментарии

Аватар пользователя serega111 serega111 4 июля 2013 в 21:11

<?php
$field = field_get_items('node', $node, 'field_link');
$link = reset($field);
// $link - массив, структуру точно не знаю, зависит от типа поля.
// подозреваю, что-то типа $link['value'] и есть то самое значение.
?>

Аватар пользователя iloveny iloveny 7 июля 2013 в 2:02

serega111 wrote:
<?php
$field = field_get_items('node', $node, 'field_link');
$link = reset($field);
// $link - массив, структуру точно не знаю, зависит от типа поля.
// подозреваю, что-то типа $link['value'] и есть то самое значение.
?>

Объясните пожалуйста чайнику с чем это есть? Вставляю данный код в src="", но ничего не работает. Или ссылку как то по другому надо выводить?

Аватар пользователя iloveny iloveny 8 июля 2013 в 11:30

serega111 wrote:

</head>
<body>
<?php
$field = field_get_items('node', $node, 'field_link');
$link = reset($field);
?>
<iframe src="<?php print $link['value']; ?>" width="91%" height="323" frameborder="1"> </iframe>
</body>
</html>


Не работает Sad страница выдает ошибку

Аватар пользователя Dalay Dalay 8 июля 2013 в 12:02
</head>
<body>
<?php
$field = field_get_items('node', $node, 'field_link');
$link = $field[0]['value'];
?>
<iframe src="<?php print $link; ?>" width="91%" height="323" frameborder="1"> </iframe>
</body>
</html>

Выведет первое значение поля, если у него есть value(если это обычное текстовое поле, например).

upd: В принципе, идентично предыдущему коду. Кэш сбросьте.

Аватар пользователя iloveny iloveny 9 июля 2013 в 2:08

Dalay wrote:

</head>
<body>
<?php
$field = field_get_items('node', $node, 'field_link');
$link = $field[0]['value'];
?>
<iframe src="<?php print $link; ?>" width="91%" height="323" frameborder="1"> </iframe>
</body>
</html>

Выведет первое значение поля, если у него есть value(если это обычное текстовое поле, например).

upd: В принципе, идентично предыдущему коду. Кэш сбросьте.


Не работает, выдается та же ошибка Notice: Undefined variable: node в функции include() (строка 56 в файле C:\Users\Acer\Desktop\OpenServer\domains\site.ru\sites\all\themes\bartik\templates\field--field_link--link.tpl.php).
EntityMalformedException: Отсутствует связующее свойство у сущности типа node. в функции entity_extract_ids() (строка 7633 в файле C:\Users\Acer\Desktop\OpenServer\domains\site.ru\includes\common.inc).
Тоже не работает.

Аватар пользователя iloveny iloveny 9 июля 2013 в 1:49

"serega111" wrote:

<?php
$field = field_get_items('node', $node, 'field_link');
$link = reset($field);
?>
" width="91%" height="323" frameborder="1">


Notice: Undefined variable: node в функции include() (строка 56 в файле C:\Users\Acer\Desktop\OpenServer\domains\site.ru\sites\all\themes\bartik\templates\field--field_link--link.tpl.php).
EntityMalformedException: Отсутствует связующее свойство у сущности типа node. в функции entity_extract_ids() (строка 7633 в файле C:\Users\Acer\Desktop\OpenServer\domains\site.ru\includes\common.inc). Вот такую ошибку выдает

Аватар пользователя serega111 serega111 9 июля 2013 в 6:40

ну конечно, в этом файле объект ноды просто так не доступен. Я подумал, вы этот файл используете node--type.tpl.php
Странно, что вы нашли как темизировать поле, но не разобрались, какие переменные вам доступны. читайте тут https://api.drupal.org/api/drupal/modules!field!theme!field.tpl.php/7

</head>
<body>
<?php
$item = reset($items);
?>
<iframe src="<?php print $item['value']; ?>" width="91%" height="323" frameborder="1"> </iframe>
</body>
</html>

Если у вас будет несколько значений в поле, то нужно будет создать цикл по $items.

Аватар пользователя Dalay Dalay 9 июля 2013 в 16:31

"serega111" wrote:

</head>
<body>
<?php
$item = reset($items);
?>
<iframe src="<?php print $item['value']; ?>" width="91%" height="323" frameborder="1"> </iframe>
</body>
</html>

Переменная $items попадает в шаблон поля обработанной препроцесс-функцией, где value меняется на форматированный вид (['#markup']). Что бы получить "голое" значение поля, стоит обращаться к массиву $element.

<iframe src="<?php print $element['#items'][0]['value']; ?>" width="91%" height="323" frameborder="1"> </iframe>

Все это справедливо, опять же, если мы говорим о получении первого значения массива "стандартного" текстового поля.

пс
Прошу воспринимать написанное мною лишь как вариант получения нужного значения. Употребление текстовых полей для получения ссылок, без их предварительной специфической валидации, не есть хорошее решение.

ппс
Зачем в шаблоне поля левые обертки у iframe?

Аватар пользователя serega111 serega111 9 июля 2013 в 17:00

"Dalay" wrote:
Переменная $items попадает в шаблон поля обработанной препроцесс-функцией, где value меняется на форматированный вид (['#markup']). Что бы получить "голое" значение поля, стоит обращаться к массиву $element.

спс за замечание, темизацией не занимаюсь, поэтому ошибся, увидел в доках $item, и решил, что это одно из значений поля.
"Dalay" wrote:
Зачем в шаблоне поля левые обертки у iframe?

"iloveny" wrote:
Что бы в iframe отображалась страница ссылка на которую вставлена в поле.

Аватар пользователя iloveny iloveny 10 июля 2013 в 0:29

"Dalay" wrote:
Зачем в шаблоне поля левые обертки у iframe?

хочу сделать на сайте такую функцию: Пользователь добавляет ссылку в нужное поле, при добавлении ноды, потом в этой ноде в iframe окне показывается страница (внешняя) ссылка на которую добавлена в это поле. Можно ли как нибудь без заморочек это организовать?