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

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

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

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

Лучший ответ

Аватар пользователя RusBel RusBel 6 мая 2017 в 16:49
.product_display_indications .field-item {
  display: inline;
}

.product_display_indications .field-item:after {
  content: ',';
  padding-right: .5em;
}

.product_display_indications .field-item:last-child:after {
  content: none;
}

Комментарии

Аватар пользователя 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 в 18:43

Странное поле у Вас какое-то.
Вам циклы подучить нужно.
Но при этом, логику правильно выносить в препроцессор, а не применять в шаблоне.

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

Да вроде и не странное (см. файл).

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

Аватар пользователя 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 6 мая 2017 в 16:49
.product_display_indications .field-item {
  display: inline;
}

.product_display_indications .field-item:after {
  content: ',';
  padding-right: .5em;
}

.product_display_indications .field-item:last-child:after {
  content: none;
}

Аватар пользователя 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;
}

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

Аватар пользователя bumble bumble 6 мая 2017 в 0:46

bumble wrote:

:last-child

Работает только для одинаковых элементов. Т.е. если Вы прописываете псевдокласс :last-child для вложенного элемента - он не сработает.

Аватар пользователя 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. Строковые операторы
Аватар пользователя bumble bumble 6 мая 2017 в 14:49
1

Тогда уже так:

.product_display_indications .field-item {
  display: inline;
}

.product_display_indications .field-item:after {
  content: ',';
  padding-right: .5em;
}

.product_display_indications .field-item:last-child:after {
  content: none;
}

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

Огромное спасибо что повозились со мной! Всё работает как надо!!!! Оказывается тут и без тега <a> можно было обойтись в CSS.