如何从$ form_state ['值']恢复表单值? -- 7 领域 和 forms 领域 和 database 领域 drupal 相关 的问题

How to restore form values from $form_state['values']?


0
vote

问题

中文

我在数据库中保存 $form_sate['values'] 。当我的用户返回到我想要之前所提出的值的表格。类似:

  function my_form($form, &$form_sate) {   $form_state_saved = get_form_state_values_from_db();    $form['my_field'] = array(     ...     '#default_value' = $form_state_saved['my_field'];     ...   );    return $form; }   

textfield 似乎工作正常,但我有一些自定义字段。有没有办法从 db 设置 default_value ?或者我应该为每个字段独立地实现 998876667 吗?

英文原文

I save the $form_sate['values'] in a data base. When my users come back to the form I want to show the values that they put before. Something like:

function my_form($form, &$form_sate) {   $form_state_saved = get_form_state_values_from_db();    $form['my_field'] = array(     ...     '#default_value' = $form_state_saved['my_field'];     ...   );    return $form; } 

With a textfield seems that works fine, but I have some custom fields. Is there a way to set the default_value from db? Or should I implement the default_value independently for each field?

        
   
   

回答列表

1
 
vote

使用表单默认值:

  '#default_value' => variable_get('sitename_textfield', ''),   

如果使用system_settings_form(),则不需要使用自定义表单提交函数手动保存变量。注意:变量必须具有与表单项相同的名称。

