如何自定义textarea字段? -- 7 领域 和 users 领域 和 entities 领域 drupal 相关 的问题

How to customize a textarea field?


1
vote

问题

中文

我已经使用admin ui创建了一个textarea字段。它允许用户将生物添加到其个人资料中。我想用这个字段做2件事。

  1. 将字符限制为255。
  2. 使用文本格式。 注意:我不想允许用户选择文本格式。
英文原文

I have created a textarea field using admin ui. It allows users to add Bio to their profile. I want to do 2 things with this field.

  1. Limit the characters to 255.
  2. Use a text format. Note: I do not want to allow users to choose a text format.
        
         
         

回答列表

3
 
vote

在Drupal 7上,如果我们可以将MaxLength属性添加到Textarea标记,则无需JS。

我试图使用hook_form_alter设置此属性,如

  $form['field_NAME'][LANGUAGE_NONE][0]['#attributes'] = array('maxlength' => 220);   

  $form['field_NAME'][LANGUAGE_NONE][0]['#maxlength'] = 220;   

......以及使用DSM($表格)的GAZILION变化进行想法并检查我的结果。我可以轻松更改$ form ['field_name']值,但我的textarea无法获取MaxLength AttTribute。

这个工作:

  /**  * Implements hook_field_widget_WIDGET_TYPE_form_alter().  * Add a maxlength attribute to field_NAME.  */ function MYMODULE_field_widget_text_textarea_form_alter(&$element, &$form_state, $context) {   if (isset($element['#field_name']) && ($element['#field_name'] == 'field_NAME')) {     $element['value']['#attributes'] = array('maxlength' => 220);   } }   
 

With HTML5 on Drupal 7 no JS is necessary if we can add a maxlength attribute to the textarea tag.

I tried to use a hook_form_alter to set this attribute, something like

$form['field_NAME'][LANGUAGE_NONE][0]['#attributes'] = array('maxlength' => 220); 

or

$form['field_NAME'][LANGUAGE_NONE][0]['#maxlength'] = 220; 

...and a gazillion variations using dsm($form) for ideas and to check my results. I could easily change the $form['field_name'] values but my textarea failed to acquire the maxlength atttribute.

This worked:

/**  * Implements hook_field_widget_WIDGET_TYPE_form_alter().  * Add a maxlength attribute to field_NAME.  */ function MYMODULE_field_widget_text_textarea_form_alter(&$element, &$form_state, $context) {   if (isset($element['#field_name']) && ($element['#field_name'] == 'field_NAME')) {     $element['value']['#attributes'] = array('maxlength' => 220);   } } 
 
 
1
 
vote

有两个模块可以做你想要的东西:

  1. 更好的格式可以隐藏每个角色的过滤器。
  2. 字段验证可以为该字段添加其他验证。
 

There are two modules which can do what you are wanting:

  1. Better formats can hide the filter per role.
  2. Field validation can add additional validation to the field.
 
 
       
       
1
 
vote

我们可以使用jQuery验证将字符数限制为255

    $max_length = 500; // 500 chars max (should pull this from a config var)   $form['my_textarea'] = array(     '#type' => 'textarea',     '#title' => t('Body'),     '#default_value' => $node->body,     '#required' => TRUE,     '#description' => t('The main body text of your entry.  Please note that this is limited to %limit characters or less.', array('%limit'=>$max_length)),     // this is the item to be added - limit length while typing     '#attributes'=>array('onKeyPress'=>"return(this.value.length<$max_length);),       );   

创建JS文件并使用drupal_add_js添加它:

    drupal_add_js(drupal_get_path('module', 'mymodule'). '/myfile.js');   

在myfile.js中定义以下功能:

  function textareaMaxLength(field, evt, limit) {   var evt = (evt) ? evt : event;   var charCode =     (typeof evt.which != "undefined") ? evt.which :    ((typeof evt.keyCode != "undefined") ? evt.keyCode : 0);    if (!(charCode >= 13 && charCode <= 126)) {     return true;   }    return (field.value.length < limit); }   

php验证

  arg(0)0  

参考: https://www.drupal.org/node/80122

 

We can limit the character count to 255 with jQuery validation

  $max_length = 500; // 500 chars max (should pull this from a config var)   $form['my_textarea'] = array(     '#type' => 'textarea',     '#title' => t('Body'),     '#default_value' => $node->body,     '#required' => TRUE,     '#description' => t('The main body text of your entry.  Please note that this is limited to %limit characters or less.', array('%limit'=>$max_length)),     // this is the item to be added - limit length while typing     '#attributes'=>array('onKeyPress'=>"return(this.value.length<$max_length);),       ); 

Create a JS file and add it using drupal_add_js:

  drupal_add_js(drupal_get_path('module', 'mymodule'). '/myfile.js'); 

Inside myfile.js define the following function:

function textareaMaxLength(field, evt, limit) {   var evt = (evt) ? evt : event;   var charCode =     (typeof evt.which != "undefined") ? evt.which :    ((typeof evt.keyCode != "undefined") ? evt.keyCode : 0);    if (!(charCode >= 13 && charCode <= 126)) {     return true;   }    return (field.value.length < limit); } 

