You are viewing revision #6 of this wiki article.
This is the latest version of this article.
You may want to see the changes made in this revision.
Introduction ¶
In this tutorial we will learn how to realize a create interface using a dialog.
Here is a similar tutorial that uses Ajax link to achieve the goal, but we will use a simpler and more effective approach: the event onSubmit of the form.
Scenario ¶
Let's imagine we have a classroom with many students. If the user fills in the form of the student and there is no classroom made, he will have to create a classroom first and lose the already inserted input.
We want to allow the user to create the classroom from the form of the student, without changing pages.
Preparation of the form ¶
First of all we need a form for creating the classroom. We can generate a Crud for classroom with gii and adapt the code to our needs.
Once we are satisfied with our form and it works with the usual submit, we can use it in a dialog.
Enhance the action create ¶
We need to enhance the action create of the classroom controller.
Let's change it this way:
public function actionCreate()
{
$model=new Classroom;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['Classroom']))
{
$model->attributes=$_POST['Classroom'];
if($model->save())
{
if (Yii::app()->request->isAjaxRequest)
{
echo CJSON::encode(array(
'status'=>'success',
'div'=>"Classroom successfully added"
));
exit;
}
else
$this->redirect(array('view','id'=>$model->id));
}
}
if (Yii::app()->request->isAjaxRequest)
{
echo CJSON::encode(array(
'status'=>'failure',
'div'=>$this->renderPartial('_form', array('model'=>$model), true)));
exit;
}
else
$this->render('create',array('model'=>$model,));
}
We add some small changes: in case of ajax request we write a json encoded array.
In this array we return a status (failure/success) and the whole form created with renderPartial.
The dialog ¶
Now the back-end is done, let's write the dialog itself.
In the form of the student somewhere we add this code:
<?php echo CHtml::link('Create classroom', "", // the link for open the dialog
array(
'style'=>'cursor: pointer; text-decoration: underline;',
'onclick'=>"{addClassroom(); $('#dialogClassroom').dialog('open');}"));?>
<?php
$this->beginWidget('zii.widgets.jui.CJuiDialog', array( // the dialog
'id'=>'dialogClassroom',
'options'=>array(
'title'=>'Create classroom',
'autoOpen'=>false,
'modal'=>true,
'width'=>550,
'height'=>470,
),
));?>
<div class="divForForm"></div>
<?php $this->endWidget();?>
<script type="text/javascript">
// here is the magic
function addClassroom()
{
<?php echo CHtml::ajax(array(
'url'=>array('classroom/create'),
'data'=> "js:$(this).serialize()",
'type'=>'post',
'dataType'=>'json',
'success'=>"function(data)
{
if (data.status == 'failure')
{
$('#dialogClassroom div.divForForm').html(data.div);
// Here is the trick: on submit-> once again this function!
$('#dialogClassroom div.divForForm form').submit(addClassroom);
}
else
{
$('#dialogClassroom div.divForForm').html(data.div);
setTimeout(\"$('#dialogClassroom').dialog('close') \",3000);
}
} ",
))?>;
return false;
}
</script>
And that's all. In this code we have:
- A link for open the dialog
- the dialog itself, with a div inside that will be replaced with ajax
- the javascript function addClassroom().
This function fires an ajax request to the action create we prepared in the previous step.
The returned form will be placed in the dialog (with eventually, all errors and so on) in case of status failure, in case of status success in the example we replace the div and we close the dialog after 3 seconds.
If you use this system in the form for student, you can return, for example, the id of the newly inserted classroom and select it automatically in a drop down list.
Summary ¶
To make a long story short:
- Prepare the usual creation with gii generated code
- Change the action create for answer to Ajax requests
- Place the link/dialog/js wherever you want.
This methodology is very comfortable because it changes anything in the code of the _form, so any eventually added field in classroom will be available in both standard and dialog insert.
Why the ajax method is not recognized as ajax request?
Hi, I got problem with the controller, the ajax request is not recognized as ajax, it always go to the else part. My current workaround is by create the ajaxCreate method so that it will no longer check whether the request is ajax or not and straight away display the json no bother with redirections.
Can you also gave me an example on how use this as the update? My idea is to only have admin page, view, create and update are done via dialog.
Thanks a lot.
$adinugro
For update is the same process, you have to change the url of the ajax request to be : 'url'=>array('classs/update') and modify the action update like you edited the create.
If you have lot of this widget in the same page, be carefull with index: give to each form a unique id (like class="divForForm<?echo $model->id?>").
About not recognizing ajax request, that's strange, I never experminented such behavior, anyway thank for sharing your workaround
exit; vs Yii::app()->end();
I remember coming across a discussion somewhere that it is better to use Yii::app()->end() instead of 'exit', as in your example. Does anybody know why this is, or if it's true? If so, perhaps this post should be updated.
exit
Yii::app()->end will give some complication in debug mode, as it will append the whole log table spoiling the json output.
For semplicity, as there are no more task that the application is supposed to trigger after outputting the json, I used exit.
If you are confident that in your case Yii::app()->end will safely work, you can use this one as well, but updating the post can make the developing experience a bit more hard for future developers.
And, last but not the least, I like exit...
Update select
Great article, thank you :)
I added this to the controller for a success
echo CJSON::encode(array( 'status'=>'success', 'div'=>"Classroom successfully added", 'option'=>CHtml::tag('option', array('value' => $model->id), CHtml::encode($model->name), true), 'id'=>$model->id, ));
and this to the form - assuming there is a classroom_id select list
if (data.option!='') $('#Student_classroom_id').append(data.option); if (data.id!=0) $('#Student_classroom_make_id').val(data.id);
Reloading a dropDownList after successful insert.
Zaccaria, Thanks for this fine piece of howto.
I also wanted to update a dropDownList after the success of insertion from the dialog. So this is how I did it, thought might help people.
I have already implemented a method in the Controller which returns a JSON data for the dropDownList needing a reload.
public function actionJSONPositionTitles() { $criteria = new CDbCriteria; $criteria->order = 'Title ASC' ; $data = Model::model()->findAll($criteria); $data=CHtml::listData($data,'ID','Title'); echo CHtml::tag('option', array('value'=>''),'',true); foreach($data as $value=>$name) { echo CHtml::tag('option', array('value'=>$value),CHtml::encode($name),true); } Yii::app()->end(); }
Then giving the permission to the lets say Admin in accessRules()
array('allow', // allow admin user to perform 'admin' and 'delete' actions 'actions'=>array('admin','delete','JSONPositionTitles'), 'users'=>array('admin'), ),
And finally, with adding another CHtml::ajax() in success IF block we can update the dropDownList after successful insertion.
<script type="text/javascript"> // here is the magic function add() { <?php echo CHtml::ajax(array( 'url'=>array('model/create'), 'data'=> "js:$(this).serialize()", 'type'=>'post', 'dataType'=>'json', 'success'=>"function(data) { if (data.status == 'failure') { $('#mydialog div.divForForm').html(data.div); // Here is the trick: on submit-> once again this function! $('#mydialog div.divForForm form').submit(add); } else { ".CHtml::ajax(array( 'type'=>'POST', 'url'=>CController::createUrl('JSONPositionTitles'), 'update'=>'#DropDown_ID' ))." $('#mydialog div.divForForm').html(data.div); setTimeout(\"$('#mydialog').dialog('close') \",2000); } } ", ))?>; return false; } </script>
Typo
Sorry, actionJSONPositionTitles() doesn't return a JSON, wrong copy and paste, still it do the job.
Updating a dropdownlist
You can avoid to do a second ajax call, simply return the depending dropdown in the response for successfully insert.
updating a dropDownList
Yes, you are right, also I didn't pay attention to RussellEngland's comment which is a better demonstration of the same issue.
Ajax Validate
I just want to say thanks Zaccaria! I've been banging my head against a wall. I flipped a few things around to update the model, rather than create a new one.
Have you gotten ajax validation to work with this process? That's the next project that will probably make me go bald.
Thanks!
Logan
Blank dialog
Hi,
I'm rather noobish on yii and following your tutorial, I click on the link, it opens the dialog with nothing on it.
The json request returns {"status":"failure","div":null}.
Everything is done as the tutorial. Is there something I am missing ?
Thanks for the help!
I will place the code here:
<?php echo CHtml::link('Criar Nova Permissão', "", // the link for open the dialog array( 'style'=>'cursor: pointer; text-decoration: underline;', 'onclick'=>"{editPermission(); $('#dialogPermission').dialog('open');}"));?> | <?php echo CHtml::link('Pesquisa Avançada','#',array('class'=>'search-button')); ?> <?php $this->beginWidget('zii.widgets.jui.CJuiDialog', array( // the dialog 'id'=>'dialogPermission', 'cssFile'=>'jquery-ui-1.8.13.custom.css', 'theme'=>'roriz/css/ui', 'themeUrl'=>Yii::app()->request->baseUrl.'/themes', 'options'=>array( 'title'=>'Criar Nova Permissão', 'autoOpen'=>false, 'modal'=>true, 'width'=>550, 'height'=>470, ), ));?> <div class="divForForm"></div> <?php $this->endWidget();?> <script type="text/javascript"> // here is the magic function editPermission() { <?php echo CHtml::ajax(array( 'url'=>array('permission/create'), 'data'=> "js:$(this).serialize()", 'type'=>'post', 'dataType'=>'json', 'success'=>"function(data) { if (data.status == 'failure') { $('#dialogPermission div.divForForm').html(data.div); // Here is the trick: on submit-> once again this function! $('#dialogPermission div.divForForm form').submit(editPermission); } else { $('#dialogPermission div.divForForm').html(data.div); setTimeout(\"$('#dialogPermission').dialog('close') \",3000); } } ", ))?>; return false; } </script>
on the actionCreate:
/** * Creates a new model. * If creation is successful, the browser will be redirected to the 'view' page. */ public function actionCreate() { $model=new Permission; // Uncomment the following line if AJAX validation is needed // $this->performAjaxValidation($model); if(isset($_POST['Permission'])) { $model->attributes=$_POST['Permission']; if($model->save()) { if (Yii::app()->request->isAjaxRequest) { echo CJSON::encode(array( 'status'=>'success', 'div'=>"Permissão inserida com sucesso." )); exit; } else $this->redirect(array('view','id'=>$model->id)); } } if (Yii::app()->request->isAjaxRequest) { echo CJSON::encode(array( 'status'=>'failure', 'div'=>$this->renderPartial('_form', array('model'=>$model), true))); exit; } else $this->render('create',array('model'=>$model,)); }
and finally the view:
<?php $this->breadcrumbs=array( 'Entities'=>array('index'), 'Create', ); $this->menu=array( array('label'=>'List Entity', 'url'=>array('index')), array('label'=>'Manage Entity', 'url'=>array('admin')), ); ?> <h1>Create Entity</h1> <?php echo $this->renderPartial('_form', array('model'=>$model)); ?>
Blank dialog eureka
Just found out and sharing for anyone to check it out.
I changed the yii generated files and put locale characters with accents and saved it. Because they were generated with encoding in ansi, i had to save it in utf-8 without bom, change the error characters and save it again.
Apparently, php can't read these files and it doesn't report errors either.
Not working
For me it's not working. Maybe I don't understand well how to do this but I copy/paste the code and when I click on the submit button of the dialog form it only prints the JSON code generated by the actionCreate method.
What's wrong? I think that it's not working the CHtml::ajax
Ajax validation
If you want to enable ajax validation in form loaded with ajax:
In the controller then rending partial form add third true parameter, this will include also all scripts from the view:
'div' => $this->renderPartial('_form', array('model' => $model), true, true)));
In the partial form you are rendering add:
Yii::app()->clientscript->scriptMap['jquery.js'] = false;
Then jquery script will be not included second time
Link does not work after clicked once
The code works well, but after I created a new model the link did not work any more (dialog did not pop up). What could be the problem? Thanks!
Enabling 'processing' Parameter of renderPartial
Thank you for that article.
Following problem: I wanted to have another widget within the JDialog (DatePicker), so I had to set the 4th parameter of renderPartial() to 'true'.
But then only the first click on the link is working. If I close the dialog and click again, the dialog doesnt show. Any idea what could go wrong here?
Maybe it's the same problem as with the previous poster.
Edit: I had to stop loading jquery every request. Thanks tydeas for your info in your wiki article linked in the beginning of the tutorial.
what is this? 'data'=> "js:$(this).serialize()",
I checked Jquery doc about serialize(), but still don't understand what is this code doing for you?
what is $(this) referring to? why??
Thanks a million!
re nettrinity
data are the data passed via post.
$(this) is referrring to the form, .serialize take all the contents of the field in the form and send to the server.
Using this data=> $(this).serialize() you will create an ajax request with in the $_POST the attributes, so it can be managed to the standard action.
CMaskedTextField inside dialog fails
I'm trying to use a CMaskedTextField inside the dialog but it fails. Instead it displays like a normal textField. Does anybody know the reason why?
Same happens with CJuiDatePicker as well..
Re: Bug In Code
fr0d0z,
Tried your code and zaccaria's original code and your code would not post data where as zaccaria's does.
Can you verify your comment's code?
Re: Bug in code
@w00tw00t111: Just looked over my code and I'd gotten it more complicated than I needed to. So, now, don't think I can verify the code in my comment. Will delete that comment.
Thanks!
What if i want to redirect to updated page
This code is working fine, but it adds the classroom in the background, how can i redirect the user to say classroom index action, so that updated page loads after the dialogue has finished?
ajax not working
I have copied above code and it doesn't work for me.
I have changed Classroom to ProducType.
Dialog box is opening, form ir generated correctly and create action is called.
However, when I enter data into ProductType dialog, my code goes to producttype/create action, but it seems that it is not Ajax request.
First, Yii::app()->request->isAjaxRequest is always false
Second, for test purpose I have added additional parameter $isajax=1 and this parameter is sent to create action. Also I have changed the following line
if (Yii::app()->request->isAjaxRequest)
to
if (Yii::app()->request->isAjaxRequest || $isajax == 1) //added additional test parameter.
So, now create action return the following:
echo CJSON::encode(array(
'status'=>'success', 'div'=>"Type successfully added" )); exit;
As a result I have a blank page with text Type successfully added. So there is no ajax, but simply text is echoed.
What it could be?
very nice!
thanks for the tutorial!
Just adding new data to the dropDownList
First of all thanx for this useful tutorial.
I want to add one thing, which is similar to the comments of Russel England and behdad, with the difference, that after adding a new classroom, the new entry is automatically selected in the dropDownList.
To achieve this I added the following code to the controller:
... if($model->save()) { if (Yii::app()->request->isAjaxRequest) { $newId = $model->getPrimaryKey(); $newClassroom = $model->find('id=:newId', array(':newId' => $newId))->name; echo CJSON::encode(array( 'status'=>'success', 'div'=>"Classroom ".$newClassroom." successfully added", 'value'=>array(0=>$newId, 1=>$newClassroom), )); exit; }
That means that I have selected the new entry from my classroom table and pass name and id via CJSON::encode to the _form.php
Here the data is fetched anyway and so I had only to add this to the javascript:
$('#Person_classroom_id').prepend('<option value=\"' + data.value[0] +'\">' + data.value[1] + '</option>'); $('#Person_classroom_id option[value=\"' + data.value[0] +'\"]').attr('selected', true);
The first line puts the new entry at the top of the select-field and the 2nd line selects it.
That's all.
A way to do it without ajax
Great tutorial dude, much appreciated.
However I would like to know if there was a way to do it but without ajax submitting... calling directly the controller action... My purpose would be to upload files but it's impossible using javascript so I would like to call directly controller action without ajax post. As if I was on /myModel/create.
Any Idea ?
Reply to renathy question
Hi Renathy,
I had a very same problem, and initially I thought that it was Ajax problem, as some other users reported it. However, since you can see the rendered form initially in your dialog box, it means that the isajax function worked properly and returned status=failure, so the from is loaded in dialog box. However, if you have a typo, as I had, when you hit the submit button nothing happens. My typo was in model _form-->, and I hadn't replaced the classroom to author, see below:
$('#dialogAuthor div.divForForm form').submit(addClassroom);
why the same function is called again
After digging for long time i could not under stand the line
$('#dialogClassroom div.divForForm form').submit(addClassroom);
why the same function is again called?
and why the argument in the .submit() is not passed like .submit(addClassroom()) because addClassroom is a function?
Please elaborate
Re: why the same function is called again
It works like this. First, when the form the dialogue is opened by clicking on the link produced in the from. However, it's empty and then actionCreate is called through addClassroom JavaScript function. Since create form is not processed yet in the actionCreate and there is no $_Post variable, the JSON return two data: 1-it's failure status, and 2- the whole create form html by this line:
'div'=>$this->renderPartial('_form', array('model'=>$model), true)));
Only now the user can see the actual form on the JDialogue window. So far, addClassroom JavaScript function has been run once to only load the from. That's why the form needs the second addClassroom in submit function to actually pass the data from the dialogue to the actionCreate. I'm not expert in javascript, but I believe that's how it works.
Re: why the same function is called again
Thanks Hesam for the explanation !
Thanks
Thank you Hesam, for your reply
if (data.status == 'failure') { $('#dialogClassroom div.divForForm').html(data.div); // Here is the trick: on submit-> once again this function! $('#dialogClassroom div.divForForm form').submit(addClassroom); }
so when no form is submitted and the statement
if (data.status == 'failure')
returns true, so the empty form is loaded by the line
$('#dialogClassroom div.divForForm').html(data.div);
at this point the next line
$('#dialogClassroom div.divForForm form').submit(addClassroom);
will also get executed because it is in the same "if" statement, so will this line not submit the form?
but as per ur reply , this line will get executed when the form is submittd by the user.
This thing is confusing me
Thanks
ok i got the point
By reading the jquery API at http://api.jquery.com/submit/ I under stood that actually the line
$('#dialogClassroom div.divForForm form').submit(addClassroom);
is binding an handler to submit event. But on thing still not clear, as per Jquery API we need to pass handler function to .submit(), can we pass a function without parenthesis?
Thanks
Re: to use () or not to use ()
It's getting funny since we're trying to interpret sb's else code :). The one million dollar answer to your question is the way JavaScript handles functions. If you do not use the parantheses, the same way in the above example, you're passing the function itself to .submit, let's say the object of the addClassroom function. However, if you use (), you're telling Javascript that you're interested in the result of the function, the function return value, not the function itself. Hence, if you use (), the function is called and unknown return value is returned to .submit as handler, which won't work eventually. I hope it helped.
dialog options
Hi,
In order to set dialog options this line formDialog.js#13 has to be changed like following.
dialog.dialog(); ==> dialog.dialog(options);
Problem with 'data'=> "js:$(this).serialize()",
I have a problem when I wanna send some variables to be displayed inside the form
Instead of using
'data'=> "js:$(this).serialize()",
I use this
'data'=> array( 'time_from'=> 'js:start.format("HH:MM:00")', 'time_to'=> 'js:end.format("HH:MM:00")', 'channel_id' => $channel->id, 'schedule_date'=> 'js:start.format("yyyy-mm-dd")' ),
Its working fine but whne I submit the form in the dialog it takes me to the full page instead in reloading form inside the dialog!
How can I fix this? Thanks!
Not working with CJuiAutocomplete
Thank you very much for this great article.
I've been able to implement the code and I see the dialog and save a new record. However, in my create view I've two CJuiAutocomplete that aren't working and I don't know why. Thank you for any clue.
Nesting forms isn't allowed
I didn't get this to work at first. The form element was being deleted by jquery's html() method in Chrome.
So I went to the Yii IRC and we solved it there. Found out that nested forms aren't allowed ;)
To fix this, just put the div where your 'classroom creation' form will be in
[html] <div class="divForForm"></div>
at the END of the student's _form.php, so under the endWidget of the student form (where the form tag is being closed)
problem with dropdown dependent
thanks for tutorial,
I was experiencing with my dropdown dependent. when click on the dropdown country, the cities is not shown.
solve with change a little in actionCreate:
'div'=>$this->renderPartial('_form', array('model'=>$model), true)));
to :
'div'=>$this->renderPartial('_form', array('model'=>$model), true, true)));
its work for me, hope help any body else.
edit !!
another issue come up after that change. "new classroom" link only working for first click, so the second click without refreshing the student form will not open the classroom dialog.
solve with a little change again in actionCreate :
if (Yii::app()->request->isAjaxRequest) { echo CJSON::encode(array( 'status'=>'failure', 'div'=>$this->renderPartial('_form', array('model'=>$model), true, true))); exit; }
to:
if (Yii::app()->request->isAjaxRequest) { Yii::app()->clientScript->scriptMap['jquery.js'] = false; echo CJSON::encode(array( 'status'=>'failure', 'div'=>$this->renderPartial('_form', array('model'=>$model), true, true))); exit; }
hope it help. please dont kick my ass if I do wrong...
something doesn't work
I've practically copy/pasted the code, only changing "Classroom" for "People" where I should. The model window comes up, i type the code, i click the button, the dialog closes but the information won't save.
re arrigonfr
Check first of all the json response with firebug, probably you have an error in the controller.
Form Validation
Hi,
First of all, thank you for share this tutorial! I have a question to make. What are supposed to happen when I don't respect the rules validations? In my case I was redirected to the normal action with the rules messages!
I failed in some code?
Thanks!
Giix Problem
If anyone uses Giix probably they get a blank popup so this is the trick:
giix-components/GxController.php line 160
if (Yii::app()->getRequest()->getIsAjaxRequest() && (($form === null) || ($_POST['ajax'] == $form)))
change:
($_POST['ajax'] == $form)
to:
(isset($_POST['ajax']) && $_POST['ajax'] == $form)
When CSRF validation is enabled
I spent half a day figuring out why it was not working for me, so I'd like to share:
Here is what works for me when CSRF is enabled:
function addClassroom() { var theData = $('#dialogClassroom div.divForForm form').serializeArray(); theData.push({name:'<?php echo Yii::app()->request->csrfTokenName ?>', value:'<?php echo Yii::app()->request->csrfToken ?>'}); <?php echo CHtml::ajax(array( 'url'=>array('classroom/create'), 'data'=> "js:theData", ...
zii.widgets.jui.CJuiDatePicker does not work on the Popup form
Just in case some of you encounter the same problem. Pls see following,
if (Yii::app()->request->isAjaxRequest) { echo CJSON::encode(array( 'status' => 'failure', 'div' => $this->renderPartial('_form', array('model' => $model), true, true))); exit; } else $this->render('create', array( 'model' => $model, ));
http://stackoverflow.com/questions/13698645/cjuidatepicker-widget-in-yii-framework
Refresh...
The new element is added in db, but not in the dropdownlist...I have to refresh the page to see the new element in the dropdown...what could be the problem?
refresh
Hi,@erand, I think what you need is a diferent approach.
I have the same issue as you, and I use another tutorial that I don't find right know, but basically you have to return, on success, an HTML tag.
if ($model->save()) { //Return an <option> and select it echo CHtml::tag('option',array ( 'value'=>$model->id, 'selected'=>true ),CHtml::encode($model->ApellidoYNombrePapa),true); }
This routines return a text, in the JSON array.
Also I have some issues with validations and error processing...
If you can mix and figured out how to:
create a link to open a dialog
make this dialog refresh if some rule validation fails.
and on success add a new entry in the combo !
please share,
best regards
PS: Sorry for my poor english.
Refresh...
hi @erand, i think I solved the problem.
I add this in the addNew Method, see the new 'tag' element in the JSON answer:
echo CJSON::encode(array( 'status'=>'success', 'div'=>'Cliente creado exitosamente', 'tag'=> CHtml::tag('option', array ('value'=>$model->id,'selected'=>true), CHtml::encode($model->apellidoynombre),true), ));
Also in the form (_form.php) where is the button.
... else { $('#dialogClassroom div.divForForm').html(data.div); //alert(data.tag); $('#Prestamo_entidad_id').append(data.tag); //<-- new setTimeout(\"$('#dialogClassroom').dialog('close') \",3000); } ...
I hope it helps !
Best Regards.
Refresh...
Hello @xNicox,
Thank you for sharing. I can't get it working cause I don't understand the new line you added:
$('#Prestamo_entidad_id').append(data.tag); //<-- new
Which element is this: #Prestamo_entidad_id ?
Thank you in advance.
Refresh...
hi @erand,
the html ID is the "Select" or "combo" in the form!.
The action in the controller return a new "" element of the "".
I hope it helps!
Best Regards
Refresh...
Hi @xNicox,
Can you please share here your code of that html element (dropdownlist) whose ID is #Prestamo_entidad_id?
Refresh...
hi, @erand, the input in html is created with this line of yii:
echo $form->dropDownList($model, 'entidad_id', GxHtml::listDataEx(Entidad::model()->findAllAttributes(null, true, $criteria))); ?>
because $model is "prestamo", the html is:
....
So, there is your html id!
Refresh...
Hi @xNicox
I was taking care of other issues in my app, and just came back to this...
Thanks to your help, it is working now...I am just wondering how was it working for others without appending the new tag!! Or was it only me that was missing it...
Anyway...thank you @xNicox
Refresh...
hi @erand,
i think they reload the page ...
anyway, i'm happy to help !
you'r welcome
Wiki for Yii2
Hello @zaccaria,
Do you intend to write this wiki for yii2?
Best regards,
please, I want a complete example, but I have an invoice and a lot of products, and to create products from the invoice form, it is possible.
If you have any questions, please ask in the forum instead.
Signup or Login in order to comment.