o-log / php-crud
CRUD tables + forms
Installs: 1 839
Dependents: 3
Suggesters: 0
Security: 0
Stars: 9
Watchers: 3
Forks: 2
Open Issues: 2
Language:CSS
Requires
- php: >=7.2
- ext-mbstring: *
- o-log/php-bt: 9.*
- o-log/php-model: 10.*
Requires (Dev)
- o-log/php-router: 2.*
- phpunit/phpunit: 4.8.*
- dev-master
- 9.17
- 9.16
- 9.15
- 9.14
- 9.13
- 9.12
- 9.11
- 9.10
- 9.9
- 9.8
- 9.7
- 9.6
- 9.5
- 9.4
- 9.3
- 9.2
- 9.1
- 9.0
- 8.0
- 7.12
- 7.11
- 7.10
- 7.9
- 7.8
- 7.7
- 7.6
- 7.5
- 7.4
- 7.3
- 7.2
- 7.1
- 7.0
- 6.0
- 5.5
- 5.4
- 5.3
- 5.2
- 5.1
- 5.0
- 4.46
- 4.45
- 4.44
- 4.43
- 4.42
- 4.41
- 4.40
- 4.39
- 4.38
- 4.37
- 4.36
- 4.35
- 4.34
- 4.33
- 4.32
- 4.31
- 4.30
- 4.29
- 4.28
- 4.27
- 4.26
- 4.25
- 4.24
- 4.23
- 4.22
- 4.21
- 4.20
- 4.19
- 4.18
- 4.17
- 4.16
- 4.15
- 4.14
- 4.13
- 4.12
- 4.11
- 4.10
- 4.9
- 4.8
- 4.7
- 4.6
- 4.5
- 4.4
- 4.3
- 4.2
- 4.1
- 4.0
- 3.42
- 3.41
- 3.40
- 3.39
- 3.38
- 3.37
- 3.36
- 3.35
- 3.34
- 3.33
- 3.32
- 3.31
- 3.30
- 3.29
- 3.28
- 3.27
- 3.26
- 3.25
- 3.24
- 3.23
- 3.22
- 3.21
- 3.20
- 3.19
- 3.18
- 3.17
- 3.16
- 3.15
- 3.14
- 3.13
- 3.12
- 3.11
- 3.10
- 3.9
- 3.8
- 3.7
- 3.6
- 3.5
- 3.4
- 3.3
- 3.2
- 3.1
- 3.0
- 2.16
- 2.15
- 2.14
- 2.13
- 2.12
- 2.11
- 2.10
- 2.9
- 2.8
- 2.7
- 2.6
- 2.5
- 2.4
- 2.3
- 2.2
- 2.1
- 2.0
- 1.1
- 1.0
- 0.5
- 0.4
- 0.3
- 0.2
- dev-feature/SBOR-438/date_range
- dev-paa_42
- dev-paa_41
- dev-paa_40
- dev-olog_table_editor
- dev-mk-fix
- dev-mk-table-filter-not-equal
- dev-mk-ref-select-widget
- dev-table-widget-html
- dev-t-params-by-default
- dev-t-fix-null
- dev-crud-form
- dev-table-options
- dev-timestamp-table-widget
- dev-mk-progress-bar-widget
This package is auto-updated.
Last update: 2025-01-18 03:37:37 UTC
README
Библиотека умеет делать две вещи: выводить список объектов и выводить форму редактирования одного объекта. При этом она генерирует не готовую страницу, а только html-код таблицы или формы. Выходной html-код совместим с twitter bootstrap.
Все остальное - проверка прав доступа, вывод таблицы или формы в нужное место страницы - нужно сделать отдельно. Для этого можно использовать готовые модули:
- php-auth: авторизация пользователей и проверка разрешений
- php-bt: содержит готовые шаблоны страниц
Объекты загружаются из БД через методы \OLOG\Model\InterfaceFactory, соответственно класс объекта должен реализовать этот интерфейс.
Объекты сохраняются в БД через методы \OLOG\Model\InterfaceSave, соответственно для редактирования класс объекта должен реализовать этот интерфейс.
Установка демо проекта
В папке, где мы хотим развернуть демо проект, выполняем в консоли следующие команды:
git clone https://github.com/o-log/php-crud.git
cd php-crud
composer update
После этого нужно создать пустую БД для проекта и указаты параметры доступа к ней в файле CRUDDemo/Config.php
Теперь создаем таблицы в БД, для этого выполняем скрипт миграции структуры БД:
php cli.php
Выбираем пункт 1, затем отвечаем на вопросы скрипта.
После создания таблиц запускаем локальный сервер и проверяем работу:
./run.sh
Открываем в браузере адрес localhost:8000
Подключение библиотеки к проекту
Включаем в composer.json проект такие строки:
"require" : {
"o-log/php-crud" : "dev-master"
}
Вывод списка объектов
Вот пример кода, который генерирует html таблицы объектов:
$html .= CRUDTable::html(
DemoNode::class,
\OLOG\CRUD\CRUDForm::html(
new DemoNode(),
[
new CRUDFormRow(
'Title',
new CRUDFormWidgetInput('title')
)
]
),
[
new CRUDTableColumn(
'Edit',
new CRUDTableWidgetText('{this->title}')
),
new CRUDTableColumn(
'Reverse title',
new CRUDTableWidgetText('{this->getReverseTitle()}')
),
new CRUDTableColumn(
'Edit',
new CRUDTableWidgetTextWithLink(
'{this->title}',
DemoNodeEditAction::getUrl('{this->id}')
)
),
new CRUDTableColumn(
'Weight',
new CRUDTableWidgetWeight(
[
'parent_id' => '{this->parent_id}'
]
)
),
new CRUDTableColumn(
'Delete',
new CRUDTableWidgetDelete()
),
],
[],
'title'
);
Вывод данных в таблице
При вызове виджета таблицы мы передаем ему строку: что выводить. В этой строке можно обращаться к поля и методам объекта, который выводится в текущей строке таблицы, а также к другим объектам.
Объект, для которого выводится текущая строка таблицы, доступен через ключевое слово this.
Примеры вывода полей и вызова методов текущего объекта:
new CRUDTableWidgetText('{this->title}')
new CRUDTableWidgetText('{this->getReverseTitle()}')
new CRUDTableWidgetHtml('{this->id}
{this->title}')
К другим объектам, на которые ссылается текущий, можно обратиться следующим образом:
new CRUDTableWidgetText('{DemoTerm.{this->term_id}->title}')
Здесь мы выводим название рубрики, связанной с новостью: создаем объект класса DemoTerm с идентификатором, который берем из поля term_id текущего объекта, и выводит его название.
На практике для указания имени класса вместо скаляра стоит использовать автоматические константы, поэтому окончательная запись будет выглядеть так:
new CRUDTableWidgetText('{' . DemoTerm::class . '.{this->term_id}->title}')
В виджете весов иногда необходимо учитывать дополнительные параметры по котороым вычисляются веса объектов в таблице. Для этого мы передаем массив контекстов
Например
new CRUDTableWidgetWeight([ 'parent_id' => '{this->parent_id}' ])
В этом случае при обработки изменения весов веса будут считаться для записей с parent_id таким же как и у текущего объекта
Вывод редактора объекта
Вот пример кода, который генерирует html редактора объекта:
$node_obj = DemoNode::factory($node_id);
$html .= \OLOG\CRUD\CRUDForm::html(
$node_obj,
[
new CRUDFormRow(
'Id',
new CRUDFormWidgetInput('id')
),
new CRUDFormRow(
'Title',
new CRUDFormWidgetTextarea('title')
),
new CRUDFormRow(
'image_path_in_images nullable',
new CRUDFormWidgetInput('image_path_in_images', true)
),
new CRUDFormRow(
'Date',
new CRUDFormWidgetTimestamp('created_at_ts')
),
new CRUDFormRow(
'is_published',
new CRUDFormWidgetRadios('is_published', [0 => 'no', 1 => 'yes'])
),
new CRUDFormRow(
'published_at_datetime_str',
new CRUDFormWidgetDateTime('published_at_datetime_str')
),
new CRUDFormRow(
'expiration_date nullable',
new CRUDFormWidgetDate('expiration_date')
),
new CRUDFormRow(
'State code',
new CRUDFormWidgetOptions('state_code',
[
1 => 'announce',
2 => 'live',
3 => 'archive'
]
)
),
new CRUDFormRow(
'State code',
new CRUDFormWidgetHtml('<ul><li>html widget - line 1</li><li>html widget - line 2</li></ul>')
),
new CRUDFormVerticalRow(
'Body',
new CRUDFormWidgetAceTextarea('body')
)
]
);