php validation

function myform_validate($form_id, $edit) {   if (strlen($edit['text']) > 200) {     form_set_error('text', t('Your text contains more than 200 characters'));   } } 

Reference: https://www.drupal.org/node/80122

 
 
 
 
1
 
vote

对于在这里落地的任何人都在这里落地的人在Drupal 8 Textarea中寻找一个设置Maxlenghthea的方法,这对我来说是使用form_alter的工作:

  arg(0)1  

以下是使用自定义模块的示例:

  arg(0)2  
 

For anyone who lands here like I did looking for a way to set maxlength in a Drupal 8 textarea, this worked for me using form_alter:

$form['field_NAME']['widget'][0]['value']['#maxlength'] = 220;  

Here is an example using a custom module:

function mymodule_form_node_form_alter(&$form, FormStateInterface $form_state, $form_id) {     $node = $form_state->getFormObject()->getEntity(); //gets the node     if ($node->getType() == 'mynode') { //check that it is the node where I want this         $form['field_NAME']['widget'][0]['value']['#maxlength'] = 220;      } } 
 
 
   
   
0
 
vote

如果您使用的是Drupal 8,您可以快速地将此放在一起:

  • 更好的格式(按角色限制过滤器格式)
  • ckeditor wordcount (不做服务器侧验证,但提供简单的客户端验证)

ckeditor wordcount 有没有将html标记计算为的奖金,作为运作良好的字符一个wysiwyg的背景。我想你也可以在这里添加现场验证模块,但对于此用例,实地验证还必须在计算字符时忽略传入的HTML标记,以便验证匹配。

更好的格式将让您选择,每个字段都有文本格式化,是什么角色应该有权访问哪个过滤器。如果只选择1个过滤器,它们根本不会看到过滤器格式下拉。

 

If you are using Drupal 8, you could put this together pretty fast with:

  • Better Formats (limits filter formats per field, by role)
  • CKEditor Wordcount (doesn't do server side validation, but provides simple client side validation)

CKEditor Wordcount has the bonus of not counting HTML tags as characters which works well in the context of a WYSIWYG. I suppose you could add the Field Validation module in here as well, but for this use case, Field Validation would also have to ignore incoming HTML tags when counting characters so that the validations match up.

Better Formats will let you select, per field with text formatting on it, what roles should have access to which filters. If you only select 1 filter, they will not see a filter format drop down at all.

 
 
 
 

相关问题

1  通过以编程方式从菜单树数组渲染自定义菜单块  ( Render custom menu block from menu tree array of links programmatically ) 
在这里是我所拥有的:自定义菜单(侧面导航)模仿主/辅助菜单树,显示了显示根菜单项的整个子树(Dine,Play,Stay)您的整个子树下。 可以使用内容类型中的复选框字段缩短此SidenAV。如果选中,Sidenav将递归显示已选中的页面和所有子项,但省略已检查页面的任何父母。我已成功创建该菜单,这一切都在被...

1  如何使用单独的项目列表创建视图?  ( How to create a view with a list of items and item clicked ) 
我想创建一个显示左侧列表的视图和中心中项目的内容。当用户点击左侧列表中的项目时,必须在中心区域或列中显示该项目。它应该没有页面刷新。 想到显示文章的视图。左侧列表将显示小图像,标题和修剪描述,而中间列将显示单击的实际项目。 如何做到这一点? 注意:我也可以使用面板。 ...

4  通过命令行迁移时是否有可能包括额外的参数?  ( Is it possible to include extra arguments when migrating via command line ) 
在迁移通过命令行时是否可以包括额外的参数? 我有一个自定义迁移,它将XML内容迁移到Drupal作为实体。但是,迁移实体的每个XML文档都需要与不同的节点相关联。 我通过以下代码成功为节点关联执行此实体: function complete($entity, stdClass $row) { $node ...

1  如何实现可搜索的地址数据库(对于表单)?  ( How to implement a searchable addresses database for a form ) 
我不确定我是否应该在这个网站上询问此类问题,但我已经尝试在Drupal Forum 此处,到目前为止没有回复。 我正试图找出在现有的Drupal 7站点中实现解决方案的最佳方法,该解决方案必须满足以下要求: 从CSV / XLS文件将地址导入数据库的选项,其中: 字段:ID,城市,地区,街道,街道号码,邮政编码...

2  我应该在wape_embed_view中包含参数还是在hook_views_pre_view函数中?  ( Should i include arguments in views embed view or in a hook views pre view funct ) 
我在我的网站上有一个景观,几乎所有这些都需要他们的参数以编程方式通过。 我想知道哪种方法最好假设我正在使用视图_embed_view来打印所有这些方法。 谢谢。 ...

3  如何使视图排序区分大小写?  ( How to make views sorting case sensitive ) 
在视图中升序字母排序字符串字段如下所示: 1 2 3 a A b B 但我想要它: 1 2 3 A B a b 有没有办法来做这个? ...

2  如何防止WebForm显示在首页中  ( How can i prevent webform being displayed in front page ) 
我已安装Panoply分布和WebForm模块。我还创建了一个名为Contact表单的WebForm,并将窗格中的联系人表格添加为块。问题是:联系表格(WebForm)正在将首页显示为新内容。 我还尝试了各种设置,包括: 从发布选项中解开所有选项(管理»结构»内容类型»webform) 要删除但没有工作。 如何从...

2  如何正确删除“由Drupal提供动力”?  ( How do i properly remove powered by drupal ) 
如何删除站点页脚上显示的"驱动的Drupal" 字符串? 它是否涉及PHP编码? ...

0  在尝试在自定义模块中发送POST请求时,“CSRF验证失败”  ( Csrf validation failed when try to send post request in custom module ) 
这是我的完整代码。我想创建一个带有服务POST方法的节点。但我不能发帖。 "CSRF验证失败" 。 我遵循本教程: https://www.youtube.com/watch?v= wz2uarf9rgc 任何人都表明了一些东西。 <?php /** * Block Info */ function mymo...

0  Drupal Disqus评论是否有一个服务器端竞赛SEO索引?  ( Does drupal disqus commenting have a server side rending for seo indexing ) 
必须将评论服务外包给disqus保存很多时间,但有没有办法在将这些Disqus评论中呈现在服务器端之前,请在将其显示到最终用户之前?我的主要关注是SEO索引。使用DISQU评论时,在有什么解决方案以使SEO索引在Tact中进行索引? ...

1  模块模板文件以扩展主题  ( Module template file to extend theme ) 
我希望我的模块(事件)拥有自己的模板文件,但扩展了当前启用的基本主题。 hook_theme() : function events_theme($existing, $type, $theme, $path) { return array( 'test_events' => ar...

1  如何将新段落类型添加到内容类型?  ( How do i add my new paragraph type to a content type ) 
我已经做了一个新的段落类型,它在基本页面内容类型中显示为一个选项,但我也希望它出现在另一个内容类型中。 人会知道我在哪里设置这个吗? ...

0  如果默认值为“非活动”,则禁用单选按钮  ( Disable radio button if default value is inactive ) 
当 [#default_value] =&gt时,我需要禁用其他单选按钮;非活动如下面的代码,它是? 我尝试了不同的方式,但不成功。请告诉我如何做到这一点? php代码 foreach($form['field_complaint_status'] as $key=>$val) { echo '<p...

0  实体字段查询寻呼机仅加载第一页  ( Entity field query pager only loads first page ) 
如何使用实体字段查询寻呼机? $query = new EntityFieldQuery(); $result = $query->entityCondition('entity_type', 'node') ->entityCondition('bundle', 'event') ->pager(4)...

1  为什么我的节点类型特定的挂钩不起作用  ( Why does my node type specific hook not work ) 
我已经实现了 hook_node_info() ,如下所示: function mymodule2_node_info(){ return array( 'mynode1' => array( 'name' => 'MyNode1', 'base' => 'mynode1', ...

2  自定义模板面板设置  ( Custom block panelizer settings ) 
任何人都可以向我建议我如何在blaperizer中包含我的自定义模块的设置/配置表单? 我正在使用自定义模块,该模块使用API​​将数据显示给用户。 该块包含一个通过Panelizer放置在页面上的表单。 我的块显示没有问题,但我需要允许在相同或不同的页面上的块的每次出现时进行一些设置。 ...

1  使用它的令牌时如何包含一个字段的后缀?  ( How to include a fields suffix when using its token ) 
我的用户帐户有一个整数字段访问,带有后缀 visit|visits 。让Drupal自动决定哪种后缀是合适的,非常方便。我现在想在状态消息中使用这个字段,简单规则操作在网站上显示一条消息。不幸的是,当我将消息设置为 998887661 时,不包括后缀,只出现整数。 有没有办法解决这个问题?我想防止一个繁琐的规则额外检...

0  PDOException:sqlstate [42s22]添加测验内容时  ( Pdoexception sqlstate42s22 when adding quiz content ) 
我正在尝试在新网站上实现测验模块,并且在尝试添加内容&gt时会抛出以下错误;测验。我相信我所拥有的代码是我试图从一个不同的网站迁移的功能的一部分,所以我可以保留与它涉及的功能,但它被证明是不兼容的。 (从Drupal Commons 7.50到7.54中建造的演示主题普通Drupal)。 有人可以解释这个错误,并指向...

0  有一个主题设置表单输入的方式仅接受数字?  ( Way to have a theme settings form input to accept numbers only ) 
我正在创建一些主题设置,并且正在创建一个表单来填充 theme-settings.php 。我正在使用钩子 hook_form_system_theme_settings_alter() 。 我想限制或验证只能输入字段的数字。我在网上搜索,但没有找到该怎么做。有人会知道我应该添加什么代码吗? 代码当前看起来像: ...

0  如何显示触发消息活动规则的用户的图片?  ( How to show picture of the user who triggered the rule for message activity ) 
我正在使用消息模块在网站上录制用户活动并通过< href ="https://www.drupal.org/project/views" rel ="nofollow noreferrer" >视图。我正在使用规则模块在某些事件上触发动作并显示相关消息。 如何显示触发事件的用户的图片? 例如:当我的问题被Clive喜...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.