用于文本字段错误的字段API Field_schema -- 7 领域 和 entities 领域 drupal 相关 的问题

Field API field_schema for text field error


3
vote

问题

中文

我使用字段API建立了自定义字段。我定义了以下元素:

    $element['tabcontent'] = array(     '#title' => t('Tab content'),     '#type' => 'text_format',     '#required' => $required,     // use #default_value to prepopulate the element     // with the current saved value     '#default_value' => isset($item['tabcontent']) ? $item['tabcontent'] : '',     '#tree' => true,     '#rows' => 10,     '#format' => 'full_html',     '#base_type' => 'textarea',   );   

我在安装文件中有以下代码:

  function tabfield_field_schema($field)  {     $columns = array(     'tabtitle' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE),     'tabcontent' => array('type' => 'text','not null' => TRUE,'size' => 'normal','description' => 'Question prompt','length' => '1000'  ),   );     return array(     'columns' => $columns,     'indexes' => array(),   ); }   
但是,保存新节点时,我会收到以下错误:

警告:preg_match_all()期望参数2为字符串,数组 给出_media_generate_tagmap()(第186行) C: workspace rnd drupal1 sites all modules media complity media.filter.inc)。

警告:foreach()提供的无效参数 _media_generate_tagmap()(c: workspace rnd drupal1 sites all modules media commany media.filter.inc)的第187行。

警告:htmlspecialchars()期望参数1为字符串,数组 给出check_plain()(第1572行) C: workspace rnd drupal1 包括 bootstrap.inc)。

pdoException: SQLSTATE [21S01]:INSERT值列表与列列表不匹配:1136 列计数与第1行的值计数不匹配:插入 {field_data_field_tab}(entity_type,entity_id,revision_id,bundle, Delta,language,field_tab_tabtitle,field_tab_tabcontent)值 (:db_insert_placeholder_0,:db_insert_placeholder_1, :db_insert_placeholder_2,:db_insert_placeholder_3, :db_insert_placeholder_4,:db_insert_placehall_5, :db_insert_placeholder_6,:db_insert_placeholder_7_value, :db_insert_placeholder_7_format);数组([:db_insert_placeholder_0] =>节点[:db_insert_placeholder_1] => 17 [:db_insert_placeholder_2] => 17 [:db_insert_placeholder_3] => tabbed_pa​​ge. [:db_insert_placeholder_4] => 0 [:db_insert_placeholder_5] => und. [:db_insert_placeholder_6] => ss [:db_insert_placeholder_7_value] => ss [:db_insert_placeholder_7_format] => full_html) field_sql_storage_field_storage_write()(第448行) C: workspace rnd drupal1 modules field modules field_sql_storage field_sql_storage.module)。

英文原文

I've built a custom field using the Field API. I've defined the following element:

  $element['tabcontent'] = array(     '#title' => t('Tab content'),     '#type' => 'text_format',     '#required' => $required,     // use #default_value to prepopulate the element     // with the current saved value     '#default_value' => isset($item['tabcontent']) ? $item['tabcontent'] : '',     '#tree' => true,     '#rows' => 10,     '#format' => 'full_html',     '#base_type' => 'textarea',   ); 

I've got the following code in the install file:

function tabfield_field_schema($field)  {     $columns = array(     'tabtitle' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE),     'tabcontent' => array('type' => 'text','not null' => TRUE,'size' => 'normal','description' => 'Question prompt','length' => '1000'  ),   );     return array(     'columns' => $columns,     'indexes' => array(),   ); } 

However, I get the following error when saving a new node:

Warning: preg_match_all() expects parameter 2 to be string, array given in _media_generate_tagMap() (line 186 of C:\Workspace\RnD\drupal1\sites\all\modules\media\includes\media.filter.inc).

Warning: Invalid argument supplied for foreach() in _media_generate_tagMap() (line 187 of C:\Workspace\RnD\drupal1\sites\all\modules\media\includes\media.filter.inc).

Warning: htmlspecialchars() expects parameter 1 to be string, array given in check_plain() (line 1572 of C:\Workspace\RnD\drupal1\includes\bootstrap.inc).

