Перейти к содержимому


Фотография
- - - - -

Множественный checkbox в своём элементе


Лучший Ответ SmetDenis , 23 August 2016 - 08:46

Для этого в ключе должен быть сохранен массив.
 

$this->set('key', 'string');
$value = $this->get('key'); // вернет 'string'

$this->set('key', ['123', 123]);
$value = $this->get('key'); // вернет массив

$this->data(); // посмотреть все что хранит элемент
Чтобы там был массив нужно чтобы туда сохранился массив при сохранении материала. Перейти к сообщению


  • Закрытая тема Тема закрыта
Сообщений в теме: 7

#1 orlov_aleksander

orlov_aleksander

Отправлено 19 August 2016 - 16:32

Привет.

Подскажите как сделать поле checkbox в своём элементе множественным.

Я порылся в хэлпере но там не увидел данной реализации (либо что-то не понял).

Вот на всякий код хэлпера:

public function checkbox(
        $data,
        $name,
        $attribs = null,
        $selected = null,
        $idtag = false,
        $translate = false,
        $isLabelWrap = true
    )
    {
        if (empty($data)) {
            return null;
        }

        if ($idtag) {
            $attribs['id'] = $idtag;
        }

        $attribs = $this->_buildAttrs($attribs);

        return $this->_list('checkbox', $data, $name, $attribs, $selected, $idtag, $translate, $isLabelWrap);
    }

А это мой код: 

$this->app->jbhtml->checkbox($ydobstvaVNomere, $this->getControlName('level2'), null, $this->get('level2')).'

По факту так выглядит на сайте (при редактировании с фронтэнда) 

 (пункт удобства в номере)

13798786.png

 

а вот как выглядит после сохранения

13798785.png

 

Вот код вывода 

 <span> Удобства в номере: </span><span>'.$this->get('level2').'</span> 

Сохраняется только последний в списке сохранённый вариант.

Подскажите как сделать чтобы можно было сохранять сразу несколько вариантов.

 


Сообщение отредактировал orlov_aleksander: 19 August 2016 - 16:34

  • 0

#2 SmetDenis

SmetDenis

Отправлено 19 August 2016 - 17:27

В вашем случае нужно чтобы getControlName вернул name как для массива. Для этого у него вторым аргументом нужно отправить true.
Так же и выбранные значения $selected должны передаваться массивом ключей из массива $data. На сколько понял, сейчас передается строка.

Альтернативный вариант - это посмотреть оригинальный элемент из ZOO media\zoo\elements\checkbox\
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#3 orlov_aleksander

orlov_aleksander

Отправлено 20 August 2016 - 11:27

Так же и выбранные значения $selected должны передаваться массивом ключей из массива $data. На сколько понял, сейчас передается строка

 

А можете подробнее про этот пункт?

Весь день мучаюсь.

Уже каждый файл буквально перекопал. никак не могу понять как правильно реализовать...


  • 0

#4 SmetDenis

SmetDenis

Отправлено 22 August 2016 - 08:05

Я имел ввиду это


$data = [
    'key-1' => 'Опция 1',
    'key-2' => 'Опция 2',
    'key-3' => 'Опция 3',
];

$selected = ['key-2', 'key-3'];

$this->app->jbhtml->checkbox($data, $this->getControlName('level2'), null, $selected);

Думаю сейчас $this->get('level2') ворачивает у вас строку а не массив ключей из $data.
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#5 orlov_aleksander

orlov_aleksander

Отправлено 23 August 2016 - 08:41

Так а есть какой-то метод как я могу получить все отмеченные значения массивом?


  • 0

#6 SmetDenis

SmetDenis

Отправлено 23 August 2016 - 08:46   Лучший Ответ

Для этого в ключе должен быть сохранен массив.
 
$this->set('key', 'string');
$value = $this->get('key'); // вернет 'string'

$this->set('key', ['123', 123]);
$value = $this->get('key'); // вернет массив

$this->data(); // посмотреть все что хранит элемент
Чтобы там был массив нужно чтобы туда сохранился массив при сохранении материала.
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#7 orlov_aleksander

orlov_aleksander

Отправлено 23 August 2016 - 08:53

Огромное спасибо!

Думаю теперь точно разберусь.


  • 0

#8 SmetDenis

SmetDenis

Отправлено 23 August 2016 - 08:55

Хорошо.
Если появятся еще вопросы по radio, то можете открыть тему.

Для новых вопросов создавайте новые темы.
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.





Click to return to top of page in style!