Это мой первый пост на данном ресурсе, поэтому строго не судить. Drupal начал использовать с 7 версии и 6 совсем не знаю, да и знать не хочу.
Сделал сайт, разобрался с views, но надо было получить чистые значения полей из объекта node. Первым делом я начал искать на просторах интернета, в том числе и на этом сайте. Но ничего внятного ни на английском ни на русском не нашел.
<?phpprint render($content)?>
дает нам сгенерированный html код с приписыванием div'ов, классов css и прочую лабудень, которая не всегда то и нужна. Поэтому не найдя явного ответа я решил данную проблему написанием своей функции.
<?php function get_field($field){
$res = array();
foreach ($field as $val){
$res[] = $val['value'];
}
return $res;
}?>
Функция возвращает массив для полей определенных пользователем. В качестве переменной принимается поле объекта node другими словами у меня есть поле видео (машинное имя field_video) вызов функции <?php get_field($node->field_video['und']);?>
даст нам массив с данными этого поля. Что такое und могу лишь догадываться, смахивает на undefined (неопределенный объект или переменная по стандарту ECMA - 262), повторюсь это лишь догадка. Получить данные из пользовательского поля просто, передав моей функции переменную вида $node->{машинное имя поля}['und'];
Ну а вот для чего я это все делал.
P.S. Если есть вопросы то отвечу, если изобрел велосипед то прошу прощения, только ответа на этот вопрос я так и не нашел . Если начнется бухня типа трололло ты тупой и не умеешь пользоваться поиском, то это будет первый и последний мой пост на drupal.ru
[UPD]
<?php
function get_field2($nid,$field_name){
$res = array();
$node = node_load($nid);
$fields = field_get_items('node', $node, $field_name);
foreach (
$fields as $key => $val){
$res[] = render(field_view_value('node', $node, $field_name, $fields[$key]));
}
return $res;
}
$arr = get_field2($nid,'field_video');
print_r($arr);
?>
Вложение | Размер |
---|---|
snimok-1.png | 349.31 КБ |
Комментарии
Вчерашняя тема http://www.drupal.ru/node/75325 Это означает, что поле имеет undefined language. Т.е. нейтральный язык. Я так и не понял для чего. Что это за зверь ушастый и какое отношение он имеет к полям?
У меня есть поле с именем field_video, тип виджета тект (текстовая строка), количество значений не ограничено, а этот ушастый это видеоролик, своей функцией я вытянул значения поля field_video и добавил скрипт который генерирует плейлист для jwplayer, в итоге все видяхи в рамках одной копии плеера и нужную можно выбрать из плейлиста.
Вчерашняя тема http://www.drupal.ru/node/75325
В этой статье речь о полях для пользователей а не для $node из node.tpl.php. Да и решил я это 2 дня назад, решил поделиться, но судя по отзыву не стоит этого впредь делать.
Делиться стоит. Тут много до хрена умных бакланов, только пользы сообществу от них ноль.
Не забывайте перед выводом фильтровать эти «чистые» значения.
Окей, Parameters
$entity_type The type of $entity; e.g., 'node' or 'user'.
$entity The entity containing the data to be displayed.
$field_name The field to be displayed.
$langcode (optional) The language code $entity->{$field_name} has to be displayed in. Defaults to the current language.
У меня поле с машинным именем field_video, в моем случае
<?php field_view_field('node', {сюда то что?}, 'field_video')?>
язык это необязательный параметр его можно опустить на крайний случай дописать 'und', конкретно для моего примера.
Вот это что за зверь? $entity The entity containing the data to be displayed.
Ноду.
Тоже ноду.
http://www.davereid.net/content/hlkd7fotw-field-get-items
Если так то не выдает фигню полную
<?phpfield_view_field('node', $node, 'field_video');?>
что можно передавать в качестве 2 аргумента функции field_view_field? В том случае когда у нас первый аргумент 'node' а не 'user'.
Эта фигня называется Renderable Array обычно используют совместно с функцией render
$video = field_get_items('node', $node, 'field_video');
$current = field_view_value('node', $node, 'field_video', $video[0]);
print render($current); // вот так получим указанный элемент, в конкретном случае это первый линк на видео. Чтоб остальные получить надо кинуть это в цикл один фиг. Спасибо за подсказки Ch. Но на этом форуме явно делать нефиг. К Ch это не относиться.
Я рад что вы решили начать с себя