chiliec / yii2-vote

Provides voting for any model :+1: :-1:

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Optional fields js_after_vote

loveorigami opened this issue · comments

Перенесу обсуждение сюда, т.к. есть что обмыслить...
Идею с js_before_vote и js_afrter_vote я понял.
Но основной вопрос остается открытым - как тут перехватить сообщения
и вывести их в плагине (например - noty)

Загвоздка в том, что в зависимости от результата действия, должен выводится соответствующий тип сообщения

$message = "Ваш голос учтен";
$type = "success";

или

$message = "Вы не авторизированы";
$type = "error";

                <script type="text/javascript">
                    noty({
                        text: "' . $message . '",
                        type: "' . $type . '",
                        layout: "topRight",
                        timeout: 1500, // delay for closing event. Set false for sticky notifications
                        force: true
                    });
                </script>

У себя я решал через виджет, обрабатывающий Flash сессию
#3 (comment)

Действительно, про доступность результата я что-то не подумал... Но можно просто перенести js_after_vote (или создать ещё одно свойство) из события complete в событие success (после js_result), там будет доступна data.

На данном этапе в data нужны message и type

Например, так:

    <?php echo \chiliec\vote\Display::widget([
        'model_name' => 'blog_post', // name of current model
        'target_id' => $model->id, // id of current element
        'js_after_vote' => "
            message = data.content;
            type = 'error';
            if(typeof(data.success)!=='undefined') { type = 'success'; }
            if(typeof(data.changed)!=='undefined') { type = 'information'; }
            noty({
                text: message,
                type: type,
                layout: 'topRight',
                timeout: 1500, // delay for closing event. Set false for sticky notifications
                force: true
            });
        ",
    ]); ?>

да. то что нужно !
сделал

'js_after_vote' => "voting (data)",

// а в своем js-файле написал соответсвующую функцию. Пока работает ).
Можно добавить в док, если что.

Изменил немного работу с событиями, теперь нужно писать

'js_show_message' => "voting (data)",

это перезапишет стандартное действие отображения сообщения.