Извлечь данные из пользовательского поля объекта node

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

Аватар пользователя karbunkul karbunkul 30 января 2012 в 8:30

Это мой первый пост на данном ресурсе, поэтому строго не судить. 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.png349.31 КБ

Комментарии

Аватар пользователя Ch Ch 30 января 2012 в 8:51

"karbunkul" wrote:
Первым делом я начал искать на просторах интернета, в том числе и на этом сайте.

Вчерашняя тема http://www.drupal.ru/node/75325

"karbunkul" wrote:
Что такое und могу лишь догадываться, смахивает на undefined
Это означает, что поле имеет undefined language. Т.е. нейтральный язык.

"karbunkul" wrote:
Ну а вот для чего я это все делал.
Я так и не понял для чего. Что это за зверь ушастый и какое отношение он имеет к полям?

Аватар пользователя karbunkul karbunkul 30 января 2012 в 9:07

Ch][quote="karbunkul" wrote:

"karbunkul" wrote:
Ну а вот для чего я это все делал.
Я так и не понял для чего. Что это за зверь ушастый и какое отношение он имеет к полям?

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

Аватар пользователя karbunkul karbunkul 30 января 2012 в 9:12

Ch][quote="karbunkul" wrote:
Первым делом я начал искать на просторах интернета, в том числе и на этом сайте.

Вчерашняя тема http://www.drupal.ru/node/75325

В этой статье речь о полях для пользователей а не для $node из node.tpl.php. Да и решил я это 2 дня назад, решил поделиться, но судя по отзыву не стоит этого впредь делать.

Аватар пользователя dyms@drupal.org dyms@drupal.org 30 января 2012 в 9:28

"karbunkul" wrote:
но судя по отзыву не стоит этого впредь делать

Делиться стоит. Тут много до хрена умных бакланов, только пользы сообществу от них ноль.

Аватар пользователя Ch Ch 30 января 2012 в 11:04

"<a href="mailto:dyms@drupal.org">dyms@drupal.org</a>" wrote:
В этой статье речь о полях для пользователей а не для $node
Это не имеет значения. field_view_field работает с любыми полями.

"karbunkul" wrote:
Функция возвращает массив для полей определенных пользователем.
http://api.drupal.org/api/drupal/modules--field--field.module/function/f...

"karbunkul" wrote:
но надо было получить чистые значения полей из объекта node

Не забывайте перед выводом фильтровать эти «чистые» значения.

Аватар пользователя karbunkul karbunkul 30 января 2012 в 11:46

Ch wrote:

Функция возвращает массив для полей определенных пользователем.

http://api.drupal.org/api/drupal/modules--field--field.module/function/f...

Окей, 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.

Аватар пользователя karbunkul karbunkul 30 января 2012 в 12:59

Если так то не выдает фигню полную <?phpfield_view_field('node', $node, 'field_video');?>

что можно передавать в качестве 2 аргумента функции field_view_field? В том случае когда у нас первый аргумент 'node' а не 'user'.

Аватар пользователя karbunkul karbunkul 30 января 2012 в 13:46

$video = field_get_items('node', $node, 'field_video');
$current = field_view_value('node', $node, 'field_video', $video[0]);

print render($current); // вот так получим указанный элемент, в конкретном случае это первый линк на видео. Чтоб остальные получить надо кинуть это в цикл один фиг. Спасибо за подсказки Ch. Но на этом форуме явно делать нефиг. К Ch это не относиться.

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 30 января 2012 в 14:10

"karbunkul" wrote:
print render($current); // вот так получим указанный элемент, в конкретном случае это первый линк на видео. Чтоб остальные получить надо кинуть это в цикл один фиг. Спасибо за подсказки Ch. Но на этом форуме явно делать нефиг.

Я рад что вы решили начать с себя