如何将文件路径添加到上传的文件中的文件 -- 7 领域 和 forms 领域 和 files 领域 drupal 相关 的问题

How to add a filepath to a file uploaded in form API


0
vote

问题

中文

问题

我有一个自定义表单,它创建一个节点。它基于此 link 并使用实体元数据包装器来创建节点。

创建的节点有一个图像字段,您可以使用表单上传创建时的图像。

如何为上传的图像设置上传目录?目前他们只是默认到我的公用文件夹。

设置

此表格有更多,但这些是重要的部分。我声明了一个文件字段。

  function postajob_form($form, &$form_state){    ....    $form['file'] = array(      '#type' => 'file',      '#title' => t('Thumbnail/Advert Picture.'),      '#size' => 5,    );  }   

我使用实体元数据包装器提交该文件。

  function postajob_form_submit($form, &$form_state) {    global $user;    $values = array(     'type' => 'job_advert',     'uid' => $user->uid,     'status' => 1,     'comment' => 1,     'promote' => 0,   );   $entity = entity_create('node', $values);    $ewrapper = entity_metadata_wrapper('node', $entity);    if (array_key_exists('storage', $form_state)) {       //if is required incase no image is uploaded.       $ewrapper->field_req_thumbnail_school->file = $form_state['storage']['file'];       //field is unset now it's no longer needed.       unset($form_state['storage']['file']);    } }   

我尝试改变 form_state 内的URI,但这没有效果。

   if (array_key_exists('storage', $form_state)) {       //altering the uri where the files are uploaded too        $imagefilename = $form_state['storage']['file']->filename;       $form_state['storage']['file']->uri = "public://user-upload/job-advert/$imagefilename";       //save the file       $ewrapper->field_req_thumbnail_school->file = $form_state['storage']['file'];     }   

但这没有任何影响。

英文原文

Problem

I have a custom form which creates a node. It's based off this link and uses the entity metadata wrapper to create the node.

The node created has an image field and you can use the form to upload an image on creation.

How can I set an upload directory for the image that's uploaded? At the moment they just default to my public folder.

Set-Up

There's more to this form, but these are the important parts. I declare a file field.

function postajob_form($form, &$form_state){    ....    $form['file'] = array(      '#type' => 'file',      '#title' => t('Thumbnail/Advert Picture.'),      '#size' => 5,    );  } 

I then submit that file using an entity metadata wrapper.

function postajob_form_submit($form, &$form_state) {    global $user;    $values = array(     'type' => 'job_advert',     'uid' => $user->uid,     'status' => 1,     'comment' => 1,     'promote' => 0,   );   $entity = entity_create('node', $values);    $ewrapper = entity_metadata_wrapper('node', $entity);    if (array_key_exists('storage', $form_state)) {       //if is required incase no image is uploaded.       $ewrapper->field_req_thumbnail_school->file = $form_state['storage']['file'];       //field is unset now it's no longer needed.       unset($form_state['storage']['file']);    } } 

I tried changing the URI inside the form_state, however this had no effect.

 if (array_key_exists('storage', $form_state)) {       //altering the uri where the files are uploaded too        $imagefilename = $form_state['storage']['file']->filename;       $form_state['storage']['file']->uri = "public://user-upload/job-advert/$imagefilename";       //save the file       $ewrapper->field_req_thumbnail_school->file = $form_state['storage']['file'];     } 

But this didn't effect anything.

        

回答列表

1
 
vote

每当我使用提交处理程序中的文件字段时,我使用:

  $validators = array('file_validate_extensions' => array('csv')); if ($file = file_save_upload('upload', $validators)) {   

您可以将一个可选的参数添加到file_save_upload之后$ destination的$ validators后,看看 https://api.drupal.org/api/drupal/includes .file.inc/function/file_save_upload/7 更多详细信息

 

Whenever I use a file field in the submit handler I use:

$validators = array('file_validate_extensions' => array('csv')); if ($file = file_save_upload('upload', $validators)) { 

You can add an optional argument to file_save_upload after $validators which is $destination, take a look at https://api.drupal.org/api/drupal/includes!file.inc/function/file_save_upload/7 for more details

 
 
 
 
0
 
vote
vote
最佳答案
 

在发布这个问题时显然没有祝福。我已经有了我只需要改变路径的代码。

直接从一个表单示例中采用以下代码进入表单验证功能。它验证文件(这显示了图像验证),然后将其移动到所需的路径。

  function mymodule_form_validate($form, &$form_state) {     //I upload the file with file_save upload     $file = file_save_upload('file', array(       'file_validate_is_image' => array(), // Validates file is really an image.       'file_validate_extensions' => array('png gif jpg jpeg'), // Validate extensions.     ));     // If the file passed validation:     if ($file) {       // Move the file, into the Drupal file system       // This is where you set the path.       drupal_mkdir("public://user-upload/job-advert/$usermail");       if ($file = file_move($file, "public:///user-upload/job-advert/$usermail")) {         // Save the file for use in the submit handler.         $form_state['storage']['file'] = $file;       }      }   }   
 

Clearly was not having a good day when I posted this question. I already had the code I just needed to change the path.

Taken straight from one of the form examples the following piece of code goes into the form validation function. It validates the file (this shows image validation) and then moves it to the desired path.

function mymodule_form_validate($form, &$form_state) {     //I upload the file with file_save upload     $file = file_save_upload('file', array(       'file_validate_is_image' => array(), // Validates file is really an image.       'file_validate_extensions' => array('png gif jpg jpeg'), // Validate extensions.     ));     // If the file passed validation:     if ($file) {       // Move the file, into the Drupal file system       // This is where you set the path.       drupal_mkdir("public://user-upload/job-advert/$usermail");       if ($file = file_move($file, "public:///user-upload/job-advert/$usermail")) {         // Save the file for use in the submit handler.         $form_state['storage']['file'] = $file;       }      }   } 
 
 

相关问题

1  如何摆脱仪表板上的空块?  ( How to get rid of empty blocks on the dashboard ) 
我创建了一个名为最近注释的视图,并为我的仪表板添加了一个块。之后,我删除了该视图,这会导致我的仪表板上的空块 和以下错误消息: 注意:未定义的索引:最近的评论 - 块 dashboard_page_build()(第192行 C: wamp www mysite modules inashbo...

4  在首次登录期间验证帐户后,显示所需的用户配置文件字段  ( Show required user profile fields after the account is verified during first log ) 
用户可以注册他们的用户名,电子邮件和密码。一旦帐户验证了他们的帐户,我需要显示像年龄,性别,性行为的定制必填字段。 完整的配置文件派上派上用力地强制填充所需的字段。 但是,如果我根据需要标记字段,它们会在注册表上显示。有没有办法在注册表单中隐藏用户配置文件所需的字段? 我尝试了 field permission 并...

5  响应布局的视图表  ( Views tables on responsive layout ) 
我在面板中有一个视图表块。 表是溢出了面板,我试图了解如何约束它。我尝试将它的CSS设置为各种宽度,但总是忽略它们。我可以改变单个列宽,颜色等,但不是宽度。 do视图表忽略了这些设置,只需显示到其内容的宽度? 设置其宽度的最佳方式是什么? 在响应主题中使用视图表的任何提示(在面板内)? 我正在使用drupal ...

0  关于Drupal 7的Permissons  ( About drupal 7s permissons ) 
我是新的drupal,当我看看表 {role_permission} 时,我发现权限被存储为文本字符串(例如"编辑自己的页面内容" )。但是当我在Drupal文件夹中做了Grep时,对于某些权限,它们只出现在* .test文件中(在这些文件中,创建了一些具有这些权限的用户)。似乎一些权限,如"编辑自己的页面内容" ,...

0  ctools_modal_render()处于条件下  ( Ctools modal render in a condition ) 
我在我的custom.module中有以下代码(在 hook_init() )中使用它: if ($js) { // Required includes for ctools to work: ctools_include('modal'); ctools_include('ajax'); } if...

0  将窗口小部件添加到文件字段中  ( Add widget to file field ) 
我正在寻找编写一个字段窗口小部件以在Drupal 7中扩展文件字段。原因是我想要在上传后执行一些文件解析。是我能看的例子吗?我应该如何了解这个新模块?或者有更好的方法可以做到这一点吗? ...

2  使用hook_update drupal 7添加新字段  ( Add new field using hook update drupal 7 ) 
我是新的drupal,我正在寻找一个方法来在drupal 7中向已经安装的内容类型添加新字段。请注意,数据库中已存在一些内容。此外,我需要以编程方式而不是通过GUI进行操作。 我正在考虑使用hook_update函数来添加新字段。这是我的安装文件: Error: missing group2 我用唯一的作业安...

4  过滤分类菜单块上显示的节点  ( Filtering nodes shown on taxonomy menu block ) 
如图中一样,分类术语显示标记的节点数量术语(使用CaCaonomy_Menu模块)。该节点是类型分类广告。 是否有可能过滤掉过期的广告?我的意思是在图片中,第一个菜单项是"10th" ,其中24个节点。但我想过滤出5个过期的节点,其中包含它已过期的隐藏标志。所以应该显示为"10th(19)" 我该怎么做? 看起来...

3  禁用区域设置模块破坏站点  ( Disable locale module breaks site ) 
我们希望禁用Drupal站点中的区域设置模块。由于某些内容被保存为语言"en" 以前,禁用语言环境不会将内容和字段数据库表语言字段重置为"und" 或language_none。禁用模块后,不会显示已保存为"en" 的任何节点或字段。 要修复此我创建了一个模块以更新整个数据库。 $schema = dru...

0  Drupal Commerce PayPal WPS - 连接拒绝  ( Drupal commerce paypal wps connection refused ) 
我试图让WPS模块用于卸妆商务,但我收到错误。在我的日志中付款后,我看到了。 尝试使用错误-111验证ipn失败:连接拒绝 这与Pay PAL模块相关的代码是: // Process the HTTP request to validate the IPN. $response = drupal_http_r...

3  我们可以在Hybridauth模块中自定义用户登录块  ( Can we customize user login block in hybridauth module ) 
我们可以在我们的自定义主题中的Hybridauth模块中自定义用户登录块吗? 就像写作 block-hybridauth-hybridauth.tpl.php 。 我需要自定义输出方式。而不是签名的标志,它给出了支持的社交帐户列表的叠加,我需要一些文本来替换它并添加div和内容以及它?是否有可能? ...

3  Drupal 7,表单API - 文件字段default_value  ( Drupal 7 form api file field default value ) 
我创建了一种惯用,其中用户可以使用文件字段上传图像。在另一种惯例中,用户能够更改他以前上传的图像。 到目前为止,我能够上传一个新图片或让现场空洞和现有图像保持。我的问题是,我如何以良好的方式向用户展示他以前上传的界面上传?设置#default_value(下面的@code)对我没有任何作用。 //$smalli...

1  Metatag和Page Title模块冲突  ( Metatag and page title modules conflict ) 
我使用drupal 7与 metaTag 模块以及 page title 模块。 我需要使用某些节点字段和其他条件构建自定义内容类型的标题以及我无法使用所提供的令牌重现的其他条件,因此我已将页标题API( 99887660 )仅对一个节点类型构建我的自定义标题。 函数工作和页面标题已设置。但元标签是错误的,它们不使用...

1  如何验证RSS Feed链接?  ( How do i validate the rss feed link ) 
这是我的自定义表单,有三个字段, 图像: 代码: function planet_extension_form($form,&$form_submit){ $form['url']=array( '#title' => 'URL', '#type' => 'textfield', '#required' =...

2  如何在初始表单加载上运行drupal.ajax命令?  ( How to run drupal ajax commands on initial form load ) 
我已经创建了一些自定义drupal.ajax命令。 ,我有一个ajax回调,用作字段更改值。 但我想在初始表单加载上运行一些这些Ajax命令。 我的用例:我有一个下拉下落的值,具体取决于我想要使用设置阵列调用一些js的下拉下降,以在地图上显示自定义信息,设置调用返回等。 有没有一种干净的方式?具有一致的初始设置方法和...

0  创建批量节点 - PDOException  ( Create bulk nodes pdoexception ) 
问题 我正在尝试使用用于数据的CSV文件创建多个节点。但是,我的脚本只在它抛出以下错误之前创建前25。任何可能发生的想法? porpexception:在drupal_write_record()(c: xampp htdocs drupalie commany common.inc的第7166行)。...

1  在Drupal 7中使用Profile2模块添加用户配置文件的动态和多个字段  ( Adding dynamic and multiple fields for user profile using profile2 module in dru ) 
我正在创建像LinkedIn这样的个人资料。 用户可以拥有多个教育文件,并且他可以动态地添加/修改。 是否有任何插件,适合我的要求。 我找到的最近是Profile2,它很有希望但不提供多个条目功能。 可以drupal帮助我解决这个问题? 提前感谢。 Yatendra 编辑:我想要LinkedIn教育向导等配置文件类...

1  如何在视图中使用自定义表  ( How to use custom tables in views ) 
我使用的是MultiSite Drupal6.26网站使用浏览视图3.0模块。 两个站点都在单个数据库中安装。 第一个/父网站没有其表的前缀:节点,块,角色等。 第二个/童头有孩子的前缀。 ex:child_node,child_block,child_rogle等。 我有一个视图,显示了父网站帐户中用户上传的所有...

2  如何使用表单API验证临时文件  ( How to validate temporary files with form api ) 
问题 我有一个包含三个文件字段的自定义表单。选择文件,然后在提交时,它们附加到电子邮件中,并通过呼叫发送到 99887664 。 我非常确定文件没有保存到服务器,我不希望保存在文件可能是敏感信息时。 但我希望字段支持某些文件扩展。如何验证它们? 到目前为止 有一个函数: file_validate_exte...

3  db_select条件与子查询导致PDOException  ( Db select condition with subquery causes pdoexception ) 
我想在其条件下使用子查询构建一个相对简单的选择查询。我想要实现的是在给定时间戳之后获得更新的用户列表。 我想要构建的工作SQL查询作为动态查询是: files[] = tests/module.test 3 我写了以下代码以使用Drupal的数据库API构建上面的查询: files[] = tests/...




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


Licensed under cc by-sa 3.0 with attribution required.