Drupal 7 получает тизер с field_view_value () - PullRequest
4 голосов
/ 31 августа 2011

У меня есть скрипт-обработчик Ajax, в который я загружаю $nodeId и выводю результат в представлении по умолчанию (полном):

$node = node_load($input);
$prerendered_node = node_view( $node, 'default' );
...

Теперь мне нужно также отобразить тизер (суммарный или усеченный).

Я пробовал это до сих пор, но безуспешно (резюме заполнено содержанием):

1.
$item = $node->body['en'][0];
$output = field_view_value('node', $node, 'body', $item, 'Teaser');
echo $output; (blank)

2. echo $node->body['eng']['0']['summary']; (blank)

Решение из этого вопроса, но не работающего:

3. $output = truncate_utf8(strip_tags($node->body['eng']['0']['summary']),200,true,true);
echo $output; (blank)

Любопытно, что var_dump($node->body['eng']['0']) отображает и массив, содержащий value (тела), summary, clean_summary и другие элементы, и summary имеет необходимое заполненное значение.Но, как в примере 2, я не могу получить к нему прямой доступ, он отображается пустым.

Советы, пожалуйста?

Спасибо.

Ответы [ 2 ]

10 голосов
/ 07 марта 2012

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

$node = node_load($nid);
$body = field_get_items('node', $node, 'body');
$teaser = field_view_value('node', $node, 'body', $body[0],'teaser');

Чтобы вывести значение $ teaser, вам нужно передать его в функцию render ()

print render($teaser);

JC

5 голосов
/ 31 августа 2011

Я предполагаю, что это многоязычный сайт, иначе вы, вероятно, найдете то, что искали в $node->body['und'][0] (т.е. und, неопределенный код языка)?

Ваше первое решение должно работать, только вы использовали Teaser вместо teaser, я уверен, что режим просмотра чувствителен к регистру. Также у вас есть $node->body['en'][0] (код языка en), в то время как вы использовали код языка eng во всех других примерах ... может ли это быть проблемой?

Ваше второе решение просто должно было бы работать, если бы $node->body['eng']['0']['summary'] не было пустым, поэтому я бы еще раз проверил, что ваш var_dump() дает точные результаты (вы проверяете вывод var_dump() сразу после того, как вы позвоните $node = node_load($input); например, чтобы это было честным испытанием).

Аналогично, если ваше третье решение выводит пустую строку, это означает, что $node->body['eng']['0']['summary'] абсолютно должен быть пустым.

Я бы настоятельно рекомендовал установить модуль devel и использовать функцию dpm() для печати хорошо отформатированного иерархического представления объектов / массивов для проверки. Если вы не можете этого сделать, у Drupal 7 есть функция debug(), которая делает нечто подобное. Вывод обеих этих функций печатается в стандартном пространстве сообщений Drupal.

Надеюсь, это поможет!

...