Yii : CJuidialog and iframe - yii

I'm using Yii framework. I need to create dialog using iframe. How can i create CJuidialog in iframe? If you have some experience with it, please share.
Thanks.

I am using CjuiDialog For creating playlist
In My Layout (playlist Button)
`Add To playList`
By Clicking Above Button id refer the following code
In View Page
$('#addavtoplaylist').live('click',function(){
$('#cru-frame').attr('src','".Yii::app()->createAbsoluteUrl("playlist/add",array('id'=>$this->model->av_id))."');
$('#cru-dialog').dialog('open');
return false;
});
add the dialog code in the same page
<?php
//--------------------- begin new code --------------------------
// add the (closed) dialog for the iframe
$this->beginWidget('zii.widgets.jui.CJuiDialog', array(
'id'=>'cru-dialog',
'options'=>array(
'title'=>'Add To Play List',
'autoOpen'=>false,
'modal'=>true,
'width'=>550,
'height'=>300,
'close'=>'js:function(){
}',
),
));
?>
<iframe id="cru-frame" width="100%" height="100%"></iframe>
<?php
$this->endWidget();
//--------------------- end new code --------------------------
?>

Use the following code in your view file
$this->beginWidget('zii.widgets.jui.CJuiDialog',array(
'id'=>'mydialog',
// additional javascript options for the dialog plugin
'options'=>array(
'title'=>'Dialog box 1',
'autoOpen'=>false,
),
));
echo 'dialog content here';
$this->endWidget('zii.widgets.jui.CJuiDialog');
// the link that may open the dialog
echo CHtml::link('open dialog', '#', array(
'onclick'=>'$("#mydialog").dialog("open"); return false;',
));

Related

Errors on submit in a popup box?

How to show the validation errors in a form in a pop dialogue box?Instead of showing it in the top of the form as a separate div, i want to show those errors in a popup dialogue box so that user clicks okay and dismiss the box.How to do this in yii?
Register your own javascript function name to the afterValidate, which is one of the options in clientOptions property in CActiveForm form class.
Your form declaration should have
'clientOptions' => array(
'validateOnSubmit' => true,
'afterValidate' => 'js:myFunc',
),
And Your form will appear like bellow
<?php
$form = $this->beginWidget('CActiveForm', array(
'id' => 'a-form',
'enableClientValidation' => true,
'enableAjaxValidation' => true,
'errorMessageCssClass' => 'required',
'clientOptions' => array(
'validateOnSubmit' => true,
'afterValidate' => 'js:myFunc',
),
));
?>
------Your form fields------------
------Your form fields------------
------Your form fields------------
<?php $this->endWidget(); ?>
Now, Your myFunc code:
<script type="text/javascript" charset="utf-8">
function myFunc(form, data, hasError)
{
if (hasError)
{
var errors='';
$.each(data, function(obj)
{
errors+=data[obj][0]+"\n";
});
alert(errors);
// Do what ever you want
return true;
}
}
</script>
If you enable client side validation, then you will get error message under textbox, dropdown. There is no in-built option for poping up error message.
still if you need popup error message display, then you have to do with jquery. Then add in Yii forum to help others as well :-)
Refer this link (Yii forum) for details about client side validation
You can build the HTML view yourself with a custom CFormModel and use getError() method in a modal popup.
See : http://www.yiiframework.com/doc/api/1.1/CModel#getError-detail
and : http://www.yiiframework.com/doc/api/1.1/CFormModel

Yii framework How to integrate login form in header that should be visible on every page ,

I have three module 1 ) client 2 ) producer and search , I want to show login form in header
Login form is for producer , means producer can login
themes\mytheme\views\layouts
<div id=weppr>
<div class=fr header-right>
<?php $form=$this->beginWidget(CActiveForm, array(
id=>login-form,
enableClientValidation=>true,
clientOptions=>array(
validateOnSubmit=>true,
),
));
echo $form->textField($model,username,array(placeholder=>Enter Email,class=>login-input));
echo $form->passwordField($model,password,array(placeholder=>Enter Password,class=>login-input));
echo CHtml::submitButton(Login,array(class=>login-button));
$this->endWidget();
<div>
<?php echo $content; ?>
</div>
It gives error ,
Is possible to put in main.php , Is it acceptable coding , If not please how to do , and how to integrate login page that should be visible on every page with different module
I think you should try something like this:
LoginWidget.php
<?php class LoginWidget extends CWidget {
public function run() {
$model = new LoginFormModel;
$form= $this->beginWidget('CActiveForm', array(
'id'=>'login-form',
'action'=>array('site/login'),
'enableClientValidation'=>true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
)
));
echo $form->textField($model,'username',array('placeholder'=>'Enter Email',class=>'login-input'));
echo $form->passwordField($model,'password',array('placeholder'=>'Enter Password',class=>'login-input'));
echo CHtml::submitButton('Login',array(class=>'login-button'));
$this->endWidget();
} } ?>
In your Layout File:
<?php $this->widget('LoginWidget'); ?>
That should do it!

Yii and YiiBooster widget modal confirm to url

