2012-02-21 22 views
1

ここで、初期値を入力します。 私はクイックサーチは、「Q」の要素を持っているが、私はそれにアクセスすることはできません、例えばこれはq個の要素を見つけていないことを見てきました:quicksearch初期値の設定方法は?

$quickSearch->getElement('q'); 

私は初期値を設定するためにクイックサーチにアクセスするにはどうすればよいですか?

答えて

1

ソースを見ると、物事を見つけるのに役立ちます。 Agile Toolkitは、開発者がソースコードの知識を活用する方法で設計されています。

QuickSearchはFormから派生したFilterから派生したものです。したがって、どこかにaddFieldが存在するはずです。 QuickSearchを見ると、recallAll()関数の中にあります。この関数への呼び出しはありませんので、親クラス - Filterを調べる必要があります。

フィルタは、初期化が完了した後に、callallを呼び出すためのAPIにフックを設定します。つまり、フィールドにアクセスできるようにするには、メソッドを再定義するか、自分でフックを追加することができます。

フック:

$quicksearch->memorize('q','hello'); 

$this->api->addHook('post-init',function() use($quickSearch){ 
    $quickSearch->getElement('q')->set('hello'); 
}); 

が最後にあなたがrecallAllからそのデフォルト値をロードしている場所を知ることの利点を活用し、単にこれを行うことができます

class MyQuicksearch extends QuickSearch { 
    function recallAll(){ 
     parent::recallAll(); 
     $this->getElement('q')->set('hello'); 
    } 
} 

を拡張

+0

もう一度おねがいします。if($ qs-> recall( 'q')== ''){ $ qs-> memorize( 'q'、$ default); } – mcanedo

0

これに対処するには、最初に、QuickSearchクラスの検索フィールドがグリッド基本クラスに追加される方法を理解する必要があります。そのソースコードの調査時に、我々はそれを見ることができます:

  1. クイックサーチクラスが追跡していない(またはのPUBLIC参照を保存)Form_Field q
  2. Form_Field qONLYが DURING を追加でグリッドのレンダリング段階

これらを知っているので、アドレス項目#1の変更を追加することができます。

まず、我々はクイックサーチクラスでForm_Field qを追跡するために変数を追加する必要があります。

var $search_field=null; // add this line (1) 
function recallAll(){ 
    $ff=$this->addField('line','q',''); 
    $this->search_field=$ff; // and this line (2) 
    parent::recallAll(); 
    : 
    : 
} 

秒を、2番に対処するために、グリッドが定義されているページに、我々は追加必要フォローアップフック、例:

class page_gridsearchtest extends Page { 
    var $search=null; 

    function init() { 
     parent::init(); 

     $g = $this->add('MVCGrid'); 
     $g->setModel('Employees'); 
     if($g){ 
      $this->search=$g->addQuickSearch(array('fullname')); 
      if($this->search) 
      $this->api->addHook('post-init',array($this,'MyHook')); // add hook 
     } 
    } 
    function MyHook(){ // hooked method 
     if($this->search->search_field) { 
      if($this->search->search_field->get()=='') 
      $this->search->search_field->set('Juan'); // set initial search if blank 
      $this->search->search_field->setCaption('Employee Name Search'); 
     } 
    } 
} 

これは、クイックサーチフィールドの横にCAPTIONを設定し、検索フィールドがEMPの場合DEFAULT検索テキストを追加しますty。

これは単なる1回限りの場合、ライブラリソースを直接変更することは非常に正統性が低く、次のような拡張とサブクラスのOOPの概念に従わないため、これは簡単な修正として役立ちますATK。

+0

btw、addHookの3番目の引数はpriorityで、最初に実行されるフックを追加することができます。この方法で空の値をチェックする必要はありません。そうでなければ - すばらしい答え、あなたは本当にAgile Toolkitを理解しています、@ :) – romaninsh

関連する問題