<?php [field_artists] => Array
(
[und] => Array
(
[0] => Array
(
[value] => 1
)
[
1] => Array
(
[value] => 2
)
)
?>
Комментарии
Привет,
Самое простое циклом foreach. Только я как понимаю у вас в поле field_artists хранятся быстрее всего ссылки на термины таксономии или ноды. Чтобы докопаться до названия артиста вам нужно будет вытаскивать их функцией taxonomy_term_load.
А так примерно так:
foreach ($ar as $item) {
print $item['value'].", ";
}
С ув., Алексей
нет в данном случае это текстовое поля...
1 | артист 1
2 | артист 2
у вас выводит
1,2,
а должно
артист 1, артист 2
Вы видите что у вас:
[value] => 1
[value] => 2
?
Откуда же взяться артист 1, артист 2 ?
Я же сразу написал, что это скорее термины таксономии.
Загружайте их, потом выводите наименование.
У вас же не такие переменных хранятся:
[value] => 'артист 1'
[value] => 'артист 2'
С ув., Алексей
хранятся не такие а вьюха и по дефолту выводятся такие...
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..).
Перечитываю и понимаю, что похоже правильнее использовать темизацию, однако от контекста задачи зависит -
http://api.drupal.org/api/drupal/modules%21field%21field.module/function...
Твой код белый экран практически выдает....
пока тоже самый эффект. не хочет белая страница уходить и строится... страница.
я скобку заметил, но все равно не хочет...
<?php
$ar
= $field_artists['und'];$a = '';
$i = 0; $count = count($field_artists['und']);
while (
$i<$count) {if($i+1 = $count){
$a .= 'Артист'. $ar[$i]['value'];
}
else {
$a .= 'Артист' . $ar[$i]['value'] . ',';
$i +=1;
}
}
print
$a; ?>$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); ?>пожалуй так - что то совсем не то.
артист 1, артист 2 - это имена конкретные Вася, Петя, Маня
так что представление слова "Артист" - это совсем не то.
я добавил в ноду. ничего не вывелось. что значит инициализируется?
---
можно кончено каждой 0, 1, 2 .... 10 назначит те же самые имена, но хочется как то по нормальному вывести значения.
"пожалуй так" - это было предложение в ваши рассуждения с Хули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) сбрасываем кеш
нода у меня кастомная - то есть в шаблоне я по своему вывожу поля и как они в отображение выбраны... не знаю влияют ли... на что нибудь.
1. со скрытого поля - установил по умолчанию
2. добавил в шаблон темы своей заменив THEMENAME на свою тему
3. сбросил кеш.
+ тот еще код остался ваш... в шаблоне ноды
<?php
$artists = array();
foreach ($node->field_artists[LANGUAGE_NONE] as $item){
$artists[] = 'Артист' . $item['value'];
}
print
implode(', ', $artists); ?>результата нужно не добился.
проверь, выводится ли поле вообще - содержимое $content, например, через dpm (devel). если выводишь все поля руками, выведи и это
он уже не нужен ,я писал, что он относился к предложению Хулигана
Спасибо огромное.
Теперь до меня дошло почему не показывались поля . Их нужно из скрытых сделать по умолчанию... как минимум.
и выводить print render($content['field_artists']);
пи.эс. а если скрытное поле, но его вывести нужно все равно... есть возможность через node->field_artists ????
Есть, через field_view_field, например. Только не ясно, зачем, ты же все равно поля руками выводишь, ставь по умолчанию - нужные форматтеры сами отработают.
PS такие вещи (field_view_field )правильнее делать в hook_node_preprocess, логику не следует юзать в темплейтах
Все верно, можно использовать темизацию, 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
Гугл в помощь, могу код настрочить, но я думаю ты потом спасибо скажешь))
Ребят, а если для терминов так же сделать, через запятую...
так чото не работает в шаблоне ноды
<?phpforeach($node->taxonomy as $tid => $taxo)
$taxo_links[] = l($taxo->name,"taxonomy/term/$taxo->tid", array('title' => $taxo->name));
print implode(', ',$taxo_links);?>
да, термны цепляются через поле