2015-10-07 2 views
0

У меня вопрос. Есть ли способ сделать другое действие на основе сообщения подтверждения? Например, у меня есть это:Render action на основе подтверждения в Yii

<?php $this->widget('booster.widgets.TbButton', array(
     'buttonType'=>'submit', 
     'context'=>'primary', 
         'htmlOptions' => array(
         'id'=> 'createstudent', 
         'confirm' => 'Do you want to register the student to a class' 
        ), 
     'label'=>$model->isNewRecord ? Yii::t('default', 'Create') : Yii::t('default', 'Save'), 
    )); ?> 

И то, что я хочу сделать, это когда Да пользователь нажимает в диалоге подтверждения я хочу сделать еще одно действие от другого контроллера. Например, contract/studentcreate, array($model->studentid). И если пользователь нажимает «нет», он должен отображать действие, которое предполагается выполнить. Заранее спасибо

ответ

0

Да, это возможно. Вы можете использовать jQuery для его выполнения. Вы должны зафиксировать событие «щелчок» над кнопкой, и когда это произойдет, вы попросите «подтвердить». Если пользователь нажимает «да» в диалоговом окне подтверждения, делайте href для какого-либо контроллера/действия, если пользователь нажимает «нет», выполняет некоторые другие функции href для какого-либо другого контроллера/действия. Другими словами:

<script> 
    $("#createstudent").click(function() { 
    if(confirm('Do you want to register the student to a class?')){ 
     location.href = "BASEURL/controllerOne/actionOne"; 
    } 
    else{ 
     location.href = "BASEURL/controllerTwo/actionTwo"; 
    } 
    }); 
</script> 

Где BaseUrl является базой URL вашего проекта в веб-домена, в котором вы разрабатываете его в (локальный, если вы работаете на локальном хосте), controllerOne является контроллером вы запрашиваете в случае с пользователь нажимает «да», а actionOne - это действие контроллера «controllerOne», вызываемого при нажатии пользователем «да». То же самое для controllerTwo и actionTwo.

EDIT: Вы используете кнопку отправки. Он имеет собственное действие href (действие формы). Таким образом, вам может понадобиться создать свою собственную кнопку, используя ссылку «a». Например:

<a id="createstudent" style="margin-left: 8px; margin-top:-10px; padding: 5px; background-color: #EA7A00; color: white; width: 62px; height: 25px; border: 1px solid #4B1800;cursor: pointer;">Example</a> 

После того, как вы нажмете на нее, она HREF вас правильные действия в соответствии с вариантом вы выбрали (да или нет).

Вам, конечно, придется редактировать стили CSS как свое желание.

+0

Поп-сообщение происходит, но не имеет значения, что я нажимаю. Он вызывает действие по умолчанию. Он игнорирует команду location.href – thr

+0

Возможно, это потому, что вы используете кнопку отправки. Это, конечно же, его собственное действие href (которое будет действием формы). Это значит, что вам нужно создать свою кнопку в качестве ссылки. Например, замените виджет TbButton на: Example Как только вы нажмете на него, вы получите правильное действие. Вам, конечно, придется редактировать стили CSS. – Mundo

0

Thanx для ответа Mundo. Я думаю, что я решил это, сделав это:

<script> 
$("#createstudent").click(function(e){ 
    e.preventDefault(); 

bootbox.confirm("<?php echo Yii::t('default', 'Do you want to register this student?');?>", function(result) { 
    if(result){ 
     $('#student-form').submit(); 
     window.location = 'http://localhost/myproject/index.php/contract/studentcreate/'+'<?php echo $maxid ?>'; 

    } else { 
    console.log("Confirmed: "+result); 
     $('#student-form').submit(); 
    } 

}); 
}); 
</script> 

Я также попробую ваше решение! Спасибо еще раз за помощь!

+0

будьте осторожны с этим решением. вы можете вызвать условие гонки, если несколько человек загружают страницу, прежде чем кто-то нажимает кнопку регистрации. лучше иметь функцию 'studentcreate', чтобы получить новый' $ maxid', чем иметь значение jquery на странице. – vortextangent

Смежные вопросы