changing my forms get url params - yii

i made a simple form with checkboxlist() when i submit the form using get it goes to the next page, but the url is nasty looking.
http://mysite/dev/research/abc/all/?Abc[type]=N&Abc[type][]=1&Abc[type][]=2&Abc[type][]=3&yt0=Search
how would i change it to something like this?
http://mysite/dev/research/abc/all/?type=N&type[]=1&type[]=2&type[]=3
or if possible something nicer looking like
?type=1,2,3
note that i don't want &yt0=Search either
in my controller
public function actionIndex()
{
$model=new ABC;
$this->render('index',array(
'model'=>$model
));
}
in my view i have this
<?php $form = $this->beginWidget('CActiveForm', array(
'id'=>'shop',
'action'=>$this->createUrl('/modulename/abc/all'),
'method'=>'get',
'enableAjaxValidation'=>false,
));
echo $form->checkBoxList($model,'type', $arr,
array('separator'=>'',
'template'=>'<div class="col-md-6 col-xs-12">{input} {label}</div>',
'uncheckValue'=>N,
)
);
echo CHtml::submitButton('Search', array('class'=>'btn btn-success'));
echo CHtml::button('Clear Filter', array('class'=>'btn btn-link', 'type'=>'reset'));
$this->endWidget();
?>
UPDATE:
figured it out. had to add 'name'=> 'type'
but how do i remove &yt0=Search
echo $form->checkBoxList($model,'type', $arr,
array('name'=> 'type',
'separator'=>'',
'template'=>'<div class="col-md-6 col-xs-12">{input} {label}</div>',
'uncheckValue'=>N,

you could use CHtml:button to not post the &yt0=Search
<?php
echo CHtml::button('Search',
array(
'submit'=>array('/modulename/abc/all'),
'class'=>'btn btn-success'
)
);
?>

Related

ajaxValidation is not working when i use custom id in htmlOption Array

i need custom id eg, 'id'=>table_name in below code. When i remove id from htmloptions array, ajax validation works fine, but it does no when i use id.
<div class="form">
<?php
$form=$this->beginWidget('bootstrap.widgets.TbActiveForm', array(
'id'=>'data-fixer-form',
'enableAjaxValidation'=>true,
'htmlOptions'=>array(
'onsubmit'=>"return false;",/* Disable normal form submit */
'onkeypress'=>" if(event.keyCode == 13){ ajaxReplaceValue(event); } " /* Do ajax call when user presses enter key */
),
));
?>
<?php echo $form->dropDownListControlGroup($model,'table_name',$tableNames,array('id'=>'table_name','onchange'=>'getColumn(event)','class'=>'span4')); ?>
<?php echo $form->dropDownListControlGroup($model,'column_name',$columnNames,array('id'=>'column_name','class'=>'span4')); ?>
<?php echo $form->textFieldControlGroup($model,'search_for',array('id'=>'search_for','placeholder'=>tTools('dataFixer','search_for'),'class'=>'span4')); ?>
<?php echo $form->textFieldControlGroup($model,'replace_with',array('id'=>'replace_with','placeholder'=>tTools('dataFixer','replace_with'),'class'=>'span4')); ?>
<div class="form-actions">
<?php
echo CHtml::submitButton(t('common','submit'), array (
'id'=>'dataFixerSubmitBtn',
'class'=>'btn btn-primary',
'identity'=>'',
'dataFetched'=>'0',
'onclick'=>'ajaxReplaceValue(event);'
));
?>
</div>
<?php $this->endWidget(); ?>
finally i got the solution. We need to prepend Model Name befor id as below
'id'=>'DataFixer_table_name'
where DataFixer is model name

Yii CActiveForm expects object and not array

My Goal:
I am trying to filter a model, based on a GET parameter, and populate a form based on this.
What I require is that when users select the update icon on the Gridview
I will
grab the 'telephone number' they want to edit,
populate a form with the telephonenumber's data
allow the user to edit this data for the telephonenumber and submit
I then run my own custom sql update query based on the new data.
My Problem
My gridview can successfully capture the telephonenumber for a selected row.
It can successfully send this to the Controller Update method (see below)
I cannot however filter a model based on this telephonenumber and then populate a form with this model.
My Error
get_class() expects parameter 1 to be object, array given
/framework/web/helpers/CHtml.php(2220)
/framework/web/helpers/CHtml.php(2220): get_class(array())
/framework/web/helpers/CHtml.php(1236): CHtml::resolveName(array(), "TelephoneNumbers_TelephoneNumber")
/framework/web/widgets/CActiveForm.php(562): CHtml::activeLabelEx(array(), "TelephoneNumbers_TelephoneNumber", array())
/views/dateAudiid/editupdateform.php(18): CActiveForm->labelEx(array(), "TelephoneNumbers_TelephoneNumber")
/framework/web/CBaseController.php(126): require("/var/www/OMReport/protected/views/dateAudiid/editupdateform.php")
Here's my Gridview.
$this->widget('bootstrap.widgets.TbGridView', array(
'id'=>'dateaudiidcondensed-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
array(
'class'=>'bootstrap.widgets.TbButtonColumn',
'template'=>'{update}',
'buttons'=>array
(
'update' => array
(
'url'=>'Yii::app()->createUrl("dateAudiid/Update/",array("TelephoneNumbers_TelephoneNumber"=>$data->TelephoneNumbers_TelephoneNumber))',
),
),
),
'TelephoneNumbers_TelephoneNumber',
'FormId_Formid',
'Date',
'AudibeneID_Audibene_ID'
),
));
Here's my Controller
public function actionUpdate($TelephoneNumbers_TelephoneNumber)
{
$criteria=new CDbCriteria;
$criteria->compare('TelephoneNumbers_TelephoneNumber',$_GET['TelephoneNumbers_TelephoneNumber'],true);
$criteria->limit = 1;
$criteria->offset = 1;
$model = DateAudiidCondensedByAudibeneId::model()->findAll($criteria);
$this->render('editupdate',array('model'=>$model));
}
Here's my View
<?php
/* #var $this DateAudiidController */
/* #var $model DateAudiidCondensedByAudibeneId */
?>
<h1>Update Assignments </h1>
<?php echo $this->renderPartial('editupdateform', array('model'=>$model)); ?>
Here's my Form
<div class="form">
<?php
$form=$this->beginWidget('CActiveForm', array(
'id'=>'date-audiid-condensed-by-audibene-id-customupdate-form',
'enableAjaxValidation'=>false,
)); ?>
<p class="note">Fields with <span class="required">*</span> are required.</p>
<?php
echo $form->errorSummary($model); ?>
<div class="row">
<?php echo $form->labelEx($model,'TelephoneNumbers_TelephoneNumber'); ?>
<?php echo $form->textField($model,'TelephoneNumbers_TelephoneNumber'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'FormId_Formid'); ?>
<?php echo $form->textField($model,'FormId_Formid'); ?>
<?php echo $form->error($model,'FormId_Formid'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'Date'); ?>
<?php echo $form->textField($model,'Date'); ?>
<?php echo $form->error($model,'Date'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'AudibeneID_Audibene_ID'); ?>
<?php echo $form->textField($model,'AudibeneID_Audibene_ID'); ?>
<?php echo $form->error($model,'AudibeneID_Audibene_ID'); ?>
</div>
<div class="row buttons">
<?php echo CHtml::submitButton('Submit'); ?>
</div>
<?php $this->endWidget(); ?>
</div><!-- form -->
My Thoughts / What I've tried so far
I am returning the model as an array...but my form wants it as an object.
I need to change something in the way I filter my model in the Controller Update action, however I cannot see how to do this.
All my other methods use similar model filtering code.
here is what you can do to fix this :
your form is trying to use models labeling but you have given an array, ->findAll() will return an array of models, here you need a single object of model
the error your having is because $model in filter of your grid needs to be an object of model which here will try to validate using this model, so won't work when you are giving it an array of your models,
if you want to filter the results based on something, you need to do this where the dataprovider of your grid is being populated, so in this case, is in $model->search()
get the parameter and append it to that criteria
so your grid could look like this:
$this->widget('bootstrap.widgets.TbGridView', array(
'id'=>'dateaudiidcondensed-grid',
'dataProvider' => $model->search(), //create a new model with search scenario
'filter' => $model, // here use that model to validate fields
'columns'=>array(
.
.
.
),
));
and in your models search method:
public function search() {
$criteria = new CDbCriteria;
// grab the sent data and use it here
$tel = Yii::app()->request->getParam('TelephoneNumbers_TelephoneNumber' , null);
if(!empty($tel))
$criteria->compare('TelephoneNumbers_TelephoneNumber' , $tel , true);
.
.
.
return new CActiveDataProvider($this, array(
'criteria' => $criteria,
));
}
Here's what eventually worked for me
The usage of 'findByAttributes' to filter and return a model to the Form
public function actionUpdate($TelephoneNumbers_TelephoneNumber)
{
$model = DateAudiidCondensedByAudibeneId::model()->findByAttributes(array("TelephoneNumbers_TelephoneNumber" => $_GET['TelephoneNumbers_TelephoneNumber']));
$this->render('editupdate',array('model'=>$model));
}

WordPress WP_Query - Can't query post_title

I can't get the following code to pass a LIKE parameter a return just the posts starting with "jazz".
<?php
$artist_post_title = 'jazz'
$args = array(
'post_type' => 'artists',
'post_title' => '%' . $artist_post_title
);
?>
<?php $user_query = new WP_Query( $args); ?>
<?php if( $user_query->have_posts() ) : ?>
<?php while ( $user_query->have_posts() ) : $user_query->the_post(); ?>
<?php the_title(); ?><br />
<?php endwhile; ?>
<?php wp_reset_postdata(); // reset the query ?>
<?php endif; ?>
I was intrigued by your question, and did some digging myself.
https://wordpress.stackexchange.com/questions/18703/wp-query-with-post-title-like-something
Basically, by defining a filter for WP_Query you can create a precise result set.

Custom search in Yii model for CGrid view on relational data

I have a custom search in my model noted below, It works with out any issue in MySQL and when I step through the code with NetBeans Yii builds the query properly but returns no rows. I run the same query in MySQL and I get the intended rows of information. Is there something I am doing wrong?
public function fnSearch(){
$nParts=explode(" ", $_REQUEST['fnText']);
$criteria=new CDbCriteria;
$criteria->condition='first_name like ":fname" and last_name like ":lname"';
$criteria->params=array(';fname'=>trim($nParts[0]).'%', ':lname'=>trim($nParts[1]).'%');
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
My test form looks like this:
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'test-form',
'enableAjaxValidation'=>false,
)); ?>
<?= CHtml::textField('fnText'); ?>
<?php $this->endWidget(); ?>
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'employees-grid',
'dataProvider'=>$model->fnSearch(),
// 'filter'=>$model,
'columns'=>array(
'first_name',
'last_name',
array(
'class'=>'CButtonColumn',
),
),
)); ?>
The controller has this:
public function actionTest(){
$model=new Employees;
$this->render('test',array(
'model'=>$model,
));
}

yii how to combine CJuiAutoComplete option select with php variable

How do I include a PHP variable in a CJuiAutoComplete jquery? My sample below was not successful. Sorry for my bad English.
<?php
echo $count=$t['id'];
$this->widget('zii.widgets.jui.CJuiAutoComplete',
array(
'model'=>$model,
'attribute'=>"jwtn".$t["id"],
'sourceUrl'=>$this->createUrl('KemsainsCalon/lookup'),
'htmlOptions'=>array('placeholder'=>$model->isNewRecord ? "Nama ahli" : "ok"),
'options'=>
array(
'showAnim'=>'fold',
'select'=>"js:function(parsoalan, ui) {
// below is my problem, #KemsainsCalon_jwtn_id<?php echo $count?>, how do I concat php variables in jquery
$('#KemsainsCalon_jwtn_id<?php echo $count?>').val(ui.item.id);
}"
),
'cssFile'=>'jquery-ui.css',
));
?>
`
You can handle $count like you would in a normal php string. select may be javascript code but it's still a php string for now.
...
'select'=>"js:function(parsoalan, ui) {
$('#KemsainsCalon_jwtn_id".$count."').val(ui.item.id);
}"