Hi Euromark
I am using the search plugin on https://github.com/cakedc/search. I am
trying to search for records using the ID field only, that is if i type in
1 on my form input it must show a record with user ID 1. The challenge that
i am having now is when i specify that the input should be the id field,
the input field for the search functionality disappears on my index view,
strange thing is when i specify a different field name the input field
shows.
Below is my code for my Model
public $actsAs = array('Search.Searchable');
public $filterArgs = array(
'id' => array('type' => 'like', 'field' => 'ItSupportRequest.id'),
);
public function findByTags($data = array()) {
$this->Tagged->Behaviors->attach('Containable', array('autoFields'
=> false));
$this->Tagged->Behaviors->attach('Search.Searchable');
$query = $this->Tagged->getQuery('all', array(
'conditions' => array('Tag.name' => $data['tags']),
'fields' => array('foreign_key'),
'contain' => array('Tag')
));
return $query;
}
public function orConditions($data = array()) {
$filter = $data['filter'];
$cond = array(
'OR' => array(
$this->alias . '.id LIKE' => '%' . $filter . '%',
));
return $cond;
}
and here is my controller code.
public $components = array('Search.Prg');
public $presetVars = true; // using the model configuration
public function find() {
$this->Prg->commonProcess();
$this->paginate['conditions'] =
$this->ItSupportRequest->parseCriteria($this->passedArgs);
$this->set('articles', $this->paginate());
}
and in my index.ctp file i have this code.
<?php
echo $this->Form->create('ItSupportRequest', array(
'url' => array_merge(array('action' => 'find'), $this->params['pass'])
));
echo $this->Form->label('Query ID:') . "<br/>";
echo $this->Form->input('name', array('div' => false, 'label' =>
false));
echo $this->Form->submit(__('Search'), array('div' => false));
echo $this->Form->end();
?>
Thanks
Victor
On Mon, Feb 18, 2013 at 1:10 PM, euromark <[email protected]> wrote:
> You would need to properly upgrade the component and make it work with
> your version of cake.
>
> I propose you try https://github.com/cakedc/search
> It is up to date, more sophisticated and does the job with less
> configuration
>
>
>
> Am Montag, 18. Februar 2013 09:43:46 UTC+1 schrieb Victor Musvibe:
>
>> Hi Bakers
>>
>> I implemented a search component from this url http://www.designaeon.com/
>> **cake-php-search-component/<http://www.designaeon.com/cake-php-search-component/>but
>> I have a few problems. At first Cake didn’t recognize the component.
>> After I renamed search.php in SearchComponent.php
>>
>> I got another Error: Declaration of SearchComponent::initialize() should
>> be compatible with Component::initialize(**Controller $controller)
>> [APP/Controller/Component/**SearchComponent.php, line 40]
>>
>> Below is my code for SearchComponent
>>
>> <?php
>> class SearchComponent extends Component {
>>
>> var $controller = null;
>>
>> function initialize(&$controller)
>> {
>> $this->controller = $controller;
>> }
>>
>> function getConditions(){
>> $conditions = array();
>> $data= empty($this->controller->**params['named']) ?
>> $this->controller->params['**url'] : $this->controller->params['**named']
>> ;
>> $this->controller->{$this->**controller->modelClass}->**schema();
>>
>> foreach($data as $key=>$value){
>>
>> if(isset($this->controller->{$**this->controller->modelClass}-**>_schema[$key])
>> && !empty($value)){
>> switch($this->controller->{$**this->controller->modelClass}-**
>> >_schema[$key]['type']){
>> case "string":
>> $conditions[$this->controller-**>modelClass . "." .$key . " LIKE"]
>> = "%".trim($value)."%";
>> break;
>> case "integer":
>> $conditions[$this->controller-**>modelClass . "." .$key] = $value;
>> break;
>> case "date":
>> if(isset($this->controller->**params['named'][$key."_**fromdate"])){
>> $from = date("Y-m-d", strtotime(
>> $this->controller->params['**named'][$key."_fromdate"]
>> ));
>> $conditions[$this->controller-**>modelClass.".".$key." >="] =
>> trim($from);
>> }
>> if(isset($this->controller->**params['named'][$key."_todate"**])){
>> $to = date("Y-m-d", strtotime($this->params['**
>> named'][$key."_todate"]));
>> $conditions[$this->controller-**>modelClass.".".$key." <="] = $to;
>> }
>> }
>> }
>> }
>> return $conditions;
>>
>> }
>>
>> }
>> ?>
>>
>> and in my index view i am using this code
>>
>> <div class="itsuportrequests index">
>> <?php echo $this->element('SearchForm/**set_pagination_named');?>//set
>> pagination named element
>> <?php echo $this->element('SearchForm/**form') ?>//search form
>> element
>> <h2><?php __('ItSupportRequests');?></**h2>
>>
>> <table cellpadding="0" cellspacing="0">
>> <tr>
>> <th><?php echo $this->Paginator->sort('id');?**></th>
>>
>> <th class="actions"><?php __('Actions');?></th>
>> </tr>
>> <?php
>> $i = 0;
>> foreach ($itSupportRequests as $itSupportRequest):
>> if ($i++ % 2 == 0) {
>> }
>> ?>
>> <tr>
>> <td><?php echo $itSupportRequest['**ItSupportRequest']['id'];
>> ?> </td>
>> <td class="actions">
>>
>> <?php echo $this->Html->link(__('Edit', true), array('action' =>
>> 'edit', $itSupportRequest['**ItSupportRequest']['id'])); ?>
>> <?php echo $this->Html->link(__('Delete', true), array('action' =>
>> 'delete', $itSupportRequest['**ItSupportRequest']['id']), null,
>> sprintf(__('Are you sure you want to delete # %s?', true),
>> $itSupportRequest['**ItSupportRequest']['id'])); ?>
>> </td>
>> </tr>
>> <?php endforeach; ?>
>> </table>
>> <p>
>> </p>
>> </div>
>>
>> I have created 2 Elements SearchForm/form.ctp and
>> SearchForm/set_pagination_**named.ctp
>>
>> /*form.ctp*/
>> <div class='search' style="margin:10px;">
>> <fieldset>
>> <h2> Search <?php echo$this->params['controller'**] ?></h2><hr/>
>> <?php echo $this->Form->create(array('**action' => 'index', 'type'
>> => 'GET')); ?>
>> <?php echo $this->Form->input('id', array(
>> 'label'=>'ID','type'=>'text'))**;
>> echo $this->Form->submit('Search',**array('class'=>'button'));
>> ?>
>>
>> <?php echo $this->Form->end(); ?>
>> </fieldset>
>> </div>
>>
>> and here is my set_pagination_named.ctp
>>
>> <?php
>> $data_arr=array();
>> if(isset($this->params['url']) || isset($this->params['named']))**{
>> $data=isset($this->params['**named'] ) &&
>> !empty($this->params['named']) ? $this->params['named']:$this->**
>> params['url'];
>> $possibledata=array('id');//**possible fields
>> foreach($data as $key=>$value){
>> if(in_array($key,$**possibledata) && !empty($value)){
>> $data_arr[$key]=$data[$key];
>> }
>> }
>> }
>> ?>
>> <?php
>> $this->Paginator->options(**array(
>> 'evalScripts' => true,
>> 'url'=>$data_arr
>> ));
>> ?>
>>
>> Thank you in advance.
>>
>> --
> Like Us on FaceBook https://www.facebook.com/CakePHP
> Find us on Twitter http://twitter.com/CakePHP
>
> ---
> You received this message because you are subscribed to the Google Groups
> "CakePHP" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/cake-php?hl=en.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>
--
Like Us on FaceBook https://www.facebook.com/CakePHP
Find us on Twitter http://twitter.com/CakePHP
---
You received this message because you are subscribed to the Google Groups
"CakePHP" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/cake-php?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.