Как установить начальное значение quicksearch? - PullRequest
1 голос
/ 21 февраля 2012

где я хочу поставить начальное значение. Я видел, что quicksearch имеет элемент 'q', но я не могу получить к нему доступ, например, это не находит элемент q:

$quickSearch->getElement('q');

Как получить доступ к быстрому поиску, чтобы установить начальное значение?

Ответы [ 2 ]

1 голос
/ 21 февраля 2012

Глядя на источник этого может помочь вам выяснить вещи. Agile Toolkit разработан таким образом, чтобы разработчик мог воспользоваться знаниями исходного кода.

QuickSearch является производным от Filter, который является производным от Form, поэтому где-то должен быть addField. Посмотрев на QuickSearch, вы обнаружите его внутри функцииallAll (). Для этой функции нет вызовов, поэтому мы должны посмотреть на родительский класс - Filter.

Фильтр устанавливает ловушку в api для вызова returnAll после завершения инициализации. Это означает, что для получения доступа к полю вы можете либо переопределить метод, либо добавить хук самостоятельно.

Крюк:

$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');
    }
}

Наконец, вы можете воспользоваться тем, чтобы знать, откуда returnAll загружает их значения по умолчанию, и просто сделать это:

$quicksearch->memorize('q','hello');
0 голосов
/ 22 февраля 2012

Чтобы решить эту проблему, мы должны сначала понять, как поле поиска класса QuickSearch добавляется в базовый класс Grid. Итак, после изучения исходного кода, мы можем увидеть, что:

  1. Класс QuickSearch не отслеживает (или сохраняет ОБЩЕСТВЕННАЯ ссылка) Form_Field q
  2. Form_Field q равно ТОЛЬКО добавлено В ТЕЧЕНИЕ фаза рендеринга сетки

зная их, теперь мы можем приступить к добавлению изменений к элементу адреса № 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 рядом с полем QuickSearch и добавит DEFAULT текст поиска, если поле поиска пусто.

если это всего лишь разовая вещь, то это может быть полезно в качестве быстрого исправления, поскольку непосредственное внесение изменений в исходный код библиотеки очень неортодоксально и не соответствует концепции расширения и подкласса ООП, продвигаемой ATK .

...