Код с 6-ки через ***_preprocess_search_theme_form не работает. Попробовал покопаться в ***_preprocess_block, так как поиск теперь стал работать только в блоках.
Прочитать значения можно с помощью $variables['elements']['search_block_form']... но почему то не получается их изменить. Одного оператора присвоения мало. Видимо в конце функции должно быть ещё что то.
Кто ни будь подскажет как можно перекроить форму поиска?
Комментарии
Может стоит попробовать через hook_form_alter?
http://api.drupal.org/api/drupal/developer--hooks--core.php/function/hoo...
Дык это же вроде для модулей а не для темизации. Мне нужно через темизацию.
можешь в template.php заюзать формальтер и перебить разметку как тебе надо...это же в файлах темы
Еще, воть
$variables['elements']['search_block_form']... но почему то не получается их изменить
В функцию, где аргументы $variables, передаешь по ссылке &$variables ? Попробуй амперсанд поставить и по идее должны поменяться при присвоении..
Да, по ссылке &$variables
Если быть точнее то значения присваиваются, например это $variables['elements']['search_block_form']['#title'] = 'ab'; (просто для примера)
Проверить можно через print_r но форма всё равно не меняется. Может в конце нужен какой то children render или что то типо того?
О! я придумала и проверила для семерки походу тоже должно работать
function phptemplate_search_block_form(&$form) {
$form['search_block_form']['#title']='hhh';
//print_r($form);die;
}
у меня меняется)
Я сделал так:
$variables['search'] = array();
$hidden = array();
foreach (element_children($variables['form']) as $key) {
$type = $variables['form'][$key]['#type'];
if ($type == 'hidden' || $type == 'token') {
unset($variables['form'][$key]['#printed']);
$hidden[] = drupal_render($variables['form'][$key]);
}
else {
if ($key == 'search_block_form') {
$variables['form']['search_block_form']['#value'] = 'Поиск по сайту...';
$variables['form']['search_block_form']['#attributes'] = array(
'onfocus' => 'if(this.value=="Поиск по сайту...")this.value=""',
'onblur' => 'if(this.value=="")this.value="Поиск по сайту..."'
);
}
unset($variables['form'][$key]['#printed']);
$variables['search'][$key] = drupal_render($variables['form'][$key]);
}
}
$variables['search']['hidden'] = implode($hidden);
$variables['search_form'] = implode($variables['search']);
}
если корректно работает, то здорово=)))
Тот код что я написал работает, а вот если вписать это
if ($key == 'actions') $variables['form'][$key]['submit']['#value'] = '';
кнопка всё равно остаётся с надписью "Найти"
попробуй все-таки через форм альтер.
Т.к. ты доступ к форме получаешь через блок...
может через форму напрямую, все ее элементы + не надо никаких циклов юзать.
function phptemplate_search_block_form(&$form) {
print_r($form);die;
}
hook_form_alter() не будет работать в template.php, http://drupal.ru/node/54526
не работает это