как ограничить длину заголовка в Drupal? - PullRequest
0 голосов
/ 06 сентября 2011

Я хотел бы предоставить подтверждение длины заголовка. Прямо сейчас я получаю исключение:

PDOException: SQLSTATE[22001]: String data, right truncated: 
1406 Data too long for column 'title' at row 1: 
INSERT INTO {accesslog} (title, path, url, hostname, uid, sid, timer, timestamp) 
VALUES (...) in statistics_exit() (line 90 of 
/opt/bitnami/apps/.../htdocs/modules/statistics/statistics.module).

Я пытался http://drupal.org/project/maxlength и http://drupal.org/project/maxlength_js,, но не повезло.

Ответы [ 5 ]

4 голосов
/ 27 сентября 2011

Я закодировал пользовательский модуль проверки

function custom_validate_form_alter(&$form, &$form_state, $form_id) {
  if ( $form_id =='user_register_form') {
    $form['#validate'][] = '_custom_validate_form_alter_user_register_validate';
   }
   if ( $form_id =='user_profile_form') {
      $form['#validate'][] = '_custom_validate_form_alter_user_profile_validate';
   }
   $types = array("your_content_type_node_form");
   if(in_array($form_id, $types)){
     $form['#validate'][] = '_custom_validate_form_alter_title_node_form_validate';
    }
    return $form;
 }

 function _custom_validate_form_alter_user_register_validate($form, &$form_state) {
   if (strlen($form_state['values']['name'])>30){
     form_set_error('name', 'Username must be less than 30 characters. Please correct username');
    }
   }
function _custom_validate_form_alter_user_profile_validate($form, &$form_state) {
  if(!empty($form_state['values']['pass']) && strlen($form_state['values']['pass'])>30){
    form_set_error('pass', 'Password must be less than 30 characters. Please correct password');
  }
  if(!empty($form_state['values']['pass']) && strlen($form_state['values']['pass'])<6){
    form_set_error('pass', 'Password must be at least 6 characters long. Please correct password');
  }
}
function _custom_validate_form_alter_title_node_form_validate($form, &$form_state) {
  if (strlen($form_state['values']['title'])>200){
    form_set_error('title', 'Title must be less than 200 characters. Please correct title');
  }
}
1 голос
/ 12 февраля 2013

Вы можете использовать эту функцию, чтобы изменить максимально допустимую длину заголовка для определенного типа узла:

function mymodule_form_mynodetype_node_form_alter(&$form, &$form_state) {
  $form['title']['#maxlength'] = 34;
}

Замените mymodule на имя вашего модуля и mynodetype с идентификатором типа вашего узла

Таким образом, Drupal выполняет проверку и предоставляет полезные (переводимые) сообщения об ошибках.

1 голос
/ 06 сентября 2011

Модуль статистики просто берет заголовок страницы и пытается напрямую сохранить его в базе данных, однако максимальный размер столбца базы данных составляет 255 символов.Похоже, что конкретная страница, которую вы просматриваете, имеет заголовок длиннее 255 символов.

Вы должны добавить реализацию hook_exit в пользовательский модуль, чтобы обрезать заголовок страницы, прежде чем модуль статистики попытается вставить его в базу данных..

/**
 * Implements hook_exit().
 */
function mymodule_exit() {
  $title = drupal_get_title();
  drupal_set_title(substr($title, 0, 255), PASS_THROUGH);
}

Просто убедитесь, что ваш модуль настроен так, чтобы этот хук работал до хука модуля статистики.

Дайте мне знать, если вам нужна дополнительная информация.

0 голосов
/ 03 марта 2016

Это довольно просто, вы можете использовать MaxLength Js и установить ограничение на количество символов на странице редактирования "Тип контента" и изменить его, когда вам захочетсяпример

0 голосов
/ 01 августа 2014

Подход JS состоит в том, чтобы поместить что-то вроде:

<script>
window.onload = function() {
document.getElementById("edit-title").setAttribute("maxlength","60");
}
</script>

... в заголовочном файле или page.tpl.php или в месте размещения, которое существует при создании формы.

onload будет означать, что функция активируется только после полной загрузки страницы, и функция в основном устанавливает / заменяет максимальную длину поля заголовка номером по вашему выбору.

Обязательно замените edit-title на то, что id имеет ваше поле заголовка. В случае, если у него нет id, вы можете рассмотреть возможность использования других getElement методов.

Очевидно, что эта проверка работает только тогда, когда пользователь заполняет заголовок в форме.

...