Чтобы решить эту проблему, мы должны сначала понять, как поле поиска класса QuickSearch добавляется в базовый класс Grid. Итак, после изучения исходного кода, мы можем увидеть, что:
- Класс QuickSearch не отслеживает (или сохраняет ОБЩЕСТВЕННАЯ ссылка) Form_Field
q
- 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 .