PDOException: SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1: INSERT INTO {field_data_field_tab} (entity_type, entity_id, revision_id, bundle, delta, language, field_tab_tabtitle, field_tab_tabcontent) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6, :db_insert_placeholder_7_value, :db_insert_placeholder_7_format); Array ( [:db_insert_placeholder_0] => node [:db_insert_placeholder_1] => 17 [:db_insert_placeholder_2] => 17 [:db_insert_placeholder_3] => tabbed_page [:db_insert_placeholder_4] => 0 [:db_insert_placeholder_5] => und [:db_insert_placeholder_6] => ss [:db_insert_placeholder_7_value] => ss [:db_insert_placeholder_7_format] => full_html ) in field_sql_storage_field_storage_write() (line 448 of C:\Workspace\RnD\drupal1\modules\field\modules\field_sql_storage\field_sql_storage.module).

     
 
 

回答列表

1
 
vote

这是因为您的值假设 string ,但根据这些错误给出 array

警告:preg_match_all()期望参数2为字符串,_media_generate_tagmap()中给出的数组

警告:htmlspecialchars()期望参数1为字符串,在check_plain()

中给出的数组

自发送阵列以来,列计数在SQL查询中与不匹配。

这是您发送的:

  INSERT INTO {field_data_field_tab} (entity_type, entity_id, revision_id, bundle, delta, language, field_tab_tabtitle, field_tab_tabcontent) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6, :db_insert_placeholder_7_value, :db_insert_placeholder_7_format); Array ( [:db_insert_placeholder_0] => node [:db_insert_placeholder_1] => 17 [:db_insert_placeholder_2] => 17 [:db_insert_placeholder_3] => tabbed_page [:db_insert_placeholder_4] => 0 [:db_insert_placeholder_5] => und [:db_insert_placeholder_6] => ss [:db_insert_placeholder_7_value] => ss [:db_insert_placeholder_7_format] => full_html )   

可以破坏:

  • 字段: entity_type,entity_id,revision_id,bundle,delta,language,field_tab_tabtitle,field_tab_tabcontent
  • 占位符::db_insert_placeholder_1,:db_insert_placeholder_2,:db_insert_placeholder_2,:db_insert_placeholder_3,:db_insert_placeholder_4,:db_insert_placeholder_5,:db_insert_placeholder_6,:db_insert_placeholder_6,:db_insert_placeholder_7_value,:db_insert_placeholder_7_format

所以你是8个字段,但是9个占位符。

修复

要修复它,您可以检查 $item['tabcontent'] 的传递值,并使其成为一个字符串。例如:
  '#default_value' => !empty($item['tabcontent']['value']) ? $item['tabcontent']['value'] : '',   

另见:

  • 使用'#type'=&gt的字段时的错误。 'text_format'
 

This is because your value suppose to be string, however you given array as per these errors:

Warning: preg_match_all() expects parameter 2 to be string, array given in _media_generate_tagMap()

Warning: htmlspecialchars() expects parameter 1 to be string, array given in check_plain()

Since you're sending array, the column count doesn't match in your SQL query.

This is what you're sending:

INSERT INTO {field_data_field_tab} (entity_type, entity_id, revision_id, bundle, delta, language, field_tab_tabtitle, field_tab_tabcontent) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6, :db_insert_placeholder_7_value, :db_insert_placeholder_7_format); Array ( [:db_insert_placeholder_0] => node [:db_insert_placeholder_1] => 17 [:db_insert_placeholder_2] => 17 [:db_insert_placeholder_3] => tabbed_page [:db_insert_placeholder_4] => 0 [:db_insert_placeholder_5] => und [:db_insert_placeholder_6] => ss [:db_insert_placeholder_7_value] => ss [:db_insert_placeholder_7_format] => full_html ) 

which can be broke down into:

  • Fields: entity_type, entity_id, revision_id, bundle, delta, language, field_tab_tabtitle, field_tab_tabcontent
  • Placeholders: :db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6, :db_insert_placeholder_7_value, :db_insert_placeholder_7_format

So you've 8 fields, but 9 placeholders.

Fix

To fix it, you've to check passed value of $item['tabcontent'] and make it a string. For example:

'#default_value' => !empty($item['tabcontent']['value']) ? $item['tabcontent']['value'] : '', 

See also:

  • Errors when using a field of '#type' => 'text_format'
 
 
0
 
vote

