РЕШЕНО! Как вывести в шаблоне ноды несколько значений одного поля через запятую?

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

Аватар пользователя iNFerNo iNFerNo 3 декабря 2012 в 20:44
<?php [field_artists] => Array
                        (
                            [
und] => Array
                                (
                                    [
0] => Array
                                        (
                                            [
value] => 1
                                        
)

                                    [

1] => Array
                                        (
                                            [
value] => 2
                                        
)

                                )

?>

Комментарии

Аватар пользователя alexsaab alexsaab 3 декабря 2012 в 21:00

Привет,

Самое простое циклом foreach. Только я как понимаю у вас в поле field_artists хранятся быстрее всего ссылки на термины таксономии или ноды. Чтобы докопаться до названия артиста вам нужно будет вытаскивать их функцией taxonomy_term_load.

А так примерно так:

$ar = $field_artists['und'];
foreach ($ar as $item) {
     print  $item['value'].", ";
}

С ув., Алексей

Аватар пользователя alexsaab alexsaab 3 декабря 2012 в 21:37

Вы видите что у вас:

[value] => 1
[value] => 2

?

Откуда же взяться артист 1, артист 2 ?

Я же сразу написал, что это скорее термины таксономии.

Загружайте их, потом выводите наименование.

У вас же не такие переменных хранятся:

[value] => 'артист 1'
[value] => 'артист 2'

С ув., Алексей

Аватар пользователя rimen rimen 4 декабря 2012 в 0:23

DRUPAL WAY/API

1. зауюзать http://api.drupal.org/api/drupal/modules%21field%21field.module/function...

2. Загрузить инфу по данному филду http://api.drupal.org/api/drupal/modules%21field%21field.module/function... (могу ошибаться, смотрим апи), выудить settings поля и по ключу (1,2..) сунуться в options для этого поля и получить значение (Артист 1, Артист 2..).

Аватар пользователя iNFerNo iNFerNo 4 декабря 2012 в 12:45

я скобку заметил, но все равно не хочет...

<?php 

$ar 

$field_artists['und'];
$a '';
$i 0;

$count count($field_artists['und']);

while (

$i<$count) {
     if(
$i+$count){
         
$a .= 'Артист'$ar[$i]['value'];
     }
     else {
         
$a .= 'Артист' $ar[$i]['value'] . ',';
         
$i +=1;
         }
}

print 

$a;

?>

Аватар пользователя rimen rimen 4 декабря 2012 в 13:41

$field_artists инициализируется?

<?php
 $field_artists 
$node->field_artists;
?>

вообще лучше, пожалуй, так

<?php
$artists 
= array();
foreach (
$node->field_artists[LANGUAGE_NONE] as $item){
  
$artists[] = 'Артист' $item['value'];
}

print 

implode(', '$artists);

?>
Аватар пользователя iNFerNo iNFerNo 4 декабря 2012 в 14:25

пожалуй так - что то совсем не то.

артист 1, артист 2 - это имена конкретные Вася, Петя, Маня

так что представление слова "Артист" - это совсем не то.

Аватар пользователя iNFerNo iNFerNo 4 декабря 2012 в 14:31

"rimen" wrote:
$field_artists инициализируется?
<?php
$field_artists = $node->field_artists;
?>

я добавил в ноду. ничего не вывелось. что значит инициализируется?

---

можно кончено каждой 0, 1, 2 .... 10 назначит те же самые имена, но хочется как то по нормальному вывести значения.

Аватар пользователя rimen rimen 4 декабря 2012 в 15:00

"пожалуй так" - это было предложение в ваши рассуждения с ХулиGUN, как бы сделал я, написал в 1-х комментах.

1)Форматер выводв в настройках отображения материала "по умолчанию" - при этом будут выводиться значения отмеченных опций
1|Вася
2|Петя

т.е. на выходе
Вася
Петя

2) в template.php реализуем hook_field

<?php
function THEMENAME_field__field_artists($variables){
  
$artists = array();  
  foreach (
$variables['items'] as $item) {
    
$artists[] = drupal_render($item);
  }
  return 
implode(', '$artists);
}
?>

3) сбрасываем кеш

Аватар пользователя iNFerNo iNFerNo 4 декабря 2012 в 16:08

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

1. со скрытого поля - установил по умолчанию
2. добавил в шаблон темы своей заменив THEMENAME на свою тему
3. сбросил кеш.

+ тот еще код остался ваш... в шаблоне ноды

<?php
$artists 
= array();
foreach (
$node->field_artists[LANGUAGE_NONE] as $item){
  
$artists[] = 'Артист' $item['value'];
}

print 

implode(', '$artists);

?>

результата нужно не добился.

Аватар пользователя rimen rimen 4 декабря 2012 в 16:14

проверь, выводится ли поле вообще - содержимое $content, например, через dpm (devel). если выводишь все поля руками, выведи и это

"iNFerNo" wrote:
+ тот еще код остался ваш... в шаблоне ноды

он уже не нужен ,я писал, что он относился к предложению Хулигана

Аватар пользователя iNFerNo iNFerNo 4 декабря 2012 в 16:30

Теперь до меня дошло почему не показывались поля . Их нужно из скрытых сделать по умолчанию... как минимум.

и выводить print render($content['field_artists']);

пи.эс. а если скрытное поле, но его вывести нужно все равно... есть возможность через node->field_artists ????

Аватар пользователя rimen rimen 4 декабря 2012 в 17:02

Есть, через field_view_field, например. Только не ясно, зачем, ты же все равно поля руками выводишь, ставь по умолчанию - нужные форматтеры сами отработают.

PS такие вещи (field_view_field )правильнее делать в hook_node_preprocess, логику не следует юзать в темплейтах

Аватар пользователя ArmRus ArmRus 4 декабря 2012 в 17:36

Все верно, можно использовать темизацию, view_field_view, field--field_name.tpl.php но если ты решил на кастоме сделать даю 2 подсказки)
1. template_preprocess_node() (или hook_preprocess_node() - если в модуле)
2. entity_metadata_wrapper()
Совмести их.

<?php
function MYTHEME_NAME_preprocess_node(&$variables){
  
$node $variables['node'];
  if(
$node->type 'НУЖНЫЙ ТИП НОДЫ'){
     
$wrapper entity_metadata_wrapper('node',$node);
    
/*** Дальше сам копай ***/
  
}
}
?>

---
http://drupal.org/node/1021556

Гугл в помощь, могу код настрочить, но я думаю ты потом спасибо скажешь))

Аватар пользователя iNFerNo iNFerNo 4 декабря 2012 в 22:30

так чото не работает в шаблоне ноды

<?phpforeach($node->taxonomy as $tid => $taxo)
      $taxo_links[] = l($taxo->name,"taxonomy/term/$taxo->tid", array('title' => $taxo->name));
    print implode(', ',$taxo_links);?>