2017 © Pedro Peláez
 

library php-crud

image

o-log/php-crud

  • Wednesday, October 25, 2017
  • by o-log
  • Repository
  • 2 Watchers
  • 0 Stars
  • 1,627 Installations
  • CSS
  • 3 Dependents
  • 0 Suggesters
  • 3 Forks
  • 3 Open issues
  • 100 Versions
  • 0 % Grown

The README.md

Библиотека умеет делать две вещи: выводить список объектов и выводить форму редактирования одного объекта. При этом она генерирует не готовую страницу, а только html-код таблицы или формы. Выходной html-код совместим с twitter bootstrap., (*1)

Все остальное - проверка прав доступа, вывод таблицы или формы в нужное место страницы - нужно сделать отдельно. Для этого можно использовать готовые модули: - php-auth: авторизация пользователей и проверка разрешений - php-bt: содержит готовые шаблоны страниц, (*2)

Объекты загружаются из БД через методы \OLOG\Model\InterfaceFactory, соответственно класс объекта должен реализовать этот интерфейс., (*3)

Объекты сохраняются в БД через методы \OLOG\Model\InterfaceSave, соответственно для редактирования класс объекта должен реализовать этот интерфейс., (*4)

Установка демо проекта

В папке, где мы хотим развернуть демо проект, выполняем в консоли следующие команды:, (*5)

git clone https://github.com/o-log/php-crud.git
cd php-crud
composer update

После этого нужно создать пустую БД для проекта и указаты параметры доступа к ней в файле CRUDDemo/Config.php, (*6)

Теперь создаем таблицы в БД, для этого выполняем скрипт миграции структуры БД:, (*7)

php cli.php

Выбираем пункт 1, затем отвечаем на вопросы скрипта., (*8)

После создания таблиц запускаем локальный сервер и проверяем работу:, (*9)

./run.sh

Открываем в браузере адрес localhost:8000, (*10)

Подключение библиотеки к проекту

Включаем в composer.json проект такие строки:, (*11)

"require" : {
    "o-log/php-crud" : "dev-master"
}

Вывод списка объектов

Вот пример кода, который генерирует html таблицы объектов:, (*12)

$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'
);

Вывод данных в таблице

При вызове виджета таблицы мы передаем ему строку: что выводить. В этой строке можно обращаться к поля и методам объекта, который выводится в текущей строке таблицы, а также к другим объектам., (*13)

Объект, для которого выводится текущая строка таблицы, доступен через ключевое слово this., (*14)

Примеры вывода полей и вызова методов текущего объекта:, (*15)

new CRUDTableWidgetText('{this->title}') new CRUDTableWidgetText('{this->getReverseTitle()}') new CRUDTableWidgetHtml('{this->id}br/{this->title}'), (*16)

К другим объектам, на которые ссылается текущий, можно обратиться следующим образом:, (*17)

new CRUDTableWidgetText('{DemoTerm.{this->term_id}->title}'), (*18)

Здесь мы выводим название рубрики, связанной с новостью: создаем объект класса DemoTerm с идентификатором, который берем из поля term_id текущего объекта, и выводит его название., (*19)

На практике для указания имени класса вместо скаляра стоит использовать автоматические константы, поэтому окончательная запись будет выглядеть так:, (*20)

new CRUDTableWidgetText('{' . DemoTerm::class . '.{this->term_id}->title}'), (*21)

В виджете весов иногда необходимо учитывать дополнительные параметры по котороым вычисляются веса объектов в таблице. Для этого мы передаем массив контекстов, (*22)

Например, (*23)

new CRUDTableWidgetWeight([ 'parent_id' => '{this->parent_id}' ]), (*24)

В этом случае при обработки изменения весов веса будут считаться для записей с parent_id таким же как и у текущего объекта, (*25)

Вывод редактора объекта

Вот пример кода, который генерирует html редактора объекта:, (*26)

    $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')
            )
        ]
    );

The Versions

25/10 2017

dev-master

9999999-dev

  Sources   Download

The Requires

 

The Development Requires

25/10 2017
24/10 2017
24/10 2017
24/10 2017
23/10 2017
23/10 2017
23/10 2017
22/10 2017
22/10 2017

7.0

7.0.0.0

  Sources   Download

The Requires

 

The Development Requires

16/01 2017

dev-olog_table_editor

dev-olog_table_editor

  Sources   Download

The Requires

 

The Development Requires

11/11 2016

dev-mk-table-filter-not-equal

dev-mk-table-filter-not-equal

  Sources   Download

The Requires

 

The Development Requires

31/10 2016

dev-mk-ref-select-widget

dev-mk-ref-select-widget

  Sources   Download

The Requires

 

The Development Requires