如何设置quicksearch初始值?

时间:2012-02-21 14:17:22

标签: php user-interface frameworks atk4

我想把tu放一个初始值。 我已经看到quicksearch有'q'元素,但我无法访问它,例如,这找不到q元素:

$quickSearch->getElement('q');

如何访问quicksearch以设置初始值?

2 个答案:

答案 0 :(得分:1)

查看它的来源可以帮助您找到答案。 Agile Toolkit的设计方式是开发人员应该利用源代码的知识。

QuickSearch派生自Filter,派生自Form,因此应该在某处添加addField。查看QuickSearch,您将在recallAll()函数中找到它。没有调用这个函数所以我们应该查看父类 - Filter。

Filter在api中设置一个钩子,在初始化完成后调用recallAll。这意味着能够访问该字段,您可以重新定义方法或自己添加一个钩子。

<强>钩:

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

<强>扩展

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

最后,您可以利用了解recallAll从哪里加载默认值,并简单地执行此操作:

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

答案 1 :(得分:0)

要解决这个问题,首先要了解如何将QuickSearch类的搜索字段添加到Grid Basic类中。所以在调查源代码后,我们可以看到:

  1. QuickSearch类不会跟踪(或保存 PUBLIC 引用)Form_Field q
  2. Form_Field q 添加在网格的渲染阶段
  3. 了解这些,我们现在可以继续将修改添加到地址项#1。

    首先,我们需要添加一个变量来跟踪QuickSearch类中的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');
           }
        }
     }
    

    这将在QuickSearch字段旁边设置 CAPTION ,如果搜索字段为空,则添加 DEFAULT 搜索文本。

    如果这只是一次性事情,那么这可能是一个快速解决方案,因为直接对库源进行更改是非常不正统的,并且不遵循由ATK推广的扩展和子类的OOP概念