我只使用此方法的组合+变量_get()方法来工作。

输入图像描述

输入图像描述

最终代码如下所示。请注意来自该字段的格式以及

 

I only got it to work by using a combination of this approach + the variable_get() method.

enter image description here

enter image description here

The final code looks like this. Notice the format coming from the field as well

 
 

相关问题

3  关于Drupal与Android互动  ( About drupal interact with android ) 
要求:〜 Android应用程序将JSON数据发布到某个URL。 drupal可以接收JSON数据,然后以JSON格式验证JSON数据并返回结果数据。 我的问题是接收JSON数据并返回JSON数据步骤。我可以使用什么模块或API? 如果您可以共享样本,则会更高帮助。 ...

5  我可以使用db_update来更新字段(将字符串附加到数据库中的当前字符串)  ( Can i use db update to update a field appending a string to the current string ) 
是可以做的事情: db_update('my_module_table')->fields( array('myfield' => <myfield> + 'newstring') ); 或者我必须首先使用 db_select()? 也许有所同时使用 db_query()? ...

6  有没有办法创建分类路径重定向?  ( Is there a way to create a taxonomy path redirect ) 
我正在尝试为特定分类URL创建分类学重定向。基本上是什么分类系统重定向到drupal 6,但对于drupal 7 。我已经搜索了 hook_term_path 但看不到它。 最后,我需要这些链接与特定的Profile2配置文件相关联。 这是可能的吗? ...

0  将Formapi表单发布到另一条路径?  ( Posting a formapi form to another path ) 
我有一个简单的形式,呈现"命令这个" 按钮。该表单放在节点上。当人们按下该按钮时,我想开始一个订购工作流程。 目前滴水方式似乎是: 在 node/123 ,上为节点添加表单 用户点击表格提交,post转到 node/123 。 hook_form_submit() 被解雇,接收发布的值Trough表单API。 ...

5  将节点连接到菜单链接或将自定义字段附加到菜单链接?  ( Attach a node to a menu link or attach custom fields to menu links ) 
我的客户希望将内容添加到主菜单中的顶级链接,以便在下拉菜单中显示"特色" 内容。他们必须能够选择将显示哪些内容,以及它将与之关联的菜单链接。我认为我有两个选择: 1)在"菜单中" 创建"功能" 内容类型,并添加顶级菜单链接作为字段的下拉菜单。此问题的问题是我不确定如何输出将列出顶级主菜单链接的自定义字段。目前似乎没...

