托管文件:可能无法引用字段中使用的文件 -- 7 领域 和 forms 领域 和 files 领域 drupal 相关 的问题

Managed file: the file used in the field may not be referenced


39
vote

问题

中文

我正在使用 managed_file 类型。每当我尝试编辑和保存具有托运_file元素的表单时出现错误:可能无法引用图片字段中使用的文件。

这是我正在使用的代码:

  function foo_form ($form, &$form_state, $foo) {     ...        $form['file'] = array(     '#type' => 'managed_file',     '#title' => t('Picture'),     '#default_value' => (isset($foo->file->fid) ? $banner->foo->fid : ''),     '#upload_location' => variable_get('foo_upload_location'),   );    if (isset($foo->file)) {     $form['current_file'] = array(       '#type' => 'hidden',       '#value' => $foo->file->fid,     );   }   ...   $form['submit'] = array(     '#type' => 'submit',     '#value' => t('Save'),   );   return $form;  }  function foo_form_submit ($form, &$form_state) {   $foo = (object)$form_state['values'];    $current_file_set = isset($form_state['values']['current_file']);    if ($form_state['values']['file'] != 0 && !$current_file_set) {     // Load the file uploaded in the form.     $file = file_load($form_state['values']['file']);      $file->status = FILE_STATUS_PERMANENT;      file_save($file);      $foo->file = $file->fid;   } else if ($form_state['values']['file'] != 0 && $current_file_set) {      // If we are uploading a different picture, delete the old one and save the     // new one. If not, don't do anything.     if ($form_state['values']['current_file'] != $form_state['values']['file']) {       file_delete(file_load($form_state['values']['current_file']));       // Load the file uploaded in the form.       $file = file_load($form_state['values']['file']);        $file->status = FILE_STATUS_PERMANENT;        file_save($file);        $foo->file = $file->fid;     }   } else {     file_delete(file_load($form_state['values']['current_file']));     $foo->file = null;   }    ... }   

我将错误追溯到 file_managed_file_validate 在模块/文件/ filemodule 中的函数,但不知道文件引用。

英文原文

I am having some issues with the managed_file type. Whenever I try to edit and save a form that has a managed_file element in it an error occurs: The file used in the Picture field may not be referenced.

This is the code I'm using:

function foo_form ($form, &$form_state, $foo) {     ...        $form['file'] = array(     '#type' => 'managed_file',     '#title' => t('Picture'),     '#default_value' => (isset($foo->file->fid) ? $banner->foo->fid : ''),     '#upload_location' => variable_get('foo_upload_location'),   );    if (isset($foo->file)) {     $form['current_file'] = array(       '#type' => 'hidden',       '#value' => $foo->file->fid,     );   }   ...   $form['submit'] = array(     '#type' => 'submit',     '#value' => t('Save'),   );   return $form;  }  function foo_form_submit ($form, &$form_state) {   $foo = (object)$form_state['values'];    $current_file_set = isset($form_state['values']['current_file']);    if ($form_state['values']['file'] != 0 && !$current_file_set) {     // Load the file uploaded in the form.     $file = file_load($form_state['values']['file']);      $file->status = FILE_STATUS_PERMANENT;      file_save($file);      $foo->file = $file->fid;   } else if ($form_state['values']['file'] != 0 && $current_file_set) {      // If we are uploading a different picture, delete the old one and save the     // new one. If not, don't do anything.     if ($form_state['values']['current_file'] != $form_state['values']['file']) {       file_delete(file_load($form_state['values']['current_file']));       // Load the file uploaded in the form.       $file = file_load($form_state['values']['file']);        $file->status = FILE_STATUS_PERMANENT;        file_save($file);        $foo->file = $file->fid;     }   } else {     file_delete(file_load($form_state['values']['current_file']));     $foo->file = null;   }    ... } 

I traced the error back to the file_managed_file_validate function in modules/file/file.module but don't know anything about the file references.

        

回答列表

40
 
vote
vote
最佳答案
 

解决方案是将呼叫添加到 file_usage_add 文件已保存。此调用在数据库中添加了对文件的引用。 file_managed_file_validate 功能将发现参考并获得' t触发错误。

  file_usage_add($file, 'foo', 'foo', $foo->id);   

在 forms api下,没有记录在托管_file示例下

在Drupal文档问题上讨论了此问题:链接

 

The solution is to add a call to file_usage_add after the file is saved. This call adds a reference to the file in the database. The file_managed_file_validate function will spot the reference and won't trigger the error.

file_usage_add($file, 'foo', 'foo', $foo->id); 

This isn't documented in the Form API under the managed_file example.

This issue is being discussed on the Drupal documentation issues: link

 
 
         
         

相关问题

4  如何在Drupal 7中以编程方式创建节点?  ( How to create a node programmatically in drupal 7 ) 
我知道您可以通过创建节点对象,然后触发node_save()以编程方式创建节点,但我实际上没有想要在数据库中存储节点。 是否有一种方法可以在查找内容屏幕中显示的代码中创建特定内容类型的节点,并使用视图等工作,但没有物理存储在数据库中。 我问的原因是,我有一个查看特定内容类型的一系列节点,但我想在该列表中创建自定义节...

1  搜索API +视图  ( Search api views ) 
如何在视图中使用与索引节点的关系来检索来自其他实体的字段? 作为一个示例...如果我使用"索引节点:作者" 创建关系。然后尝试在搜索结果视图中显示作者的名称,名称为空。我已经尝试了从选项中的每个关系和字段组合,但名称始终为空。 ...

1  如何在单个页面上显示答案模块的所有链接?  ( How to display all links of the answers module on a single page ) 
我使用 ansess 模块,它提供了各种视图,如图所示图片下面。但它不提供我们可以作为链接提供这些视图的任何东西。 我的意思是我希望一行中的所有这四个视图作为页面的菜单选项卡, 所以,它应该是这样的: 主菜单选项卡: Q&A 此q&单击选项卡,它应显示第一个选项卡的所有这些选项卡,默认为: 所有问题...

4  维护页面 - >显示特定块  ( Maintenance page show a specific block ) 
如何在维护页面(例如jQuery倒计时)上提供块?它是关于设置正确的权限吗? ...

2  Web服务器身份验证  ( Webserver authentication ) 
我正在寻找一个模块,用于为MS Windows网络实现单一登录。我找到了Web服务器身份验证( https://www.drupal.org/project/webserver_auth )。但是我在配置之前激活了模块,现在我无法访问admin,或者作为任何其他开发人员用户,以继续工作我的项目配置。 曾经有过这个问题...

3  选择列表的钩形更改  ( Hook form alter for select list ) 
我试图将标题的文本字段过滤器转换为使用钩形窗体删除的选定列表: function myhook_form_alter(&$form, &$form_state, $form_id) { if($form_id == 'views_exposed_form'){ // load nodes fi...

7  将内部连接更改为左侧连接3.3?  ( Changing an inner join to a left join in views 3 3 ) 
使用视图3.3,我在Drupal 7中有一个视图,其中我显示了两个内容类型。我基于仅附加到其中一个内容类型的字段的值的过滤条件。只要我拥有该字段标准,视图正在进行 INNER JOIN ,这导致它不会返回第一个内容类型的视图,这些类型没有附加该字段的第一个内容类型。 我从视图中复制查询,将 INNER 更改为 LE...

3  通过URL通过分类学术语,以在Drupal 7中添加内容表格  ( Passing a taxonomy term via url to add content form in drupal 7 ) 
好的,我有一个drupal 7网站。这种情况是,让我们说我在我的网站上遇到恰好有一个分配给它的分类学期 - 让我们说这是ABC的术语。在侧边栏中的块中,我有一个链接将用户发送到Aducuit主题的添加内容表单。表单主题内容类型也具有CCK字段(相同的词汇表)。我正在尝试使用与他们来自的页面相同的术语abc填充该字段。...

0  自动填充内容类型到另一个  ( Auto fill from on content type to another ) 
我有一个名为联系人的内容类型,一个人的基本信息。 (〜600节点) 我有另一个内容类型,如表单,具有所有与联系点的选择列表。当用户选择所需的 contact 时,按从选择列表中的名称,我需要其余的信息 contact 来自动 - 填写表格上的文本框。 任何想法? 注意:使用drupal 7 ...

4  如何在预告片中添加“添加新评论”链接中的rel =“nofollow”?  ( How to add rel nofollow in add new comment link in teaser ) 
是否有一个代码在预告片下"添加新的评论" 链接中添加rel ="nofollow" ? 这是D7生成的预告片中的代码: 添加新评论 所以我如何在该行中添加rel ="nofollow" ? ...

0  链接到视图中的节点  ( Link to node in views ) 
我有一个有2个显示器的视图: 列表:它是一个未格式化的列表,包含一个页面 表:显示表中的节点标题。 我需要的是在第二个显示器的每一行中的标题重定向到第一个显示中的相应节点,无论"每页项目" 和排序。 ...

1  面板布局设计师  ( Panel layout designer ) 
我遇到了这个视频显示如何使用面板设置自定义主页。我安装了混沌工具套件,以及面板模块,但我没有看到视频中的布局设计器界面,因为它在视频中显示。 ...

3  如何设置Drupal性能监控以绕过清漆?  ( How to setup drupal performance monitoring to bypass varnish ) 
本月我的Drupal Hosting Company有很多正常运行时间问题。 大多数时候我的pingdom监视器甚至没有提醒问题,因为清漆仍然能够为缓存的主页提供服务。 如何绕过清漆以检查Drupal实例的真实健康吗?它们有一个用户名/密码选项,但我确定的是http用户名/密码,而不是基于表单的登录名。 如果我指定假...

0  如何更新表单提交的自定义用户字段  ( How to update custom user field on form submit ) 
我想创建一个只有一个列出的自定义用户帐户字段之一的基本页面,可供编辑。 例如,我有一个自定义用户帐户字段:field_companyname 然后将用户转到 www.example.com/?q=user/1/edit , 我希望用户转到不同的页面(i.e www.example.com/node/5 )。 在此...

4  在我的帐户菜单中“添加链接”  ( Add link in my account menu ) 
用户帐户页面(http://example.com/user)包含一些默认选项卡,如"查看" ,"编辑" 等。 我想在那里添加我的菜单链接。要返回的内容应依赖于用户ID。我该怎么做呢? ...




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


Licensed under cc by-sa 3.0 with attribution required.