Создание плагина - часть 3. Разработка компонента

В заключительной части создания плагина мы рассмотрим процесс разработки компонента. Он будет выводить обычную форму, с помощью которой можно будет добавить книгу через frontend сайта. 

1. Первым делом создаём необходимую структуру в папке плагина. В моём случае это так:

plugins/
  cmsdev/
    library/
      components/
        bookadd/ (на одном уровне с файлом)
        BookAdd.php    

код файла BookAdd.php у меня получился такой: 

<?php
namespace Cmsdev\Library\Components;
use Cms\Classes\ComponentBase;
use Input;
use Validator;
use Redirect;
use Cmsdev\Library\Models\Book;
use Flash;
use ValidationException;

class BookAdd extends ComponentBase
{
  public function componentDetails(){
    return [
      'name' => 'Добавление книг',
      'description' => 'Добавление книг через публичную часть сайта'
    ];
}

  public function defineProperties(){
    return [
      'title_form' => [
      'title' => 'Заголовок формы',
      'description' => 'Заголовок формы для отображения',
      'default' => "Форма по умолчанию",
      ],
    ];
  }

  public function save(){
    $validator = Validator::make(
    $form = Input::all(), [
      'title' => 'required',
      'description' => 'required'
      ]
    );

    if ($validator->fails()) {
      return Redirect::back()->withErrors($validator);
    }

    $book = new Book();
    $book->title = Input::get('title');
    $book->description = Input::get('description');
    $book->save();
    Flash::success('Книга добавлена!');

  }
}

Вкратце пройдёмся по используемым методам: 

componentDetails() - здесь задаётся имя и описание компонента, которое будет отображаться в админке, в разделе Components.

defineProperties() - различные настройки компонента, которые впоследствии задаются через поля. 

save() - метод-обработчик формы. 

2. Регистрируем компонент в файле Plugin.php в методе registerComponents:

public function registerComponents()
{
  return [
    'Cmsdev\Library\Components\BookAdd' => 'book_add',
  ];
}

3. Создаём страницу, на которой будет располагаться компонент. Делается это через CMS->Pages->Add. Настройки страницы у меня получились такие: 

название файла: book-add.htm

маршрут: /book-add

4. Добавляем наш компонент на созданную страницу через подраздел Components.

5. В папке components, в папке с именем компонента создаём файл default.htm В нём будет находиться view. Содержимое файла будет таким: 

<form method="POST" action="{{ url('book-add') }}" accept-charset="UTF8">
<input type="hidden" name="_handler" value="save">
{{ form_token() }}
{{ form_sessionKey() }}
<label>Название книги</label>
<input type="text" name="title">
<label>Описание книги</label>
<input type="textarea" name="description">
<button type="submit">Сохранить книгу</button>
{% flash success %}
<p>{{ message }}</p>
{% endflash %}
<ul>
{% for error in errors.all() %}
<li>{{ error }}</li>
{% endfor %}
</ul>
</form>

Комментарии ()

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