【问题标题】:Yii2 add tag to blog postYii2 为博文添加标签
【发布时间】:2017-04-21 08:19:59
【问题描述】:

当我仍然没有post_id 时,我完全不知道应该如何在表格中保存tag_idpost_id。我使用数据库表中的选项制作了下拉列表

<?= Html::activeDropDownList($model, 'post_id', $ddItems, ['class' => 'form-control dd-list', 'prompt' => '']) ?>

该列表包含标签(PHP、Java 等)。 用户在帖子上最多可以有 3 个标签。我尝试通过 GET 传递标签并使用 \Yii:$app-&gt;request-&gt;get(['id']) 接收控制器,但没有结果。

我的 jQuery:

var ddList = $('.dd-list');
    var tagList = $('.tag-container');

    ddList.on('change', function () {
        var tagHolder = document.createElement('div');
        tagHolder.setAttribute('class', 'tag-holder');
        var selected = $('.dd-list option:selected').text();
        tagHolder.setAttribute('id', selected);
        console.log(selected);
        if(tagList.find('div').length > 2){
            alert('You can have most 3 tags!');
            return false;
        }

        if(tagList.find('#'+selected).length){
            return false;
        }else{
            tagHolder.append(selected);
            tagList.append(tagHolder);
            $.ajax({
                type : 'GET',
                dataType : 'text',
                url : '../post/create?tag=' + selected
            });
        }
    });

动作创建:

public function actionCreate()
    {
        $model = new Post();
        $id = \Yii::$app->user->identity->id;
        $ddItems = ArrayHelper::map(Tag::find()->all(),'tag_id', 'tag_name');

        if ($model->load(Yii::$app->request->post())) {

            date_default_timezone_set('Europe/Berlin');

            $param = \Yii::$app->request->get();

            $model->user_id = $id;
            $model->date_create = date('m/d/Y');

            if($model->save())
            {
                $tag = \Yii::$app->request->get(['tag']);
                return $this->redirect(['view', 'id' => $model->post_id]);
            }

            throw new \yii\db\Exception("Some problem with DB connection ocurred!");

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

我收到错误消息:undefined tag。我试图只获得一个标签(因为仍然不知道如何传递更多)。 实现目标的正确方法是什么?我从大约 1 天开始就一团糟!提前致谢!

编辑 我尝试使用on click 事件发送该标签,如下所示:

$('.create-post').on('click', function () {
        var tag = $('input[name=chosen-tag]').val();
        console.log(tag);   
        $.ajax({
            type : 'GET',
            dataType : 'text',
            url : '../post/create?tag=' + tag
        });
    });

【问题讨论】:

    标签: php jquery yii yii2


    【解决方案1】:

    我无法理解你的编程场景,但是..

    改变

     $tag = \Yii::$app->request->get(['tag']);
    

     $tag = \Yii::$app->request->get('tag');
    

    【讨论】:

    • 它以这种方式给了我null :) 是的,我真的很困惑,甚至不确定我能否正确解释我的所作所为。最后我只想在帖子中添加一些标签:)
    • 你是从 jQuery 传递值吗?
    • 我在新的 $('.create-post').on('click', ..) 事件中移动了 ajax,并再次使用 ajax 通过它发送标签,但又没有:/ 事实上,我的 activeform 是下拉列表,使用方法 POST 和现在我正在尝试使用 GET 请求发送。这是我的错吗?
    • 我认为if ($model-&gt;load(Yii::$app-&gt;request-&gt;post())) 不会让您的 get 方法进入内部。但是,提交表单后,下拉值将可用,为什么需要这个 jquery 功能?。
    • 你是对的!正是因为这个 if 语句 :) 现在我必须找到发送浮动标签数(0 到 3)的正确方法:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多