Более длинные поля формы в Drupal - PullRequest
2 голосов
/ 12 марта 2010

У меня действительно глупая проблема, которая уже стоила мне времени.

Я создал шаблон контента с URL там. Когда я смотрю на HTML-код для этого, я вижу большой жирный "maxlength = 256" в теге формы. Я хотел бы расширить длину этого поля, потому что мой клиент желает вводить очень длинные ссылки (более 500 символов). Есть идеи, как я могу это изменить? Когда я делаю общий поиск по коду, я вижу очень много вхождений 256, но длина может быть точно так же где-то в базе данных. Я, конечно, сделал поле базы данных более длинным varchar (1024 звучало для меня поэтично), поэтому мне не о чем беспокоиться.

Я думаю, что это глупо, но клиент, как мы знаем, всегда прав.

Я использую Drupal 6.14.

Ответы [ 2 ]

2 голосов
/ 13 марта 2010

Вы хотите использовать hook_form_alter () в в вашем templete.php или в пользовательском модуле.

Это будет выглядеть примерно так:

MODULE_form_alter(&$form, &$form_state, $form_id) {
  if($form_id = 'name_of_form_you_want_to_alter') {
    form['name_of_url_field']['#maxlength'] = 500;
  }
}

Просто замените МОДУЛЬ на имя вашей темы (если оно находится в template.php) или замените его на имя вашего пользовательского модуля.

Чтобы найти идентификатор формы, осмотрите элемент с помощью firebug. То же самое относится и к id поля url.

Дайте мне знать, если вам нужно больше деталей.

РЕДАКТИРОВАТЬ: Как указано, похоже, что вы не можете вызывать хуки с уровня темы.

Лучший способ сделать это - создать небольшой пользовательский модуль для вашего сайта. Вы можете назвать это как SITENAME_customizations.

Все, что вам нужно, это простой .info-файл с именем MODULENAME.info, который будет выглядеть примерно так:

name = SITE customizations
description = "Customizations"

Вам также понадобится файл MODULENAME.module, куда вы будете включать ваш hook_form_alter звонок.

PS. Убедитесь, что вы не закрыли свой php-тег (?>) в файле .module.

0 голосов
/ 16 марта 2010

Yahoooooo! Я исправил это, благодаря полезным страницам Drupal: http://drupal.org/node/300705

Я понял, что могу отредактировать форму после того, как она будет полностью сгенерирована. Решение, представленное Эриком, хорошо, но, похоже, не работает для полей CCK. В моем случае решение Эрика могло бы сработать, если бы не этот шаг генерации, который должен произойти первым.

Мой новый код выглядит следующим образом:

function longerfield_form_alter(&$form, &$form_state, $form_id) {
      $form['#after_build'][] = 'longerfield_after_build';
    }

function longerfield_after_build($form, &$form_state) {
  // This is for a node reference field:
  $form['field_page_boeken'][0]['data']['url']['#maxlength'] = 1024;
  return $form;
}

Теперь я тоже вижу, что это некрасиво, особенно потому, что здесь могут быть другие элементы формы (просто увеличение с 0), но это работает для первого элемента! Yippeee!

...