Как работать с display для Double Field?

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

Аватар пользователя lpb lpb 21 октября 2013 в 18:05

Добрый день!

Использую Double Field. Для целых (хотя это не важно) first и second определены suffix и pfefix для каждого. Они отличаются от ": ", определенного в качестве суффикса для first, по умолчанию. Причем я уже определили их и в "управлении полями" и в "управлении отображенем".
В неком скрипте, вызываемом из под drush scr вывожу значения first и second следующим образом:

$value = field_view_value('node', $node, $name, $item, $display = array());
print $value['#item']['first'].$value['#item']['second'];

Казалось бы должен получить что-то вроде:

"prefix_of_value_first"."value_first"."suffix_of_value_first"."prefix_of_value_second"."value_second"."suffix_of_value_second"

но реально получаю:

""."value_first".": ".""."value_second".""

Т.е. значения суффикса и префикса как будто мной НИГДЕ и не переопределялись. Однако на странице ноды строчка, содержащая двойные поля выводится именно так как я ее определил. Я понимаю, что это либо бага, либо фича связанная с тем, что надо бы мне было display правильный указать. Но вот дальше прочитав Field API я что-то не разобрался что именно там указывать, если надо вывести допустим так как на странице ноды. Это первый вопрос. А втрой как бы все таки определить нужный display и вывести эти значения без обертки div-ами и всяким другим html-ем, который мне вовсе не нужен, а нужны просто правильные мной определенные суффиксы и префиксы.

Не знаю плнятно ли изложил суть проблемы. Буду рад вашему овету.
Спасибо

Комментарии

Аватар пользователя Ch Ch 21 октября 2013 в 19:09

"lpb" wrote:
прочитав Field API я что-то не разобрался что именно там указывать

Название дисплея. Например, 'full' или 'teaser'.

Аватар пользователя lpb lpb 21 октября 2013 в 19:30

Ну дык если бы что-то менялось когда я указывал эти магические 'full' или 'teaser' то я бы разобрался поди и не спрашивал. А то не меняется ничего от этого...
Как быть ...

Аватар пользователя Ch Ch 21 октября 2013 в 20:40

"lpb" wrote:
Как быть ...

Выводить поле так как это принято в друпал...
render($value);

Хотя $value['#item']['first'].$value['#item']['second']; тоже должно выводить префиксы и суффиксы.

Аватар пользователя lpb lpb 22 октября 2013 в 11:13

Жалко что мы каждый освоем .... Smile

Quote:
Выводить поле так как это принято в друпал...
render($value);

Я писал в моем исходном посте, что рендер меня не устраивает т. к. оборачивает значения, которые мне нужны в html. А мне как раз этого не требуется.
Один из моих вопросов, давайте переформулирую: "Как заставить рендер не оборачивать поля в html?"
Quote:
Хотя $value['#item']['first'].$value['#item']['second']; тоже должно выводить префиксы и суффиксы.

И здесь вы правы. Именно то, что данная конструкция выводит префикс и суффикс меня и не устраивает.
Еще раз повторяю, что префикс и суфикс выводятся, но только не те, что я установил. А те что были умолчальные когда-то. Прежде всего меня бы устроило если бы выводились конкретно те, что я поставил. Если нет - то никакие.
Жалко, что никто не знает?...

Аватар пользователя Ch Ch 22 октября 2013 в 13:32

> Как заставить рендер не оборачивать поля в html?
Обычно это делают с помощью темизации. Переопределите соответствующю theme функцию и выводите любую разметку.

> префикс и суфикс выводятся, но только не те, что я установил
Должны выводится те что заданые в настройках вывода. Если выводятся значения по умолчанию, значит у вас не верно задан display mode.

Аватар пользователя lpb lpb 22 октября 2013 в 15:51

А я все таки не сдаюсь в надежде получить дельный совет от сообщества и часть его у меня уже есть:

>Должны выводится те что заданые в настройках вывода. Если выводятся значения по умолчанию, значит у вас не верно задан display mode.

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

Так вот не могли бы вы любезно расказать как это сделать. Буквально обрисовать структуру данных $display, что передается той самой ф-ции field_view_value как четвертый необязательный аргумент?

Аватар пользователя Ch Ch 22 октября 2013 в 16:13

"lpb" wrote:
что передается той самой ф-ции field_view_value как четвертый необязательный аргумент?

Я вам в первом комментарии это уже писал. Если у вас это не работает, значит где то ошибка в коде. Смотрите внимательно, либо показывайте код.

Аватар пользователя lpb lpb 22 октября 2013 в 16:45

Решено. Оказалось было не понимание структуры $display. Ну собственно я об этом и спрашивал. Читая api.drupal.org в частности описане field_view_value по вопросам $displey тебя адресуют к field_view_field. OK, там однозначно складвается понимание того что это array и никак не может быть чем то еще. Появляется желание указывать $displey как $displey = array('type' => teser,) или что-то в этом роде. В общем это желание нужно подавить. И указать то что-то типа $display = 'teser'. На понимание того как он $displey может быть устроен сложнее, можно забить, а можно отложить это на потом. Но не в коем случае не спрашивайте об этом Ch. Он либо не хочет говорить, либо одно из двух ....
Всем пока!

Аватар пользователя Ch Ch 22 октября 2013 в 18:34

"lpb" wrote:
это array и никак не может быть чем то еще

В документации враньё значит?
"api.drupal.org" wrote:
Can be either the name of a view mode

Почему тогда этот код у меня работает? Значение поля выводится в соответствии с настройками тизера, заданными через админку.
$field_value = field_view_value('node', $node, $field_name, $items[0], 'teaser');

Аватар пользователя lpb lpb 22 октября 2013 в 18:48

Да у меня тоже работает. И я теперь счастлив. Потому что получил то, что хотел. Но из документации я думал, что это array. Может что то не так понял. Грепнул как другие модули вызывают сие функциё и прозрел. А то что вы мне говорили я не понимал потому как не понимал. Но в документации написано что если скормить туда $displey = array( 'label' => 'inline'), то будем так же получать лейблы. Это не так. Во всяком случае для field_view_value. Правда в описании vield_view_value про $display очень мало букв, но есть отсылка к vield_view_field. А там уже понаписано всего. Теперья так понимаю, что отсылка не верна и это разные $display. С этим разберусь потом.

Аватар пользователя lpb lpb 22 октября 2013 в 19:34

А вот для полного счастья как создать свой $display, кромя тех что предлагают. И как посмотреть какие $display ужо есть прграммно?

Аватар пользователя Ch Ch 22 октября 2013 в 19:50

Quote:
И как посмотреть какие $display

Все дисплеи видны на вкладке "Управление отображением" в настройках сущности. См. "Расширенные параметры отображения".
Текущие настройки дисплея можно получить с помощью field_info_instance()

Аватар пользователя lpb lpb 22 октября 2013 в 20:07

>Все дисплеи видны на вкладке "Управление отображением" в настройках сущности. См. "Расширенные параметры отображения".

Ды это понятно.
А как создать одну дополнительную дисплей? Мне нужно. Или это набор фиксирован навсегда?

Аватар пользователя Ch Ch 22 октября 2013 в 19:49

field_view_value() это просто обёртка вокруг field_view_field(). Поэтому и параметры у них одинаковые. Заголовка нет потому, эта функция возвращает содержимое только одного элемента поля. Если посмотрите её исходник (всего с десяток строчек), то поймете как вывести этот элемент вместе с заголовком.