_form.php 7.8 KB
<?php
    
    use artweb\artbox\blog\models\BlogArticle;
    use artweb\artbox\blog\models\BlogArticleLang;
    use artweb\artbox\blog\models\BlogCategory;
    use artweb\artbox\blog\models\BlogTag;
    use kartik\select2\Select2;
    use yii\helpers\Html;
    use yii\helpers\Url;
    use yii\web\View;
    use yii\widgets\ActiveForm;
    use artweb\artbox\language\widgets\LanguageForm;
    use yii\web\JsExpression;
    
    /**
     * @var View              $this
     * @var BlogArticle       $model
     * @var ActiveForm        $form
     * @var BlogArticleLang[] $modelLangs
     * @var BlogCategory[]    $categories
     * @var BlogTag[]         $tags
     * @var array             $products
     * @var array             $articles
     */
?>

<div class="blog-article-form">
    
    <?php $form = ActiveForm::begin(
        [
            'options' => [ 'enctype' => 'multipart/form-data' ],
        ]
    ); ?>
    
    <?php
        echo LanguageForm::widget(
            [
                'modelLangs' => $modelLangs,
                'formView'   => '@artweb/artbox/blog/views/blog-article/_form_language',
                'form'       => $form,
            ]
        );
    ?>
    
    <?php
        echo $form->field($model, 'blogCategories')
                  ->widget(
                      Select2::className(),
                      [
                          'data'          => $categories,
                          'theme'         => Select2::THEME_BOOTSTRAP,
                          'options'       => [
                              'placeholder' => \Yii::t('blog', 'Select category'),
                              'multiple'    => true,
                          ],
                          'pluginOptions' => [
                              'allowClear' => true,
                          ],
                      ]
                  );
    ?>
    
    <?php
        echo $form->field($model, 'blogTags')
                  ->widget(
                      Select2::className(),
                      [
                          'data'          => $tags,
                          'theme'         => Select2::THEME_BOOTSTRAP,
                          'options'       => [
                              'placeholder' => \Yii::t('blog', 'Select tag'),
                              'multiple'    => true,
                          ],
                          'pluginOptions' => [
                              'allowClear' => true,
                          ],
                      ]
                  );
    ?>
    
    <?= $form->field($model, 'image')
             ->widget(
                 \kartik\file\FileInput::className(),
                 [
                     'language'      => 'ru',
                     'options'       => [
                         'accept'   => 'image/*',
                         'multiple' => false,
                         'deleteurl' => $model->isNewRecord?false:Url::to(['/blog/blog-article/delete-image', 'id' => $model->id]),
                         'class'     => $model->isNewRecord?'':'artbox-delete-file',
                     ],
                     'pluginOptions' => [
                         'allowedFileExtensions' => [
                             'jpg',
                             'gif',
                             'png',
                         ],
                         'initialPreview'        => !empty( $model->getImageUrl(0, false) ) ? \artweb\artbox\components\artboximage\ArtboxImageHelper::getImage(
                             $model->imageUrl,
                             'list'
                         ) : '',
                         'initialPreviewShowDelete' => false,
                         'overwriteInitial'         => true,
                         'showRemove'               => true,
                         'showUpload'               => false,
                         'showClose'                => false,
                         'previewFileType'       => 'image',
                     ],
                 ]
             ); ?>
    
    <?php
        echo $form->field($model, 'products')
                  ->widget(
                      Select2::className(),
                      [
                          'data'          => $products,
                          'options'       => [
                              'placeholder' => \Yii::t('blog', 'Select related products'),
                              'multiple'    => true,
                          ],
                          'pluginOptions' => [
                              'allowClear'         => true,
                              'minimumInputLength' => 3,
                              'language'           => [
                                  'errorLoading' => new JsExpression(
                                      "function () { return '" . \Yii::t('blog', 'Waiting for results') . "'; }"
                                  ),
                              ],
                              'ajax'               => [
                                  'url'      => yii\helpers\Url::to([ '/blog/blog-article/product-list' ]),
                                  'dataType' => 'json',
                                  'data'     => new JsExpression('function(params) { return {q:params.term}; }'),
                              ],
                              'templateResult'     => new JsExpression('function(product) { return product.text; }'),
                              'templateSelection'  => new JsExpression('function (product) { return product.text; }'),
                          ],
                      ]
                  );
    ?>
    
    <?php
        if (empty( $model->id )) {
            $data = 'function(params) { return {q:params.term}; }';
        } else {
            $data = 'function(params) { return {q:params.term, id:' . $model->id . '}; }';
        }
        echo $form->field($model, 'blogArticles')
                  ->widget(
                      Select2::className(),
                      [
                          'data'          => $articles,
                          'options'       => [
                              'placeholder' => \Yii::t('blog', 'Select related articles'),
                              'multiple'    => true,
                          ],
                          'pluginOptions' => [
                              'allowClear'         => true,
                              'minimumInputLength' => 3,
                              'language'           => [
                                  'errorLoading' => new JsExpression(
                                      "function () { return '" . \Yii::t('blog', 'Waiting for results') . "'; }"
                                  ),
                              ],
                              'ajax'               => [
                                  'url'      => yii\helpers\Url::to([ '/blog/blog-article/article-list' ]),
                                  'dataType' => 'json',
                                  'data'     => new JsExpression(
                                      $data
                                  ),
                              ],
                              'templateResult'     => new JsExpression('function(article) { return article.text; }'),
                              'templateSelection'  => new JsExpression('function (article) { return article.text; }'),
                          ],
                      ]
                  );
    ?>
    
    <?= $form->field($model, 'sort')
             ->textInput() ?>
    
    <?= $form->field($model, 'status')
             ->checkbox() ?>
    
    <?= $form->field($model, 'author_id')
             ->textInput() ?>
    
    <div class="form-group">
        <?= Html::submitButton(
            $model->isNewRecord ? 'Create' : 'Update',
            [ 'class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary' ]
        ) ?>
    </div>
    
    <?php ActiveForm::end(); ?>

</div>