0

(a)キーワードを指定すると、dbから取得した結果を表示する検索フォームを実装しようとしています。次に、検索結果でグリッドまたはリスターを更新します。グリッドを更新する方法について私だけが少し迷っています...

同様の質問をいくつか見てきましたが(つまり、atk4のモーダルフォームから更新した後にグリッドを更新する方法は?)、フォームを送信した後、グリッドを更新できないようです。コードが続きます、私が間違っていることに関するヒント、またはこれを行うためのより良い方法はありますか?後で、さまざまなデータベースタブからいくつかのグリッド/リスターを検索して更新したいのですが、1つを機能させることができれば、それはすでに開始されます... :)

$f=$this->add('Form');
$f->addField('Search','buscar', 'Enter keywords:');
$f->addSubmit('Search');

$g=$this->add('Grid');
$g->js(true)->addClass('myreload');
$g->js('myreload')->reload();
$g->setSource('conflicto');
$g->addColumn('nombre');        
$g->addColumn('idconflicto');

if($f->isSubmitted())  
{
     $keywords=$f->getElement('buscar')->get();
     $g->dq->where("nombre LIKE '".$keywords."'");
     $this->js(null,$this->js()->_selector('.myreload')->trigger('myreload')) ->univ() ->closeDialog() ->successMessage('Actualizado') ->execute();
}
4

3 に答える 3

0

さて、あなたがすべきことは次のとおりです:

if (isset($_GET["q"])){
    $q = $_GET["q"];
    $g->dq->where("field like '%" . mysql_real_escape_string($q) . "%');
}

if ($f->isSubmitted()){
    $g->js()->reload(null, array("q" => $f->get("q")))->execute();
}

テストされていませんが、動作するはずです。

于 2012-07-16T21:46:49.570 に答える
0

グリッドに組み込まれているクイック検索を使用してみましたか?

ページが次のようになるように、グリッドにクイック検索を追加できるはずです。

class page_yourpage extends Page {
    function init(){
       parent::init();
       $p=$this;

       $c=$p->add('Grid');
       $c->setSource('conflicto');

       if($c->grid){
          $c->grid->addPaginator(20);
          $c->grid->addQuickSearch(array('nombre'));
        } // end if
     } // end init
} // end class

setSourceは、モデル名ではなく、テーブル名を受け取ることに注意してください。クイック検索の配列パラメーターは、検索するフィールドを識別します。

これにより、拡大クラスアイコン付きの検索フィールドが追加されるため、検索テキストを入力すると、指定されたフィールドが検索され、その検索に一致する行でグリッドが更新されます。

検索を変更したい場合(たとえば、提供されたとおりに完全に一致するだけなので大文字と小文字を区別しない)、QuickSearchを拡張するyoursite / libとinitでMySearch.phpなどの新しいバージョンを作成し、applyDQをオーバーライドできます。 ()関数を使用し、入力した検索文字列にstrtolower()を含め、mysqlテーブルの列にLOWER(column)を含めます。

class MySearch extends QuickSearch () {

 function applyDQ($dq){
            if(!($v=$this->get('q')))return;

            $v=strtolower(addslashes($v));  // quote it

            $q=array();
            foreach($this->fields as $field){
                    $q[]="lower($field) like '%".$v."%'";
            }
            if($q){
                    $dq->having(join(' or ',$q));
            } // end if
    } // end function
 } // end class

次に、このコードを使用してページのグリッドに追加し、デフォルトの実装ではなくMySearchの実装を使用するようにする必要があります。

 $c->grid->addQuickSearch(array('nombre'), 'MySearch');

ATK4は、検索に基づいてグリッドのリロードを処理する必要があります。

于 2012-07-14T16:38:05.940 に答える
0

あなたの質問は、Agile Toolkit 4.1 構文を使用しています。4.2では、これを使用できます:

$g=$this->add('Grid');
$q=$this->api->dsql()->table('conflicto');

if (isset($_GET["q"])){
    $q->where('field','like', '%'.$q.'%'); 
                              // 3rd argument is escaped automatically
}

$g->setSource($g);

ただし、もちろん最善の方法は $g->setModel($m->addCondition(..)) を使用することであることを思い出してください。

于 2012-09-04T00:49:23.153 に答える