lowbase / yii2-cms

Other
44 stars 19 forks source link

lowBase - низкоуровневая Yii2 CMS для программистов

lowBase - низкоуровневая CMS, включающая в себя готовую универсальную систему администрирования сайта и Yii2 основу для самостоятельной разработки клиентского приложения. По организации контента похожа на CMS ModX

Составлена на основе независимых модулей:

Модуль пользователей

Модуль документов

Каждый из модулей может быть заменен в CMS на собственный. Взаимодействия друг с другом минимальны.

Демо панели администрирования

Сайт-источник

Доступ к админ. панели по адресу /admin

Пример: Добавлене товара

Установка lowBase

Основы проектирования сайта на lowBase

Разработка сайта ведется по принципу "Программирование от содержимого". Т.е. создаем структуру на основе документов в панели администрирования, а затем переходим к Frontend части, делая самостоятельно вывод и пользовательский ввод, используя готовые модели. Либо производим эти действия параллельно: программист или верстальщик занимается пользовательским интерфейсом, а контент-менеджеры заполняют содержимое документов.

Документ - универсальная сущность. Основа всего содержания

Документ - это:

Дополнительные поля

К каждому документу с помощью шаблона можно прикрепить дополнительные поля (различных типов). Допускаются мультизначения дополнительных полей с заданием минимального и максимального количества возможных значений. Например:

Как работать с CMS lowBase

В административной части формируется структура сайта на основе документов (меню, разделы, категории, статьи, различные списки) в древовидной иерархии.

Основные модели, с которыми придется взаимодействовать в клиентской части сайта: пользователи app/models/User и документыapp/models/Document через контроллеры app/contollers/UserController и app/controllers/DocumentController, которые являются пустыми заготовками, унаследованные от соответствующих классов модулей системы.

Как альтернативный вариант можно создать модульную структуру, унаследовав ваши модули от соответствующих модулей \lowbase\document\Module и \lowbase\user\Module. Возможности модулей и вызов виджетов смотрите в документации модулей.

Работа с документами и с дополнительными полями

Значения дополнительных полей документа хранятся в массиве $document->fields

После получения самого документа массив не заполняется:

$document = app\models\Document::findOne($id);
print_r($document->fields);     //Array() - массив пуст

Для заполнения дополнительных полей документа используйте метод fillFields()

$document = app\models\Document::findOne($id);
$document->fillFields();
print_r($document->fields);     //Array([1] => ['name' => 'Теги', 'type' => 4, 'param' => '', 'min' => 0, 'max' => 2, 'data' => [[1] => ['value' => 'Тег_1', 'position' => ''], [2] => ...]], [2] => ...)

    /**
     * Значения дополнительных полей
     * Массив имеет следующую структуру:
     *
     * [$field_id] => [
     *                  'name' => 'Название дополнительного поля',
     *                  'type' => 'Тип дополнительного поля',
     *                  'param' => 'Параметр дополнительного поля',
     *                  'min' => 'Минимум значений',
     *                  'max' => 'Максимум значений',
     *                  'data' => [ $data_id => [
     *                                            'value' => 'Значение дополнительного поля'
     *                                            'position' => 'Позиция дополнительного поля'
     *                                             ],
     *                                           ...
     *                          ]
     *              ],
     * ...
     *
     * $field_id - ID дополнительного поля из БД, $data_id - ID записи значения дополнительного поля из БД
     * Если необходимо прикрепить новое значение 'data' к документу, то в качестве ключа используем 'new_'.$i, где
     * $i - идентификатор нового значения
     */

После сохранения документа

$document->save();

значения дополнительных полей будут сохранены в соответствующие таблицы.

Можно также получить значения дополнительных полей запросами к соответствующим таблицам (в зависимости от типа поля) БД напрямую

$data_values = \lowbase\document\models\ValueString::find()->where(['field_id' => $field_id, 'document_id' => $document_id])->all() // Получение значений дополнительного поля $field_id строкового типа
$data_values = \lowbase\document\models\ValueNumeric::find()->where(['field_id' => $field_id, 'document_id' => $document_id])->all() // Получение значений дополнительного поля $field_id числового типа
$data_values = \lowbase\document\models\ValueText::find()->where(['field_id' => $field_id, 'document_id' => $document_id])->all() // Получение значений дополнительного поля $field_id типа Текст
$data_values = \lowbase\document\models\ValueDate::find()->where(['field_id' => $field_id, 'document_id' => $document_id])->all() // Получение значений дополнительного поля $field_id типа Дата