Using the yiibooster modal widget, I want it to go to a different url if user clicks ok to confirm.
$this->widget('bootstrap.widgets.TbButton', array(
'label'=>'Restart Game',
'type'=>'warning',
'htmlOptions'=>array(
'onclick'=>'js:bootbox.confirm("Are you sure?",
function(confirmed){console.log("Confirmed: "+confirmed);})'
),
));
//this is the url i want it to go to when ok confirmed is clicking
'url' =>array('site/restart?gameId='.$gameRecord->id)
Try this code :
$url = Yii::app()->createAbsoluteUrl('site/restart', array('id'=>$gameRecord->id));
$this->widget('bootstrap.widgets.TbButton', array(
'label'=>'Restart Game',
'type'=>'warning',
'htmlOptions'=>array(
'onclick'=>'js:bootbox.confirm("Are you sure?",
function(confirmed){
if(confirmed) {
window.location = "'.$url.'";
}
})'
),
));
Should it be this:
'url'=>array('site/restart', array('id'=>$gameRecord->id))
Assuiming you have or need the rules in the config?

Yii - Ajax Get based on drop down selection

I am trying to display the price based on the selection of product from a drop down.
View contains:
<?php $form=$this->beginWidget('bootstrap.widgets.TbActiveForm', array(
'id'=>'plan-form',
'enableAjaxValidation'=>true,
)); ?>
<?php echo $form->dropDownListRow($model, 'plan_id',
$planList, array('id'=>'planid', 'prompt'=>'Select Plan',
'ajax' => array('type'=>'GET',
'url'=> Yii::app()->createUrl('mbr/plan/ajaxGetPrice'),
'update'=>'#price'))); ?>
<div id="price">0.00</div>
<?php $this->endWidget(); ?>
Action:
public function actionAjaxGetPrice()
{
Yii::log("Within AjaxGetPrice");
if (Yii::app()->request->isAjaxRequest)
Yii::log("ajax request");
else
Yii::log("regular request");
//$plan=Plan::model()->findByPk((int) $_GET['plan_id']);
//Yii::log(serializ($plan));
// echo $plan->price;
echo "10";
Yii::app()->end();
}
It is not updating the price. Its not calling the action at all. I looked at the suggestions found in Yiiframework and here and tried those and still no luck.
when I add this to the view
<?php
echo CHtml::ajaxLink(
"Get Price",
Yii::app()->createUrl('mbr/plan/ajaxgetprice'),
array( // ajaxOptions
'type' => 'GET',
'update' => '#price'),
array( //htmlOptions
'href' => Yii::app()->createUrl('mbr/plan/ajaxgetprice')
)
);
?>
I get the response when I click on the link, but it renders a separate page with value "10". I have URLFormat = Path.
What am I doing wrong? Any pointers?
You can also try this as shown
<?php echo CHtml::dropDownList('categories','',
$category,
array('ajax'=>array('type'=>'POST','url'=>CController::createUrl('yourController/GetId'),'update' =>'#data'))
);?>
yourController action
public function actionGetId(){
echo 10;
}
And the div
<div id="data">0.00</div>
I'm not really sure how to do this the Yii way but the following javascript should be useful.
$("#yourdropdownidhere").change(function(){
$.ajax({
url: 'your url here', //(dynamically generated by product item)
type: "get",
success: ajaxSuccessHandler
});
});
function ajaxSuccessHandler(obj) {
$('#price').html(obj);
}
I also suggest sending a JSON object as the response for AJAX requests, so it will have an actual structure. A great blog post on this to check out would be Fully ajax website with Yii
I had the same problem and solved it on the controller that renders the view. If you are using renderPartial assure that the processOutput() option is set to TRUE, otherwise Yii will not attach any Javascript.
If you use render instead of renderPartial it also works.

CCaptcha displaying no image yii

I have a user registration form, in which I am trying to display a Captcha image by using Yii widget CCaptcha, however my image link appears broken,
Controller file:
public function actions()
{
return array(
// captcha action renders the CAPTCHA image displayed on the contact page
'captcha'=>array(
'class'=>'CCaptchaAction',
'backColor'=>0xFFFFFF,
),
);
}
Model File:
public function rules()
{
return array( array('verifyCode','captcha','allowEmpty'=>!CCaptcha::checkRequirements(),'on'=>'insert'),
);
}
And view file:
<?php if(CCaptcha::checkRequirements()): ?>
<div class="row">
<?php echo $form->labelEx($model,'verifyCode'); ?>
<div>
<?php $this->widget('CCaptcha'); ?>
<?php echo $form->textField($model,'verifyCode'); ?>
</div>
<div class="hint">Please enter the letters as shown.
<br/>Letters are not case-sensitive.</div>
<?php echo $form->error($model,'verifyCode'); ?>
</div>
<?php endif; ?>
As a answer provided somewhere I also tried giving the access rules in my controller file as
public function accessRules()
{
return array(
array('allow',
'actions' => array('captcha'),
'users' => array('*'),
),
);
}
But nothing seems to be working.
The problem was with the controller file,it should have been,
public function accessRules()
{
return array(
array('allow',
'actions'=>array('create', 'captcha'),
'users'=>array('*'),
),
}
whereas I had mentioned the action for captcha at the end, which I figured out is not allowed in Yii. All the allow actions for * should be together.
Yii captcha will create a png image. A possible explanation for the broken image link would be a missing GD extension or imagick extension, which can be identified by the presence of the following text in your error.log:
call to undefined function imagecreatetruecolor
For details and fix see "call to undefined function imagecreatetruecolor" error in PHP & pChart