Страница 1 из 1

Добавить несколько тегов с админ-панели.

Добавлено: 2020.06.02, 19:13
rosswe
Доброго времени.
Реализованна функция вывода тега к статье к категории, но на данный момент можно добавить только один тег,
а как сделать чтоб можно было добавить сразу несколько тегов ?

Код: Выделить всё

  public function actionCreate()
    {
        $model = new Tag();

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['view', 'id' => $model->id]);
        }

        return $this->render('create', [
            'model' => $model,
        ]);
    }

Код: Выделить всё

<div class="article-form">

    <?php $form = ActiveForm::begin(); ?>

    <?= /** @var TYPE_NAME $selectedTags */
    /** @var TYPE_NAME $tags */
    Html::dropDownList('tags', $selectedTags, $tags, ['class'=>'form-control', 'multiple'=>true]) ?>

    <div class="form-group">

        <?= Html::submitButton('Добавить', ['class' => 'btn btn-success']) ?>
    </div>

    <?php ActiveForm::end(); ?>

</div>

Код: Выделить всё

 public function getTags()

    {

        return $this->hasMany(Tag::className(), ['id' => 'tag_id'])
            ->viaTable('article_tag', ['article_id' => 'id']);

    }


    public function getSelectedTags()

    {

        $selectedIds = $this->getTags()->select('id')->asArray()->all();

        return ArrayHelper::getColumn($selectedIds, 'id');

    }

    public function saveTags($tags)

    {

        if (is_array($tags))

        {


            $this->clearCurrentTags();


            foreach ($tags as $tag_id)

            {

                $tag = Tag::findOne($tag_id);

                $this->link('tags', $tag);

            }
        }

    }

    public function  clearCurrentTags()

    {

        ArticleTag::deleteAll(['article_id'=>$this->id]);

    }


PS= в-этом проекте много моделей ,и я когда вник, утонул.,
возможно я пишу не корректно о вопросе, но
если нужны другие файлы , я предоставлю.

Re: Добавить несколько тегов с админ-панели.

Добавлено: 2020.06.02, 20:21
Prooksius
Делал в свое время такое, типа как на WP тэги.

Использовал примочки от dosamigos:
- behavior Taggable
- виджет SelectizeTextInput

Все замечательно работало.

Кстати, всегда, прежде чем изобретать какой-то новый "велосипед", проверяю сеть на наличие уже изобретенного, чтобы сэкономить время.

Re: Добавить несколько тегов с админ-панели.

Добавлено: 2020.06.02, 20:47
rosswe
думаю дело не в расширении "2amigos/yii2-taggable-behavior": "~1.0"
,но я его добавлю,- протестю.
наверное - проблема в коде где: то нужно прописать что, то.

Re: Добавить несколько тегов с админ-панели.

Добавлено: 2020.06.02, 22:04
unknownby
Для того, чтобы добавить много тегов к статье.
1. Должна быть таблица, которая в себя записывает связь статьи с тегами.
2. В статье реализована возможность множественного добавления.
3. В представлении через связь hasMany вывести все теги.

Нет необходимости устанавливать какие-то расширения для данной вещи.
Посмотри для примера внизу статьи как у меня теги выведены
Для примера

Re: Добавить несколько тегов с админ-панели.

Добавлено: 2020.06.02, 22:11
Prooksius
unknownby писал(а): 2020.06.02, 22:04 Посмотри для примера внизу статьи как у меня теги выведены
Я так понял, вопрос был как в админке это дело добавлять. Вот для этого и нужен SelectizeTextInput - удобный виджет для множественного добавления тэгов с сохранением в таблицу и самих тегов, и связей с ними. В этом помогает соотв. бихейвиор Taggable.
Не знаю, по мне - так лучше решения, чем от досамигос - нет

Re: Добавить несколько тегов с админ-панели.

Добавлено: 2020.06.02, 22:59
unknownby
А что насчёт Select2 от картика и ManyToMany от воскобовича?

Re: Добавить несколько тегов с админ-панели.

Добавлено: 2020.06.02, 23:13
Prooksius
да тот же принцип, скорее всего. Select2 тоже часто использую - работает примерно так же как и этот Selectizе.
Просто мне понравилась версия от досамигос.