功能详细信息: https:// api .drupal.org / api / drupal / modules!系统!system.module / function / system_settings_form / 7

  /**  * Creates/returns a form to configure the variables.  *  * @param array $form  * @param array $form_state  * @return array  */ function sitename_custom_form($form, &$form_state) {   $form['sitename_textfield'] = array(     '#type' => 'textfield',     '#title' => t('Custom Textfield'),     '#default_value' => variable_get('sitename_textfield', ''),   );    // Use system_settings_form() to automate saving configuration variables.   return system_settings_form($form); }   
 

Use Form default value:

'#default_value' => variable_get('sitename_textfield', ''), 

If you use system_settings_form() you don't need to manually save your variables using a custom form submit function. Note: The variable must have the same name as the form item.

Function details: https://api.drupal.org/api/drupal/modules!system!system.module/function/system_settings_form/7

/**  * Creates/returns a form to configure the variables.  *  * @param array $form  * @param array $form_state  * @return array  */ function sitename_custom_form($form, &$form_state) {   $form['sitename_textfield'] = array(     '#type' => 'textfield',     '#title' => t('Custom Textfield'),     '#default_value' => variable_get('sitename_textfield', ''),   );    // Use system_settings_form() to automate saving configuration variables.   return system_settings_form($form); } 
 
 
0
 
vote

如果您只想设置以前的值,则需要使用变量_set() 使用变量_set()

对每个Fiele元素的独立值毫无危及
    function my_form($form, &$form_sate) {       $form['my_field'] = array(         ...         '#default_value' = variable_get('my_field','');         ...       );    return $form; } function my_form_submit($form, &$form_sate) {        variable_set('my_field',  $form['my_field']['#default_value']);     }   
 

You need to use variable_set() if you only want to set the previous value There is no harm in storing independent values for each fiels element using variable_set()

  function my_form($form, &$form_sate) {       $form['my_field'] = array(         ...         '#default_value' = variable_get('my_field','');         ...       );    return $form; } function my_form_submit($form, &$form_sate) {        variable_set('my_field',  $form['my_field']['#default_value']);     } 
 
 
0
 
vote
vote
最佳答案
 

最后,我的同事所做的是 field_default_form field_form_set_state

  $field_state = array(   'field' => $field,   'instance' => $instance,   'items_count' => $count,   'array_parents' => array(),   'errors' => array(), ); field_form_set_state($parents, $field_name, $language, $form_state, $field_state);   

$items 是一个包含存储在数据库中的表单值的数组。

  $form_field = field_default_form('node', NULL, $field, $instance, $language, $items, $form, $form_state);  $form[$field_name] = $form_field[$field_name];   
 

Finally, what my colleague did was a combination of field_default_form and field_form_set_state.

$field_state = array(   'field' => $field,   'instance' => $instance,   'items_count' => $count,   'array_parents' => array(),   'errors' => array(), ); field_form_set_state($parents, $field_name, $language, $form_state, $field_state); 

$items is an array with the form values stored in a database.

$form_field = field_default_form('node', NULL, $field, $instance, $language, $items, $form, $form_state);  $form[$field_name] = $form_field[$field_name]; 
 
 

相关问题

1  自定义现场容器  ( Customising field container ) 
我创建了一个CCK字段格式化器。该字段输出从FileField上传到链接到Google Docs的嵌入式Iframe。它目前输出: <div class="field field-type-filefield field-field-documents"> <div class="field-items"> ...

3  OAuth和Facebook  ( Oauth and facebook ) 
是否有一种方法可以让用户自动注册到Drupal网站,如果它们登录到Facebook?我知道 facebook 和 facebook - auth ,但他们正在使用 表格,而不是用户配置文件。 ...

3  如何仅将jQuery添加到用户个人资料页面?  ( How to add jquery to the user profile page only ) 
我和javascript / jquery不相处得很好... 我想做的是向用户的"关于我" 文本的前200个左右,然后单击"更多" 链接时展开它。 我添加到我的template.php function bartik_preprocess_user_profile(&$variables){ drupal...

3  如何自动突出显示页面上显示的代码的语法?  ( How to automatically highlight syntax of code displayed on page ) 
我正在开发一个网站,用于从不同的编程语言发布我的代码。我想突出用不同颜色的代码语法。但是,手动这样做是耗时的。 是否有任何模块或方法可以自动执行此操作?严格,它应该以CSS方式完成。 ...

2  在D7中的登录失败后将用户重定向到不同的页面  ( Redirect users to different page after a login failure in d7 ) 
我想将用户重定向到不同的页面,如果他们输入错误的登录详细信息,因为我正在使用以下代码,但它不起作用。 function bartik_form_alter(&$form, &$form_state, $form_id) { if ($form_id == "user-login") { ...

5  将文件拖放到Drupal网站中?  ( Drag drop files into drupal site ) 
是否有人知道一个模块,允许将文件从用户计算机拖动到站点中的目标区域(如Gmail或WordPress)? 理想情况下,这将使用图像和其他模块,将文件"正确" 插入Drupal,保存上传器信息,并允许添加元数据(如WordPress媒体区域)。 ...

3  无法删除新分类术语的描述字段  ( Cant remove description field for new taxonomy terms ) 
我创建了一种新的分类词汇。出于某种原因,我无法为术语删除描述字段,但我只需要标题字段。 是一个错误还是不可能做的或者是隐藏在某处奇怪的设置?谢谢 ...

3  单个文档,用于下载的多个文件型:如何管理?  ( Single document multiple filetypes for download how to manage ) 
我想将多个文档上传/附加到书节点。每个文档都将以多种文件格式提供,例如: 报告2010.pdf 报告2011.rtf 报告2011.doc 协议11.pdf 协议11.rtf 协议11.doc 鉴于此,为了: 提供了一个明智的上传界面(如filefield),允许上传无限数量的文件。 呈现这些文件以...

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

8  将您自己的内容添加到节点  ( Add your own content to node ) 
我创建了一个模块,将自定义内容添加到节点;我想在节点视图中显示此自定义内容。我认为 hook_node_view() 是右挂钩要使用,但我的内容没有显示。 到目前为止我的内容是以下代码: function mymodule_node_view($node, $view_mode = 'full', $langco...

4  将标志链接转换为复选框  ( Convert a flags link into a checkbox ) 
是否有一种方法可以转换标志在视图中复选框中的链接?我尝试了标志形式模块,但它没有工作(至少不是在视图中)。我介绍了标志在显示类型功能请求中添加复选框。讨论点使用CSS,JavaScript或黑客标志模板文件。还有其他方法吗? 我对使用JavaScript做到这一点不利,但我很少了解它。 ...

0  hook_node_access的呼叫数  ( Number of calls of hook node access ) 
我使用hook_node_access()来重定向用户,如果它们没有右属性以查看特定节点。 虽然编程我使用DPM()来检查一些变量并想知道,但DPM()称为9次,尽管我刚打开一个节点。 嗯,我的问题是: 它是正常的,它是一个节点的多次调用hook_node_access,所以我应该使用drupal_static()...

1  如何订阅一页的任何或所有分类条款?  ( How to subscribe to any or all taxonomy terms on one page ) 
我想知道设置"订阅获取电子邮件提醒" 的最佳方式 我的内容类型是"标记为" 标记"的各种分类学 而且我想设置一个简单的"订阅才能获得电子邮件提醒" 页面,用户可以订阅它们喜欢的任何"术语" ,以便在使用关联的标签创建内容类型的新项目时将电子邮件发送给它们。 我已安装通知和消息传递模块 它使我能够创建一个"订阅块" ,...

7  停止Drupal 7垃圾邮件发送者在mysite.com注册  ( Stopping drupal 7 spammers registering at mysite com ) 
我在 mysite.com上有一个新的drupal 7站点(地址已更改) - CentOS 5.5 Linux机器在我的完全控制中。 通过阅读注册邮件(它们通过我的Gmail帐户)我注意到,Drupal垃圾邮件发送者似乎通过地址引用我的网站 forum.mysite.com 。由于对SubDomain.Mysite...

4  删除文件域值时如何保留底层文件  ( How to keep underlying file when deleting a filefield value ) 
我的内容类型与文件域(特别是图像)。当删除其中一个值时,Drupal也删除了底层文件(只要没有其他节点引用相同的文件)。 我不希望删除底层文件,我希望它们保留在文件系统中。是否有任何钩子或其他技术,我可以用来确保删除其文件场值后仍然存在? ...




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