Изменение формы поиска в 7

Главные вкладки

Аватар пользователя cdrpro cdrpro 2 января 2011 в 22:09

Код с 6-ки через ***_preprocess_search_theme_form не работает. Попробовал покопаться в ***_preprocess_block, так как поиск теперь стал работать только в блоках.
Прочитать значения можно с помощью $variables['elements']['search_block_form']... но почему то не получается их изменить. Одного оператора присвоения мало. Видимо в конце функции должно быть ещё что то.

Кто ни будь подскажет как можно перекроить форму поиска?

Комментарии

Аватар пользователя shamotinka shamotinka 3 января 2011 в 11:48

можешь в template.php заюзать формальтер и перебить разметку как тебе надо...это же в файлах темы
Еще, воть
$variables['elements']['search_block_form']... но почему то не получается их изменить

В функцию, где аргументы $variables, передаешь по ссылке &$variables ? Попробуй амперсанд поставить и по идее должны поменяться при присвоении..

Аватар пользователя cdrpro cdrpro 3 января 2011 в 13:47

Да, по ссылке &$variables
Если быть точнее то значения присваиваются, например это $variables['elements']['search_block_form']['#title'] = 'ab'; (просто для примера)
Проверить можно через print_r но форма всё равно не меняется. Может в конце нужен какой то children render или что то типо того?

Аватар пользователя shamotinka shamotinka 3 января 2011 в 14:58

О! я придумала и проверила для семерки походу тоже должно работать

function phptemplate_search_block_form(&$form) {
$form['search_block_form']['#title']='hhh';
//print_r($form);die;

}

у меня меняется)

Аватар пользователя cdrpro cdrpro 3 января 2011 в 15:06

Я сделал так:

function cdrpro_preprocess_search_block_form(&$variables) {
        $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']);
}
Аватар пользователя cdrpro cdrpro 3 января 2011 в 17:59

Тот код что я написал работает, а вот если вписать это
if ($key == 'actions') $variables['form'][$key]['submit']['#value'] = '';
кнопка всё равно остаётся с надписью "Найти"

Аватар пользователя shamotinka shamotinka 3 января 2011 в 19:31

попробуй все-таки через форм альтер.
Т.к. ты доступ к форме получаешь через блок...
может через форму напрямую, все ее элементы + не надо никаких циклов юзать.

function phptemplate_search_block_form(&$form) {
print_r($form);die;

}