DMultiplyListBehavior Виводимо список чекбоксів у Yii

Повинно вийти щось схоже на це:
При цьому вже вибрані пункти мають бути відзначені.
Для виведення списку чекбоксів клас CActiveForm містить метод checkBoxList() , який делегує виклик CHtml::activeCheckBoxList() :
Метод побудує чотири чекбокси, з яких перший та третій буде автоматично відзначений.
Для автоматичного будівництва масиву всіх елементів із масиву моделей можна використовувати метод CHtml::listData() :
Спочатку можна подумати, що досить зробити в моделі відношення $model->categories і використати попередній варіант.
Але це не спрацює, тому що в checkBoxList() потрібно передавати саме поле з масивом первинних ключів, а не масивом моделей із вибірки (з відношення).
Для вирішення проблеми можна додати додаткову властивість та формувати масив у геттері.
І працювати у формі із цим полем
Тепер нам необхідно з цього масиву скласти зв'язки. Можна або перевірити, які номери зменшилися і які з'явилися, щоб видалити зайві рядки з таблиці і додати нові. Простіше, звичайно, взагалі видалити всі старі зв'язки для цієї посади і по всьому списку створити нові:
Але є ризик за кілька століть переповнити індекс типу INT. Хоча у блозі це мало кому загрожує.
Можна піти далі і винести гетер і сетер у поведінку:
Тепер щоб додати властивість $model->categoriesArray в нашу модель просто налаштуємо і підключимо до моделі цю поведінку:
Ми можемо зчитувати цей масив для генерації списків і надавати введені користувачем значення:
Якщо боїтеся підключати купу поведінки відразу всередині самої моделі, то можете підключати цю поведінкудинамічно в контролері використовуючи метод attachBehavior().
Не пропускайте нові статті, бонуси та майстер-класи з Yii, Laravel та Symfony:
На багатьох нових сайтах все частіше зустрічається виведення списку новин або інших сутностей у вигляді стрічки, що нескінченно підвантажується. На деяких сайтах підвантаження виконується автоматично (на twitter.com або vk.com), на інших – вручну, тобто наприкінці списку замість стандартного перемикача сторінок є кнопка «Показати ще». Освіжимо у пам'яті роботу з ClistView та спробуємо реалізувати подібний функціонал на своєму сайті.
Одна з вічних тем, що раз у раз спливають у мережі та стосуються Yii Framework – це суперечка щодо використання у своїх проектах прямих SQL запитів за допомогою DAO з одного боку проти використання ActiveRecord з іншого. Адже при розростанні обсягів даних і зв'язків між ними у високонавантажених проектах багато розробників переходять від зручної об'єктної моделі ActiveRecord до низькорівневої роботи з прямими SQL запитами та з простими асоціативними масивами. Подивимося, як у деяких випадках можна розігнати вибірки ActiveRecord майже до швидкості DAO.
Велика ймовірність, що у новому чи старому проекті на Yii з'явиться необхідність виготовлення меню з іконками. Це може знадобитися і при верстка вже готового шаблону. Розглянемо кілька рішень та порівняємо їх між собою з погляду семантики та архітектурної чистоти.
Будь-який програміст з досвідом усвідомлює, що у невдало спроектованому важкому проекті спочатку або згодом накопичується багато некерованого та непотрібного сміття. Це, наприклад, код, що повторюється. В описі контролера офіційного керівництва Yii Framework зазначено, що Yii підтримує винесення дій в окремі класи та описується процедурапідключення цих дій до контролерів. Але мало хто користується цим способом, тому що не знаходить дійсно важких екшенів, що повторюються.