чтобы решить эту проблему, мы должны сначала понять, как поле поиска класса QuickSearch добавляется к базовому классу Grid. поэтому после изучения исходного кода мы видим, что:
- Класс QuickSearch не отслеживает (и не сохраняет ссылку PUBLIC) поля Form_Field
q
- Form_Field
q
ТОЛЬКО добавляется ВО ВРЕМЯ этапа рендеринга сетки.
Зная это, мы можем теперь приступить к добавлению изменений к элементу адреса № 1.
во-первых, нам нужно добавить переменную для отслеживания Form_Field q
в классе QuickSearch:
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 рядом с полем быстрого поиска и добавит поисковый текст DEFAULT, если поле поиска пусто.
если это одноразовая вещь, то это может быть полезно в качестве быстрого исправления, потому что непосредственное внесение изменений в исходный код библиотеки очень неортодоксально и не соответствует концепции расширения и подкласса ООП, продвигаемой ATK.
person
Open Technologist
schedule
21.02.2012