Вывод данных из базы - 2.х

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО
#1 10 февраля 2016 в 09:08
Для icms2

Данные из базы в шаблон можно вывести такой конструкцией: $item['title']

Вопрос в следующем, как вывести в шаблон значения, если они записаны в таком виде:


---

title: 'bla bla bla'
description: bla bla bla

title: BLA BLA BLA
description: bla bla bla

title: >
bla bla bla
bla!!!
description: bla bla bla


По идеи должно быть что то вроде такого:

  1.  
  2. <?php $myitems = $item['myitems']; ?>
  3.  
  4. <ul>
  5. <?php foreach($myitems as $itemo){ ?>
  6. <li>
  7. <p><?php echo html($itemo['title']);?></p>
  8. <p><?php echo html($itemo['description']);?></p>
  9. </li>
  10. <?php }?>
  11. </ul>
  12.  
Но так не работает…

Переменная $myitems принимает данные из базы,
echo $myitems; — выводит содержимое…

Понимаю что не правильна указана эта конструкция
$itemo['title'];

Изменял ее как угодно методом научного тыка, но безрезультатно)

Как правильно?… пока иду гуглить, может встретится что то подобное)
#2 10 февраля 2016 в 09:17
$item['myitems']; У вас точно массив???? или одно значение?

  1. print_r($item['myitems']);
А то массива нет и данные не выводятся
#3 10 февраля 2016 в 09:29

У вас точно массив???? или одно значение?

kirkr

До записи в базу точно массив) а то что в базе получается — не знаю)

Должен быть по идее массив, но при выводе через echo/print_r выводит все в одну строку…
#4 10 февраля 2016 в 09:38
Немного поясню что делаю:

Есть массив $item['myitems'] который отлично выводится конструкцией:


  1.  
  2. <?php $myitems = $item['myitems']; ?>
  3.  
  4. <ul>
  5. <?php foreach($myitems as $itemo){ ?>
  6. <li>
  7. <p><?php echo html($itemo['title']);?></p>
  8. <p><?php echo html($itemo['description']);?></p>
  9. </li>
  10. <?php }?>
  11. </ul>
  12.  
Записываем этот массив в базу: $this->model->addItem($item)

… тут же помимо массива записываются и другие переменные $item['myvar']

Вот все что не массив $item['myvar'] — выводится без проблем)

А то что было массивом до записи (не знаю чем стало) $item['myitems'] — само значение выводится, а так ка до записи в базу, что бы все по отдельности не хочет.

Начинаю понимать что массив после записи становится не массивом…

В общем нужны любые идеи и предложения...
#5 10 февраля 2016 в 09:41
Что бы массив остался массивом, его нужно как то специально записывать?
Тип поля в базе?
#6 10 февраля 2016 в 09:42
reload, если известно какое поле нужно вывести таким образом, то достаточно вывести так
  1. $item['myvar'] = cmsModel::yamlToArray($item['myvar']);
#7 10 февраля 2016 в 10:14
Loadырь, спасибо! получилось!)
#8 10 февраля 2016 в 10:52
И последний вопрос:

Как в шаблоне контроллера проверить есть переменная в базе или нет?

Простая проверка по типу if (empty($var)) {
не катит, так как эта переменная в шаблоне есть всегда, но в базе ее может не быть)

Типа если в базе НЕТ значения, то выводим значение, которое задано заранее, если есть в базе, то выводим значение из базы…
#9 10 февраля 2016 в 11:23
  1. $var = isset($var_in_bd) ? $var_in_bd : $var_default;
smile
#10 10 февраля 2016 в 11:54
Loadырь, на данный момент у меня одна переменная $var_in
И она должна принимать значение по умолчанию например "555", но если в базе есть свое значение для этой переменнй, то выводить то что записано в базе)

То есть нет у меня $var_in_bd и $var_default — есть только $var_in которая изначальна равна "555"


В общем фишка в том, что тот массив, который нужно выводить,

до записи в базу выводится так: $item['myvar']

а если выводить из базы (как уже определили), так: cmsModel::yamlToArray($item['myvar'])


Пока массив не записан в базу, этим $item['myvar'] выводится, а этим cmsModel::yamlToArray($item['myvar']) не выводится)

А если уже берем "массив" из базы, то наоборот этим cmsModel::yamlToArray($item['myvar']) выводится, а этим $item['myvar']нет)

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

Вот из-за этого появилась необходимость проверки.

По умолчанию в шаблоне контролера выводим $item['myvar'], но если в базе есть запись то заменять на cmsModel::yamlToArray($item['myvar'])
#11 10 февраля 2016 в 11:58
Получается что $item['myvar'] существует всегда, но не всегда есть в базе!)

Если в базе есть, то нужно выводить немного иначе…
#12 10 февраля 2016 в 12:08
  1.  
  2. $my_var = cmsModel::yamlToArray($item['myvar']);
  3. $my_var = !empty($my_var) ? $my_var : 555;
  4.  
#13 10 февраля 2016 в 12:15

нет у меня $var_in_bd и $var_default

reload
ни у кого их нет. это так, для примера.
В БД все массивы сохраняются в виде строки, иначе никак. Ваша задача получить значение этой ячейки из БД, преобразовать из строки в массив и присвоить её значение вашей переменной. А дальше посмотреть что есть в этой переменной. и действовать исходя из результата.
как то так
  1. $var_default = '555';
  2. $var_in_bd = cmsModel::yamlToArray($item['myvar']);
  3. $var = $var_in_bd ? $var_in_bd : $var_default;
  4. echo $var
  5. // или сокращённо
  6. $var_in_bd = cmsModel::yamlToArray($item['myvar']);
  7. echo $var_in_bd ? $var_in_bd : '555';
#14 10 февраля 2016 в 12:23
Pasha, Loadырь, СПАСИБО!

потер… тупанул)

Все пашет! Еще раз спасибо!
#15 10 февраля 2016 в 12:32
Решено!
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.