1. Главная
  2. Форумы
  3. Техподдержка Drupal
  4. Решение проблем

Вывод значений массива через запятую

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

Темизирую страницу. использую для вывода значений поля render($content['field_indications']). Но эти значения(слова) выводятся в строку слитно. Как сделать, чтобы значения массива выводились через запятую?
Путь к значениям массива:
$content['field_indications'][0]
$content['field_indications'][1]
$content['field_indications'][2]
и т.д.

Лучший ответ

Комментарии

Аватар пользователя RusBel RusBel 5 мая 2017 в 17:04

Совет то правильный. Я про эту ф-цию уже узнал. Вот только начинающему сложно кодить. Если не сложно, распишите подробно весь код. Там всего несколько строчек. На этом примере и разберусь.

Аватар пользователя fairrandir fairrandir 5 мая 2017 в 17:23
<?php
$result
= implode(', ' , $content['field_indications']);
?>

Это если конечно значения действительно лежат по простым ключам, и внутри $content['field_indications'][0] не массивы.

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

Аватар пользователя RusBel RusBel 5 мая 2017 в 18:29

Ошибка: Recoverable fatal error: Object of class stdClass could not be converted to string в функции include() (строка 163 в файле
Если быть точным, то значение лежит в: $content['field_indications'][0]['#title']

Я знаю, что разделитель можно ставить во views, а в настройках ноды не знаю такого.

Аватар пользователя bumble bumble 5 мая 2017 в 19:27

Теперь совсем не понятно чего Вы пытаетесь добиться.
Можете, хоть приблизительный макет нарисовать? Или в деталях расписать необходимый результат?

Вполне вероятно, у Вас подход не правильный.

Аватар пользователя RusBel RusBel 5 мая 2017 в 19:33

Я темизирую карточку товара Drupal Commerce. Это нода типа product_display. Сначала я достаточно легко темизировал эту карточку товара при помощи views(сделал представление страницы, указал какой адрес перекрывать: node/%). Вот только вьюс стал перекрывать ноды всех типов, а не только типа product_display, хотя в настройках представление я выставил фильтр по определенному типу. В итоге мне посоветовали темизировать карточку товара файлом node--product-display.tpl.php. Вот этим сейчас и занимаюсь...

Аватар пользователя bumble bumble 5 мая 2017 в 19:35

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

Тут, на самом деле, не нужно править шаблоны. Достаточно настроить отображение в стилях.
Можно использовать инлайновое отображение (или инлайн-блок), а запятые проставить псевдоэлементами.

В другом случае - нужно писать свою функцию темизации (форматтер поля).

Аватар пользователя RusBel RusBel 5 мая 2017 в 19:55

Ни первый, ни второй делать толком не умею. Может с первым вариантом подсобите!? Я примерно понимаю, что такое псевдоэлементы в css, но не знаю как с их помощью решить мою задачу.

Аватар пользователя RusBel RusBel 5 мая 2017 в 23:59

Большое спасибо! Я ещё оказывается и CSS плохо знаю))) Запятые появились, вот только и после последнего элемента запятая ставиться, не смотря на условие. Буду разбираться...

Аватар пользователя RusBel RusBel 6 мая 2017 в 11:43

Так проблема еще до конца не решена(я про последнюю запятую).
Вот, уже методом научного тыка, подбираю:

<div class="product_display_indications">
<h2>Показания: </h2>
<div class="field field-name-field-indications field-type-taxonomy-term-reference field-label-hidden">
<div class="field-items">
<div class="field-item even">
<a href="#">бронхит</a>
</div>
<div class="field-item odd">
<a href="#">трахеит</a>
</div>
<div class="field-item even">
<a href="#">коклюш</a>
</div>
<div class="field-item odd">
<a href="#">бронхиальная астма</a>
</div>
</div>
</div>
</div>

Стили:

.product_display_indications{
display: inline-block;
}
.product_display_indications a:after {
content: ',';
padding-right: .5em;
}
.product_display_indications:last-of-type a:after {
content: none;
}

Может подскажите, как эту последнюю запятую одолеть (убрать). Уже нервов не хватает...Бьюсь который час с одной несчастной запятой))

Аватар пользователя RusBel RusBel 6 мая 2017 в 14:22

Спасибо, заработало!!! Вот только ошибочка выскакивает:
Notice: Undefined index: atributes в функции mybootstrap_subtheme_field__field_indications__product_display() (строка 91 в файле C:\........\template.php).

Ругается на эту строку:
$output = '

' . $output . '

';

Что тут не так, не пойму?

Аватар пользователя BatKor BatKor 6 мая 2017 в 14:44
1

RusBel wrote:

Так проблема еще до конца не решена(я про последнюю запятую).

Вот, уже методом научного тыка, подбираю:

Решение на основе CSS

.product_display_indications{
display: inline-block;
}
.field-items a:after {
content: ',';
padding-right: .5em;
}

.field-items .field-item:last-child a:after {
content: '';
}

Ссылка на codepen

RusBel wrote:

Ругается на эту строку:
$output = '' . $output . '';

Пожалуйст, постарайтесь самому разобраться. Пожайлуйста!
Ресурсы необходимые к обязательному прочтению

  1. Строки PHP
  2. Строковые операторы
Логотип drupal.ru

Содержимое сайта публикуется на условиях CreativeCommons Attribution-ShareAlike 3.0 или более поздней версии. Программные коды в тексте статей — на условиях GNU GPL v2 или более поздней версии.

Документация по совместной работе с репозиторием drupal.ru – https://docs.drupal.ru/code

Drupal – торговая марка Дриса Бёйтарта

12+

AltStyle によって変換されたページ (->オリジナル) /