Yii2. Установка расширений вручную

13.04.2019

Теги: Yii2ВиджетРедакторТеорияУстановкаФреймворк

Выполним установку расширения CKEditor без использования Composer. Прибегать к ручному способу установки расширения нужно только в крайнем случае. Например, когда нет возможности установить Composer на компьютер или сервер. Потому что Composer выполнит установку быстрее и без ошибок, которые возможны при копировании и редактировании файлов.

Идем на GitHub, скачиваем расширение CKEditor и распаковываем zip-архив. Открываем файл composer.json в редакторе:

{
    "name": "mihaildev/yii2-ckeditor",
    "keywords": ["yii", "wysiwyg", "editor", "CKEditor"],
    "description": "Yii2 CKEditor",
    "homepage": "https://github.com/MihailDev/yii2-ckeditor",
    "license": "BSD-3-Clause",
    "type": "yii2-extension",
    "minimum-stability":"stable",
    "authors": [
        {
            "name": "Mihail",
            "email": "mihail.kucher@gmail.com",
            "homepage": "https://github.com/MihailDev",
            "role": "Developer"
        }
    ],
    "autoload": {
        "psr-4": {"mihaildev\\ckeditor\\": ""}
    },
    "require": {
        "yiisoft/yii2": "*"
    },
    "extra": {
        "asset-installer-paths": {
            "npm-asset-library": "vendor/npm",
            "bower-asset-library": "vendor/bower"
        }
    }
}

Смотрим секцию autoload, копируем распакованные файлы в директорию vendor/mihaildev/ckeditor. Открываем на редактирование файл vendor/composer/autoload_psr4.php:

<?php
// autoload_psr4.php @generated by Composer

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
    'yii\\swiftmailer\\' => array($vendorDir . '/yiisoft/yii2-swiftmailer/src'),
    'yii\\jui\\' => array($vendorDir . '/yiisoft/yii2-jui'),
    'yii\\gii\\' => array($vendorDir . '/yiisoft/yii2-gii/src'),
    'yii\\faker\\' => array($vendorDir . '/yiisoft/yii2-faker'),
    'yii\\debug\\' => array($vendorDir . '/yiisoft/yii2-debug/src'),
    'yii\\composer\\' => array($vendorDir . '/yiisoft/yii2-composer'),
    'yii\\codeception\\' => array($vendorDir . '/yiisoft/yii2-codeception'),
    'yii\\bootstrap\\' => array($vendorDir . '/yiisoft/yii2-bootstrap/src'),
    'yii\\' => array($vendorDir . '/yiisoft/yii2'),
    'cebe\\markdown\\' => array($vendorDir . '/cebe/markdown'),
    'Symfony\\Polyfill\\Php72\\' => array($vendorDir . '/symfony/polyfill-php72'),
    'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
    'Symfony\\Polyfill\\Intl\\Idn\\' => array($vendorDir . '/symfony/polyfill-intl-idn'),
    'Symfony\\Polyfill\\Iconv\\' => array($vendorDir . '/symfony/polyfill-iconv'),
    'Faker\\' => array($vendorDir . '/fzaninotto/faker/src/Faker'),
    'Egulias\\EmailValidator\\' => array($vendorDir . '/egulias/email-validator/EmailValidator'),
);

Добавляем в конец массива еще один элемент:

'mihaildev\\ckeditor\\' => array($vendorDir . '/mihaildev/ckeditor'),

Далее, открываем на редактирование файл vendor/yiisoft/extensions.php:

<?php
$vendorDir = dirname(__DIR__);

