По статье "Темизация форм":
Для форм, которые не имеют шаблонов или зарегистрированных функций, нам нужно не только перекрыть функцию темизации, но и зарегистрировать ее в системе темизации, чтобы Друпал о ней знал. Больше информации о регистре темизации можно найти на страницах документации. Наша форма как раз такой и является. Как только добавите следующие функции в ваш template.php, обновите регистр темизации, сбросив кеш на странице "Администрация" > "Производительность".
Вот функция регистрации, которая нам нужна:
Так вот, если вместо function themename_theme() поставить themename_theme_drugoe_nazvanie ничего работать не будет. Но если мы хотим темизировать другую форму, то заводить еще одну function themename_theme() нельзя, а в старую не впишешь. Что делать?
Комментарии
Почему "в старую не впишешь"?
Вписываю. Таким образом:
return array(
// ID формы
'user_profile_form' => array(
// Формы всегда имеют аргумент form
'arguments' => array('form' => NULL),
),
'Другая_form' => array(
// Формы всегда имеют аргумент form
'arguments' => array('form' => NULL),
);
}
Не работает. По отдельности и то и другое работает...
Должно работать, значит делаете что-то не так. Приведите полностью используемый код.
Заработало :). Теперь надо указать переменную в массиве, которую надо заменить.
Использую конструкцию:
$output = '';
print_r($form);
$form['prices']['list_price']['#title'] = t('Слово, на которое заменяю');
$output .= drupal_render($form);
return $output;
}
[#field_name] => field_image_cache [#tree] => 1 [#weight] => -2 [#access] => 1 [#count] => 8 [#post] => Array ( ) [#programmed] => [#parents] => Array ( [0] => field_image_cache ) [#array_parents] => Array ( [0] => field_image_cache ) [#processed] => [#defaults_loaded] => 1 ) [base] => Array ( [#type] => fieldset [#title] => Информация об РП [#collapsible] => 1 [#collapsed] => [#weight] => -1 [#attributes] => Array ( [class] => product-field ) [model] => Array ( [#type] => textfield [#title] => SKU [#required] => 1 [#default_value] => [#description] => Артикул (модель) РП. [#weight] => 0 [#size] => 32 [#post] => Array ( ) [#programmed] => [#tree] => [#parents] => Array ( [0] => model ) [#array_parents] => Array ( [0] => base [1] => model ) [#processed] => 1 [#attributes] => Array ( ) [#input] => 1 [#maxlength] => 128 [#autocomplete_path] => [#process] => Array ( [0] => form_expand_ahah ) [#name] => model [#id] => edit-model [#value] => [#defaults_loaded] => 1 [#sorted] => 1 ) [prices] => Array ( [#weight] => 5 [#theme] => uc_product_form_prices [list_price] => Array ( [#type] => textfield [#title] => List price
List price - слово, которое надо изменить.
['prices']['list_price']['#title'] - не работает. Мне дальше вверх идти? До чего? Там много переменных и массивов еще...
И еще. Я написал так:
$form['title']['#required'] = FALSE;
Звездочка обязательности снялась, а все равно: поле обязательно для заполнения, почему-то...
Попробуй использовать $form['base']['prices']['list_price']['#title'].
Спасибо, так работает.
Я написал $form['base']['model']['#title'] = t('Другое название'); и слово SKU сменилось. Также после $form['base']['model']['#required'] = FALSE; убралась звездочка обязательности заполнения. Но в чем проблема: все равно выскакивает ошибка:
"Поле SKU обязательно для заполнения". Что за? Как его вообще убрать или убрать обязательность именно через темизацию, не трогая модуль.