Магазин на Yii2, часть 35. Админка: загрузка картинок для страниц и страница 404
29.09.2019
Теги: Web-разработка • Yii2 • Изображение • ИнтернетМагазин • КаталогТоваров • ПанельУправления • Практика • Фреймворк
При редактировании с помощью WYSIWYG-редактора страницы сайта может возникнуть необходимость загрузки изображений, так что установим файловый менеджер ELFinder. Кроме того, создадим отдельную страницу 404 Not Found для панели управления, потому что сейчас используется страница 404 общедоступной части сайта, что не очень удобно.
> composer require --prefer-dist mihaildev/yii2-elfinder "*" ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 4 installs, 0 updates, 0 removals - Installing studio-42/elfinder (2.1.50): Downloading (100%) - Installing bower-asset/jquery-ui (1.12.1): Loading from cache - Installing yiisoft/yii2-jui (2.0.7): Loading from cache - Installing mihaildev/yii2-elfinder (1.3.0): Downloading (100%) studio-42/elfinder suggests installing kunalvarma05/dropbox-php-sdk (VolumeDriver `Dropbox`2 require `kunalvarma05/dropbox-php-sdk.) studio-42/elfinder suggests installing google/apiclient (VolumeDriver GoogleDrive require `google/apiclient:^2.0.) studio-42/elfinder suggests installing barryvdh/elfinder-flysystem-driver (VolumeDriver for elFinder to use Flysystem as a root.) studio-42/elfinder suggests installing nao-pon/flysystem-google-drive (require in GoogleDrive network volume mounting with Flysystem.) Package phpunit/phpunit-mock-objects is abandoned, you should avoid using it. No replacement was suggested. Writing lock file Generating autoload files
Расширение установлено. Теперь подключим и настроим его согласно инструкции. Для начала откроем файл config/web.php
и добавим в него следующий код:
/*...*/ $config = [ /*...*/ 'components' => [ /*...*/ ], 'controllerMap' => [ 'elfinder' => [ 'class' => 'mihaildev\elfinder\PathController', 'access' => ['?'], // доступ для всех 'root' => [ 'path' => 'images/pages', // директория внутри web 'name' => 'Изображения' ], ] ], 'params' => $params, ]; /*...*/
Создадим директорию web/images/pages
, куда будут загружаться изображения и изменим код вызова WYSIWYG-редактора:
<?php /* * Форма для добавления и редактирования страницы, файл modules/admin/views/page/_form.php */ use app\modules\admin\models\Page; use mihaildev\ckeditor\CKEditor; use mihaildev\elfinder\ElFinder; use yii\helpers\Html; use yii\widgets\ActiveForm; /* @var $this yii\web\View */ /* @var $model app\modules\admin\models\Page */ /* @var $form yii\widgets\ActiveForm */ ?> <?php $form = ActiveForm::begin(); ?> <?= $form->field($model, 'name')->textInput(['maxlength' => true]); ?> <?= $form->field($model, 'slug')->textInput(['maxlength' => true]); ?> <?php // при редактировании существующей страницы нельзя допустить, // чтобы в качестве родителя была выбрана эта же страница $exclude = 0; if (!empty($model->id)) { $exclude = $model->id; } echo $form->field($model, 'parent_id')->dropDownList(Page::getRootPages($exclude)); ?> <?= /* $form->field($model, 'content')->widget( CKEditor::class, [ 'editorOptions' => [ // разработанны стандартные настройки basic, standard, full 'preset' => 'basic', 'inline' => false, // по умолчанию false ], ] ); */ $form->field($model, 'content')->widget( CKEditor::class, [ 'editorOptions' => ElFinder::ckeditorOptions( 'elfinder', [ // разработанны стандартные настройки basic, standard, full 'preset' => 'basic', 'inline' => false, // по умолчанию false ] ), ] ); ?> <?= $form->field($model, 'keywords')->textarea(['rows' => 2, 'maxlength' => true]); ?> <?= $form->field($model, 'description')->textarea(['rows' => 2, 'maxlength' => true]); ?> <div class="form-group"> <?= Html::submitButton('Сохранить', ['class' => 'btn btn-success']) ?> </div> <?php ActiveForm::end(); ?>
Теперь создаем страницу 404 Not Found для панели управления. Yii2 не поддерживает отдельную от приложения обработку ошибок в модулях, обработчик ошибок является глобальным. Поэтому нужно перезаписать компонент errorHandler
в классе модуля, установить его для приложения и зарегистрировать как обработчик ошибок.
<?php namespace app\modules\admin; use Yii; use yii\web\ErrorHandler; class Module extends \yii\base\Module { public $controllerNamespace = 'app\modules\admin\controllers'; public function init() { parent::init(); Yii::configure($this, [ 'components' => [ 'errorHandler' => [ 'class' => ErrorHandler::class, 'errorAction' => 'admin/admin/error' ] ], ]); $handler = $this->get('errorHandler'); Yii::$app->set('errorHandler', $handler); $handler->register(); } }
Добавляем метод actions()
в класс контроллера AdminController
:
<?php namespace app\modules\admin\controllers; use Yii; use yii\web\Controller; class AdminController extends Controller { public function beforeAction($action) { $session = Yii::$app->session; $session->open(); if (!$session->has('auth_site_admin')) { $this->redirect('/admin/auth/login'); return false; } return parent::beforeAction($action); } public function actions() { return [ 'error' => [ 'class' => 'yii\web\ErrorAction', ], ]; } }
И создаем view-шаблон:
<?php /* * Файл modules/admin/views/admin/error.php */ /* @var $this yii\web\View */ /* @var $name string */ /* @var $message string */ /* @var $exception Exception */ use yii\helpers\Html; $this->title = $name; ?> <h1><?= Html::encode($this->title) ?></h1> <div class="alert alert-danger"> <?= nl2br(Html::encode($message)) ?> </div>
- Магазин на Yii2, часть 31. Админка: загрузка изображений для категорий и брендов
- Магазин на Yii2, часть 30. Админка: WYSIWYG-редактор и изображение для товара
- Магазин на Yii2, часть 33. Админка: приводим в порядок CRUD-код для страниц
- Магазин на Yii2, часть 32. Админка: удаление категорий и CRUD для страниц
- Магазин на Yii2, часть 29. Админка: добавляем список товаров категории
- Магазин на Yii2, часть 28. Админка: выбор родителя и список всех категорий
- Магазин на Yii2, часть 27. Админка: приводим в порядок сгенерированный код
Поиск: Web-разработка • Yii2 • Изображение • Интернет магазин • Каталог товаров • Панель управления • Фреймворк