Skip to content
Butschster edited this page Jun 9, 2015 · 2 revisions

Плагины


Плагины позволяют расширить возможности KodiCMS и практически ничем не ограничивают разработчика в работе как с фреймворком Laravel, так и с API CMS

Что можно сделать при помощи плагина:

  • Создать раздел в админ панели
  • Создать API контроллеры для работы с данными через AJAX
  • Создать новый тип виджета (для страниц сайта и для рабочего стола)
  • Добавить новые роуты в систему
  • Добавить таблицы в БД
  • Добавить новые пункты в меню админ панели
  • Добавить новый тестовый редактор

Создание плагина

Плагины в системе располагаются в папке plugins. В связи с тем, что разные авторы могут давать одинаковые имена плагинам, то было решено располагать плагины аналогично composer пакетам plugins/author/pluginName

Плагины можно поставлять в виде composer пакетов, для этого в вашем файле composer.json необходимо указать тип пакета

{
   ...
   "type":        "kodicms-plugin",
   ...
}

после чего он автоматически установится в директорию plugins

Каждый плагин должен обязательно содержать файл PluginContainer.php, который используется для инициализации плагина.

plugins/
  kodicms/                   <== Автор
    PluginName/              <== Название плагина
        ...
        PluginContainer.php  <== Файл инициализации плагина

Пример PluginContainer.php

Директория plugins по умолчанию имеет namespace Plugins, поэтому пространство имен в ваших классах должно начинаться с Plugins\author\PluginName\...

namespace Plugins\author\PluginName;
use KodiCMS\Plugins\Loader\BasePluginContainer;

class PluginContainer extends BasePluginContainer
{
   /**
   * @return array
   *
   * [
   *   'title'                  => '...',
   *   'description'            => '...',
   *   'author'                 => '...',
   *   'icon'                   => '...',
   *   'version'                => '...',
   *   'required_cms_version'   => '...'
   * ]
   */
   public function details()
   {
      return [
         'title' => 'PluginName',
         'description' => 'PluginName section',
         'author' => 'Pavel Buchnev',
         'icon' => 'newspaper-o',
         'required_cms_version' => '12.0.0',
         'settings_template' => 'author:pluginname::settings'
      ];
   }
}

Основная информация плагина

  • title - Название
  • description - Описание
  • author - Автор
  • icon - Иконка (FontAwesome без префикса fa-)
  • version Версия плагина
  • required_cms_version Требуемая версия CMS

Если вы решили использовать собственное пространство имен, то вам необходимо указать его в файле PluginContainer.php

namespace Plugins\butschster\News;
use KodiCMS\Plugins\Loader\BasePluginContainer;

class PluginContainer extends BasePluginContainer
{

   ...

   protected function setNamespace($namespace = null)
   {
      $this->namespace = 'Your\\Namespace';
   }

   ...

}

Структура плагина

Структура плагина аналогична той, что используется в модулях. Структура модуля

Шаблоны и переводы доступны по namespace author:pluginname (автор и название плагина нижнем регистре)

Добавление таблиц в БД

Единственное отличие, у плагина не может быть директории для миграции, но есть database\schemas в которой вы можете поместить файлы аналогичные файлам миграции, пример:

use KodiCMS\Plugins\Loader\PluginSchema;
use Illuminate\Database\Schema\Blueprint;

class NewsContent extends PluginSchema
{
   /**
    * @return string
    */
   public function getTableName()
   {
      return 'table_name';
   }

   public function up()
   {
      Schema::create($this->getTableName(), function (Blueprint $table) {
         $table->timestamps();

         $table->increments('id');
         $table->string('title');
         $table->string('slug')->unique();
      });
   }

   public function down()
   {
      Schema::dropIfExists($this->getTableName());
   }
}

Файл схемы необходимо наследовать от KodiCMS\Plugins\Loader\PluginSchema