3  用支付网关上的Ubercart商店上的AdWords转换跟踪?  ( Adwords conversion tracking on ubercart store with payment gateway ) 
是可以实现AdWords转换跟踪,以便通过支付门户的考虑转换(客户离开站点暂时退回,并且通常会转换为期,因此暂时停留)? 我已经注入了AdWords跟踪代码来订购完成页面,但它只跟踪计费选项(客户不离开网站)的订单。 如果这是不可能的,是否可以注入订单审查页面的代码,如果是的话? (这是糟糕的,因为一些客户不会完成订...

1  如何从模块内更新节点的文件字段?  ( How do i update a nodes file field from within a module ) 
我有一个文件: /tmp/new.zip ,我有一个节点, $node ,具有文件字段, <a>0 。目前, <a>1 是保存到 998876612 字段中的文件。我想把 <a>3 放在那里。 我现在有什么: <a>4 <a>5 在这里失败,因为 <a>6 应该是一个数组,而不是一个对象。我想象有一个函数...

1  如何设置响应URL以使用HTTPS?  ( How can i set a response url to use https ) 
我有一个JSON响应,我需要强制在直播服务器上使用HTTPS。 所以我需要检测响应URL是否使用HTTP或HTTPS。 如果它使用HTTP我需要将其切换到HTTPS。 如何强制标题使用https? ...

0  显示消息或块当查看页面为null或空  ( Display message or block when view page is null or empty ) 
我有一个 Content Type : Events ,我已经创建了3个事件,他们目前 published 并显示在 Page IE Display as View 。 如果没有发布 Events 那么它应该将自定义消息显示为"无事件" 或"块" 。 我正在尝试使用null值的视图,但我无法得到它。是否有这样的东...

0  Drupal Wysiwyg编辑器  ( Drupal wysiwyg editor ) 
当人们添加评论时,我想有一个简单的wysiwyg,当人们编辑基本页面的正文时。 看起来像这样的东西: 任何想法? ...

17  如何通过比较2字段来筛选视图。如果字段-A <FIELD-B  ( How to filter view by comparing 2 fields if field a field b ) 
我有一个有2个价格字段的产品内容类型。 我想创建一个显示所有产品的视图,其中Price-a低于Price-b。 我希望我能只能添加一个过滤器,然后选择价格 - 然后选择工作量小于并将值设置为price-b,但是您不能这样做。 我已经研究了一个观点钩子,主要是hook_views_query_alter但没有运气。 我...

2  可以在服务器中重命名上传的文件以避免名称碰撞?  ( Can uploaded files be renamed in the server to avoid name collision ) 
我希望我的网站托管一些图像。用户能够将图像上载为内容类型。 如果两个用户创建内容并使用完全相同的名称(MyImage.png)创建内容并上传图像,则旧图像文件是否会在服务器中覆盖(因此,两个内容条目都将最终包含相同的图像文件)? 如果是的,它是相当令人不安的。所以现在我想知道:有一个模块是否重命名上传的文件,以便它不...

0  如何构建与清洁和“脏”URL兼容的链接?  ( How to build links compatible with clean and dirty urls ) 
我有一个不支持Clean URL的开发网站,我的生产网站确实支持它们。 如果我在节点的主体中构建链接,如: <a href="view-something/4,7">View something</a> 这在我的生产网站上显示了OK,但在开发网站时提供了404个。 如何构建普遍的良好网址? ...

1  在Drupal 7中为同一图像提供几个下载选项  ( Provide several download option for same image in drupal 7 ) 
有人会有什么想到如何在Durpal 7中创建同一图像的几个下载选项。 示例网站是: http://www.travesto.com/content/101jpg -Anime-Airmated 其中启用了几个下载选项。 我想为我的生日照片创建类似的选择。我认为可以是视图模块在这里使用。但不确定。如果有人有任何想法这样...

0  由于open_basedir限制,我无法启用最简单的最简单  ( I cant enable simpletest due to open basedir restriction being in force ) 
由于我的Drupal7 Installaton驻留在运行PHP 5.2.12的Linux服务器上,我无法启用SimpleTest。我在php.ini文件下找到了该指令,但它已经在那里发表评论。 当我尝试在我的模块配置中启用最简单时,我会看到以下错误: "测试框架需要禁用PHP Open_Basedir限制。检查您的W...

0  使用答案模块服务API奇怪  ( Service api acting strange with answers module ) 
我目前正在开发一个Android应用程序,它使用休息来与Drupal沟通 我已经设置了服务模块,并使用正常的"帖子" 内容类型节点 但是,如果我发布 question 节点从答案模块,它不起作用。 所以,我发布了这样的json字符串: {"node": { "title":"REST question", ...

1  如何在网站处于维护模式时启用Google Analytics?  ( How to enable google analytics while site is in maintenance mode ) 
我想知道有多少用户访问当前处于维护模式的网站。我已经安装了Google Analytics模块,但它没有将Google跟踪代码添加到维护页面,因此Google Analytics说"跟踪未安装" 。 如何在站点处于维护模式时启用它? ...

2  在User / X /和User / X /编辑页面上显示UID  ( Displaying uid on user x and user x edit page ) 
我想在 user / x 和用户/ x /编辑 uid (只读)用户的 uid (只读)页面。 通过使用下面的函数,我设法显示 user / x /编辑页面上的 uid 。 function my_module_form_user_profile_form_alter(&$form, &$form_state, ...

1  表单构建器模块不在Drupal 7中工作  ( Form builder module not working in drupal 7 ) 
可以有人确认是否表单构建器模块正在工作。我查看 .module ,似乎路径仍在使用Drupal 6格式。 ...

1  视图:公开过滤器 - 在特定日期集之间过滤掉结果  ( Views expose filter filter out results between a specific set of dates ) 
我有一个视图(内容类型= CAR,创建日期过滤器"公开" 和某些字段以显示在表中的结果)。 是否有任何方法可以在使用过滤器选择的日期中显示未创建的所有节点? 谢谢 ...




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


Licensed under cc by-sa 3.0 with attribution required.