return array (
  'yiisoft/yii2-swiftmailer' => 
  array (
    'name' => 'yiisoft/yii2-swiftmailer',
    'version' => '2.1.2.0',
    'alias' => 
    array (
      '@yii/swiftmailer' => $vendorDir . '/yiisoft/yii2-swiftmailer/src',
    ),
  ),
  'yiisoft/yii2-codeception' => 
  array (
    'name' => 'yiisoft/yii2-codeception',
    'version' => '2.0.6.0',
    'alias' => 
    array (
      '@yii/codeception' => $vendorDir . '/yiisoft/yii2-codeception',
    ),
  ),
  'yiisoft/yii2-bootstrap' => 
  array (
    'name' => 'yiisoft/yii2-bootstrap',
    'version' => '2.0.9.0',
    'alias' => 
    array (
      '@yii/bootstrap' => $vendorDir . '/yiisoft/yii2-bootstrap/src',
    ),
  ),
  'yiisoft/yii2-faker' => 
  array (
    'name' => 'yiisoft/yii2-faker',
    'version' => '2.0.4.0',
    'alias' => 
    array (
      '@yii/faker' => $vendorDir . '/yiisoft/yii2-faker',
    ),
  ),
  'yiisoft/yii2-jui' => 
  array (
    'name' => 'yiisoft/yii2-jui',
    'version' => '2.0.7.0',
    'alias' => 
    array (
      '@yii/jui' => $vendorDir . '/yiisoft/yii2-jui',
    ),
  ),
  'yiisoft/yii2-debug' => 
  array (
    'name' => 'yiisoft/yii2-debug',
    'version' => '2.1.1.0',
    'alias' => 
    array (
      '@yii/debug' => $vendorDir . '/yiisoft/yii2-debug/src',
    ),
  ),
  'yiisoft/yii2-gii' => 
  array (
    'name' => 'yiisoft/yii2-gii',
    'version' => '2.1.0.0',
    'alias' => 
    array (
      '@yii/gii' => $vendorDir . '/yiisoft/yii2-gii/src',
    ),
  ),
);

Добавляем в конец массива еще один элемент:

  'mihaildev/ckeditor' => array (
    'name' => 'mihaildev/ckeditor',
    'alias' => array (
        '@mihaildev/ckeditor' => $vendorDir . '/mihaildev/ckeditor',
    ),
  ),

Все, установка завершена, можно использовать редактор в view-шаблоне:

<?php
/* @var $this yii\web\View */

use yii\widgets\ActiveForm;
use yii\helpers\Html;
use yii\jui\DatePicker;
use mihaildev\ckeditor\CKEditor;

$this->title = 'Обратная связь';
?>

<?php if (Yii::$app->session->hasFlash('success')): ?>
    <?php if (Yii::$app->session->getFlash('success')): ?>
        <p>Данные формы были успешно отправлены</p>
    <?php else: ?>
        <p>Допущены ошибки при заполнении формы</p>
    <?php endif; ?>
<?php endif; ?>

<div class="page-feedback">
    <h1><?= Html::encode($this->title) ?></h1>

    <?php $form = ActiveForm::begin(['id' => 'feedback-form', 'options' => ['novalidate' => '']]); ?>
        <?= $form->field($model, 'name')->textInput(); ?>
        <?= $form->field($model, 'email')->textInput(); ?>
        <?=
        $form->field($model, 'birthday')->textInput()->widget(
            DatePicker::class,
            [
                'dateFormat' => 'php:d.m.Y',
                'options' => [
                    'autocomplete'=>'off'
                ],
                'clientOptions' => [
                    'changeMonth' => true,
                    'changeYear' => true,
                    // с (1950 год) по (настоящее-10лет)
                    'yearRange' => '1950:-10',
                ]
            ]
        );
        ?>
        <?=
        $form->field($model, 'body')->widget(
            CKEditor::className(),
            [
                'editorOptions' => [
                    // варианты: basic, standard, full
                    'preset' => 'basic',
                    // значение по умолчанию false
                    'inline' => false,
                ],
            ]
        );
        ?>
        <?= Html::submitButton('Отправить', ['class' => 'btn btn-primary']); ?>
    <?php ActiveForm::end(); ?>
</div>

Поиск: Yii2 • Виджет • Редактор • Фреймворк • Расширение • Extension • CKEditor • Composer • Установка

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.