如何限制Drupal的标题长度?

时间:2011-09-05 20:16:59

标签: drupal drupal-7

我想提供标题长度的验证。现在我得到一个例外:

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/maxlengthhttp://drupal.org/project/maxlength_js,但没有运气。

5 个答案:

答案 0 :(得分:4)

我编写了自定义验证模块

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 :(得分:1)

统计模块只获取页面标题并尝试直接将其保存在数据库中,但数据库列的最大大小为255个字符。看起来您正在查看的特定页面的标题长度超过255个字符。

您应该将hook_exit的实现添加到自定义模块,以便在统计模块尝试将其插入数据库之前修剪页面标题。

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

请确保设置模块,以便在统计模块挂钩之前运行此挂钩。

如果您需要更多信息,请与我们联系。

答案 2 :(得分:1)

您可以使用此功能更改特定节点类型的标题的最大允许长度:

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

mymodule 替换为您的模块名称,将 mynodetype 替换为您的节点类型ID

这样,Drupal会进行验证并提供有用的(可翻译的)错误消息。

答案 3 :(得分:0)

JS的方法是提出类似的东西:

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

...在头文件或page.tpl.php或生成表单时存在的位置。

onload意味着只有在页面完全加载后才会激活该函数,该函数基本上用您选择的数字设置/替换标题字段的最大长度。

请务必将edit-title替换为您的标题字段所具有的id。如果它没有id,您可以考虑使用其他getElement方法。

显然,此验证仅在用户填写表单上的标题时才有效。

答案 4 :(得分:-2)

非常简单,您可以使用MaxLength Js并在&#34;内容类型&#34;中设置字符数限制。编辑页面并在您想要的时候进行更改

Link to an example