Почитал статью neochief про темизацию.
Так вот он пишет здесь http://drupaldance.com/blog/темизация-форм#formarr : "Итак, нам нужно просто пройтись по этому массиву и найти то, что нужно поменять".
У меня вываливается огромный массив и хер что там найдешь.
Есть какие-то модули для разработчиков, которые бы выводили массив формы структурированно?
Ну чтобы легко можно было определить путь до объекта, например ['account']['name']['#title']
Комментарии
http://drupal.org/project/devel
http://drupal.org/project/devel_themer
А как вы догадались, что путь именно ['field_name']['data']['title']['#maxlength']? Включил модуль (прикладываю скрин), куда только не жал, но такое дерево получить не смог. http://www.7image.ru/pics/0810/63789273.png
Максимум, что получается ['title']['#maxlength']. А старший массив показывается element и все.
Кстати с включенным devel сайт жутко тормозит (хостинг it-patrol). Мне бы простую замену функции print_r($form); чтобы информация деревом выходила и не надо девелов.
dsm() у девела вроде
Ага. Вот так вижу путь :). Только и dpm() и k_printr() работают только со включенным devel. (Krumo требует devel). Проблема решена, но от столь тяжелого модуля, очень грузящего базу, хотелось бы отказаться.
Есть что-нибудь без девела?
Или как и писал, текстовый вывод, более структурированный, чем print_r($form); Вот как на картинке у neochiefa
И если честно до сих пор не нашел нужное поле... ['field_name']['data']['title']['#maxlength'] - вообще ничего подобного нет, (field_name искал свое).
С помощью dsm() не могу свое maxlength найти
А ты его не ищи, ты его допиши, оно может быть по умолчанию
Я пишу в модуле hooks:
И ничего, в поле все равно можно вводить неограниченное число символов.
А вот если написать $form['field_image']['0']['#default_value']['data']['description'] = 'меняем текст';, то текст меняется.
т.е. это не ['field_image']['0']['#default_value']['data']['#maxlength']
Или как его на textarea поменять?
$form['field_image']['0']['#maxlength'] = 3
чо будет?
ничего не изменилось.
Кстати использую хук form_alter, может им ничего не добавишь, только поменять?
что за $form["after_build"]? как его применять?
<?php
$form['#after_build'] = array('func1', 'func2');
// где
function func1($form, $form_state){
// меняем тут что надо в форме
// ...
return $form;
}
?>
а где указывается id формы?
Можете на моем примере показать?
<?php
$form['#after_build'] = array('func1', 'func2');
// где
function func1($form, $form_state){
$form['field_image']['0']['#maxlength'] = 3;
$form['field_image']['0']['#default_value']['data']['#maxlength'] = 3;
return $form;
}
?>
<?php
$form['#id'] = 'my-id';
?>
А так чтоб попонятнее? Не ясно, куда здесь ид вставлять.
<?php
$form['#id'] = 'new_node_form';
$form['#after_build'] = array('func1', 'func2');
function func1($form, $form_state){
$form['field_image']['0']['#maxlength'] = 3;
$form['field_image']['0']['#default_value']['data']['#maxlength'] = 3;
return $form;
}
?>
Это не работает. Поле - обычно imagefield с включенным описанием. Страница - обычная страница редактирования материала.