如何在现有表单中插入主题表表单? -- 7 领域 和 forms 领域 drupal 相关 的问题

How to insert a theme table form inside an existing form?


3
vote

问题

中文

我想把表单字段放在现有表单的表中(生成的theme_table)(hook_menu条目的回调)。

form_id(容器):

  hook_preprocess_page()0  

表构建器功能:

  hook_preprocess_page()1  

与类似于上面的东西,我目前获得内容文本字段的HTML并提交按钮,但它们不用作真实的表单元素:

  • 当我单击上面的提交时('更新'),所使用的提交函数是表单容器中的第一个声明,但不是声明的数组('mymodule_page_edit')。

  • 使用调试器,我发现表的行中声明的文本字段未通过(错误)提交函数中的$ form_state ['值]。

所以问题是,如何将表单元素(字段和提交)插入Drupal表中,在现有表单中(Hook_Menu回调)内部?是否有可能?

英文原文

I would like to put form fields and submits inside a table (generated with theme_table) of an existing form (callback of a hook_menu entry).

The form_id (container) :

  // Part of the existing form having a $form_id,    // where I want to put form elements into a table :    ...   $data = mymodule_get_content_list();    $form['mymodule_content_list'] = array(     '#theme' => 'table',     '#header' => $header,     '#rows' => $data,   ); 

Table builder function :

function mymodule_content_list() {    ... Running queries to get a $content_list    $data = array();   foreach($content_list as $content_data) {     $operations = array(       'update' => array(         '#type' => 'submit',         '#value' => 'Update',         '#submit' => array('mymodule_page_edit'),       ),     );     $content = array(       '#type' => 'textfield',       '#value' => $content_data->content,     );     $data[] = array(       'content' => drupal_render($content),       'operations' => drupal_render($operations),     );   }    return $data;  } 

With something similar to the above, I currently get the HTML of content textfields and submit buttons in place, but they aren't used as real form elements:

  • When I click the submit above ('Update'), the submit function used is the first declared within the form container but not the declared array('mymodule_page_edit').

  • Using a debugger, I found out that textfields declared in the table's rows aren't passed as $form_state['values'] within the (wrong) submit function.

So the question is, how to insert form elements (fields and submits) into a drupal table, inside of an existing form (hook_menu callback) ? Is it possible ?

     
   
   

回答列表

4
 
vote

以下是使用形式和表格一起使用的示例示例。

step1:收集整个数据,将在表中使用。

  $sample_data = array (   array('id' => 1, 'first_name' => 'jay', 'last_name' => 'chris'),   array('id' => 2, 'first_name' => 'clo', 'last_name' => 'jason'),   array('id' => 3, 'first_name' => 'len', 'last_name' => 'ken'), );   

step2:创建表标题。

  $sample_header = array (   'first_name' => t('First Name'),   'last_name' => t('Last Name'), );   

step3:创建表行和列数据。

  $options = array(); foreach($sample_data as $data) {   $options[$data['id']] = array    (     'first_name' => $data['first_name'], // 'first_name' was the key used in the header     'last_name' => $data['last_name'], // 'last_Name' was the key used in the header   ); }   

您的数据应该是这样的:

  Array (   [1] => Array   (     [first_name] => jay     [last_name] => chris   )    [2] => Array   (     [first_name] => clo     [last_name] => jason   )    [3] => Array   (     [first_name] => len     [last_name] => ken   ) )   

step4:使用drupal函数(tableselect)表

  $form['table'] = array (   '#type' => 'tableselect',   '#header' => $header,   '#options' => $options, );   

这里是完整的表单。

  function my_form($form, $form_state) {   $sample_data = array   (       array('id' => 1, 'first_name' => 'jay', 'last_name' => 'chris'),       array('id' => 2, 'first_name' => 'clo', 'last_name' => 'jason'),       array('id' => 3, 'first_name' => 'len', 'last_name' => 'ken'),   );    $sample_header = array   (     'first_name' => t('First Name'),     'last_name' => t('Last Name'),   );   $options = array(); foreach($sample_data as $data) {   $options[$data['id']] = array    (     'first_name' => $data['first_name'], // 'first_name' was the key used in the header     'last_name' => $data['last_name'], // 'last_Name' was the key used in the header   ); }    $form['table'] = array   (     '#type' => 'tableselect',     '#header' => $header,     '#options' => $options,   );    $form['submit'] = array   (     '#type' => 'submit',     '#value' => t('Submit'),   );   return $form; }   

可以有一些错字错误,因此请相应地更改代码。

 

Here is sample example where form and tables are used together.

Step1: Gather whole data, going to use in table.

$sample_data = array (   array('id' => 1, 'first_name' => 'jay', 'last_name' => 'chris'),   array('id' => 2, 'first_name' => 'clo', 'last_name' => 'jason'),   array('id' => 3, 'first_name' => 'len', 'last_name' => 'ken'), ); 

Step2: Create table header.

$sample_header = array (   'first_name' => t('First Name'),   'last_name' => t('Last Name'), ); 

Step3: Create table rows and columns data.

$options = array(); foreach($sample_data as $data) {   $options[$data['id']] = array    (     'first_name' => $data['first_name'], // 'first_name' was the key used in the header     'last_name' => $data['last_name'], // 'last_Name' was the key used in the header   ); } 

Your data should be something like this:

Array (   [1] => Array   (     [first_name] => jay     [last_name] => chris   )    [2] => Array   (     [first_name] => clo     [last_name] => jason   )    [3] => Array   (     [first_name] => len     [last_name] => ken   ) ) 

Step4: Use drupal function(tableselect) for table

$form['table'] = array (   '#type' => 'tableselect',   '#header' => $header,   '#options' => $options, ); 

Here is complete form for you.

function my_form($form, $form_state) {   $sample_data = array   (       array('id' => 1, 'first_name' => 'jay', 'last_name' => 'chris'),       array('id' => 2, 'first_name' => 'clo', 'last_name' => 'jason'),       array('id' => 3, 'first_name' => 'len', 'last_name' => 'ken'),   );    $sample_header = array   (     'first_name' => t('First Name'),     'last_name' => t('Last Name'),   );   $options = array(); foreach($sample_data as $data) {   $options[$data['id']] = array    (     'first_name' => $data['first_name'], // 'first_name' was the key used in the header     'last_name' => $data['last_name'], // 'last_Name' was the key used in the header   ); }    $form['table'] = array   (     '#type' => 'tableselect',     '#header' => $header,     '#options' => $options,   );    $form['submit'] = array   (     '#type' => 'submit',     '#value' => t('Submit'),   );   return $form; } 

There can be some TYPO mistake, so do change in code accordingly.

 
 
 
 
0
 
vote

drupal没有通用工具,用于创建具有输入/选择/等的表。

theme_table才有用只有在您想要查看静态信息或链接时才有用。

某些模块(核心模块也是如此)具有自己的表

drupal也无法创建Ajaxed Sort / Pager链接。

所以..我花了很多时间来创建解决方案。

https://github.com/player259/ajax_table

没有充分记录,但有一个演示模块。我每次都使用这个模块,当我需要表元素时,只需确定表单API将按预期工作。

 

Drupal doesn't have universal tool for creating tables with inputs/selects/etc.

theme_table is useful only when you want to view static information or links.

Some modules (core modules too) have their own table implementations (as block module), which can have inputs, but these method are individual, and supposed, that each table will be rendered with individual theming function.

Drupal also can't create ajaxed sort/pager links.

So.. I've spent a lot of time to create solution.

https://github.com/player259/ajax_table

Not well documented, but there is a demo module. I'm using this module every time, when I need table element, just for sure that Forms API will work as expected.

 
 
0
 
vote

你是以错误的方式大概的。

表单的输出(如果需要以特定方式查看)应由表单的主题函数处理。

您可以使用

指定应使用哪个主题功能
  $form['#theme'] = 'my_theme_function';   

表单回调应该处理结构化不同的元素。

在主题中可以单独呈现每个表单项,从而创建一个包含表单元素的表。

参见 theme_form 参考如何要创建表单主题功能,请参阅Drupal FAPI以获取更多信息 $form['#theme']

 

You are going about this in the wrong way.

The output of the form (if it needs to look in a specific way) should be handled by a theme function for the form.

You can specify which theme function should be used, by using

$form['#theme'] = 'my_theme_function'; 

The form callback should handle structuring the different elements.

In your theme function to can render each form item individually, and thus create a table which contains form elements.

See theme_form for reference on how to create form theme functions and consult the Drupal FAPI for more info on $form['#theme'].

 
 

相关问题

4  每个域分开FrontPage?  ( Separate frontpage per domain ) 
我有两个网站,建在唐登,但在完全分开的分开时推出。 它们都需要来自两个站点的所有内容以某种形式,从而可以在两个站点上使用自动完成的引用。为了简洁起见,我建议完全如何完成,保持了这个问题。 网站之间的实际差异是 一个域显示内容类型w和x,而另一个域显示y和z,它们 每个域都有一个完全分开的前页。 如何解决上述两个...

0  无法配置Antispam模块  ( Cannot configure the antispam module ) 
所以我在我的服务器上安装了一个新的Drupal 7,并用毛发安装"antispam" 模块。 (见安装模块没有ftp 。) 我无法配置模块。当我打开配置面板时,我收到错误消息,说: Akismet垃圾邮件保护服务需要... 当我单击"配置" 时,我会丢回"配置" 菜单。 我错过了什么? Drush没有显示任...

0  在优步推车Drupal 7中注册WebForm  ( Register with webform in uber cart drupal 7 ) 
我试图构建一个带有自定义角色的网站,它被销售为成员资格。 我已经创建了我的优步安装并测试了它。规则定义允许用户在完成付款时将其分配给所需的角色。 但角色成员身份只能为新用户提供,因此我试图统一注册/优步卡车结帐流程 ive go get了一些ubercart / webform模块,允许我在checkout窗格中具...

2  如果由于内存错误而无法访问Admin /模块路径,如何卸载模块  ( How to uninstall module if admin modules path is not accessible due to memory er ) 
问题是 - 我安装了ubercart并使用devel模块播放。现在,当我想去管理员/模块时,我得到了: 致命错误:允许的内存大小为67108864字节耗尽(试图 分配8642561字节) 我想卸载devel模块,因为我认为这是它的错,但我不能因为这个错误而无法访问admin /模块:/。是否有另一种方法来卸载...

2  如何允许用户使用一个公开的过滤器并在两个视图之间进行选择  ( How to allow user to use one exposed filter and select between two views ) 
我正在使用 search_api 模块作为后端视图。用户将能够搜索两种不同类型的内容,并且将有两个单独的视图(每个内容类型一个)来为搜索结果供电。我想公开一个搜索框,但是允许用户将这些搜索条件指向一个视图或另一个视图。 这是一张应该让我的渴望更清楚的图片: 如果用户选择"SongBook" ,则它们的搜索会导致...

0  jQuery没有添加类  ( Jquery is not adding a class ) 
在我的Drupal网站上,我有一个简单的jQuery文件,附加到主题。此文件在preprocess_node中添加。文件的整个内容如下: (function ($) { console.log("hello world"); $('li').addClass('hello'); $('div').ad...

0  如何将国家模块添加为分类  ( How to add country module as taxonomy ) 
是有没有办法添加国家模块在分类字段中。 ...

0  如何才能在登录用户时添加一些文本到URL?  ( How can i add some text to the url only if a user is logged in ) 
我需要网址www.example.com/logging-in/rest-of-url。当我添加新页面或者我想做别名时,我似乎无法探讨更改URL。有没有人有任何经验做这样的事情。 ...

4  登录后500个内部服务器错误  ( 500 internal server error after logging in ) 
我有一个d7网站。我开始获得500个内部服务器错误。我得到默认的Chrome(我的浏览器)错误页面,而不是来自我服务器的默认的铬 此错误仅在我登录后发生并通过页面或两个页面导航。除了以下消息之外,Apache错误日志显示: [Sun Jul 15 21:53:27 2012] [debug] mod_deflat...

1  是否有表列出已移植到Drupal 7的贡献模块?  ( Is there a table listing contributed modules that have been ported to drupal 7 ) 
迄今为止,我发现没有快速的方法来确定哪些Drupal 6贡献的模块已移植到Drupal 7。 您是否知道一个,例如自动更新的表,该表提供了此关键站点建设和版本选择信息? ...

7  如何用ropal管理保留,因为没有像一个房间的东西?  ( How to manage reservations with drupal for something that is not something like ) 
我正在寻找一个用于Drupal 6或7.的预留模块,我知道Drupal 7的房间预订有一个非常好的模块,但我的用例是不同的。我正在寻找可用于预订摄影师或DJ的预留/预订模块。我已经搜索过但尚未找到任何合适的东西。 正在为DRUPAL 7创建的MODER 模块看起来很棒,但它需要被概括,以便管理员可以定义需要预订的内...

2  显示错误:无 - 设置无法保存  ( Errors to display none settings wont save ) 
我已经开发了我的网站,我正在为生产做好准备。有一些错误的警告每一次出现一次(我检查过他们,他们实际上并不是一个问题,只是我正在使用的一个PHP库中的一些愚蠢的问题。我想隐藏生产网站上的所有警告和错误。 i,作为管理员,转到/ admin / config / develop / logging,我更改错误以显示为n...

0  站点配置返回空白页面  ( Site configuration returns blank page ) 
我刚刚更新了 Internationalization 和Language_Dropdown模块在Drupal请求后成功。完成此操作, site configuration 每次单击时,返回空白页面。有时当我单击它两次时,它会返回一个屏幕,其中包含L10N更新的PHP错误表。这是令人沮丧的。我知道这是关于我所做的更新...

1  hook_menu()中是否需要“文件路径”?  ( Is file path required in hook menu ) 
我刚开始学习Drupal 7模块开发。在我看的教程中,这个人说 "在hook_menu()中,如果我们有一个'file'属性,那么'文件 道路'是一个必须和drupal如果没有在drupal 7中声明。" 但是当我读一本书时,它说 在drupal 7中不需要'file_path'提供了该文件 存在于同一...

1  D7 jQuery下拉菜单由内容类型和分类分类分类/订购  ( D7 jquery dropdown menu categorized ordered by content type and taxonomy ) 
在D7中,我想通过内容类型(第一级别)和(如果内容类型具有公鸡神经标签)分类,创建一个分类/排序的jQuery下拉菜单。 什么是最好的方法? thnx! ...

0  不同的前页节点根据登录的内容?  ( Different front page node depending on logged in ) 
如何遵循显示不同的前页节点,具体取决于用户是否登录。 例如尚未登录用户时,您将查看关于页面。 登录用户时,您将查看您的用户个人资料页面。 ...

5  模块(或代码)显示字符数? [关闭]  ( Module or code to display character count ) 
关闭。这个问题需要更多聚焦。它目前不接受答案。 想要改进这个问题?更新问题,因此它仅拍摄了一个问题,只有编辑此帖。 关闭 4年前。 ...

2  在疏浚脚本中加载模块  ( Load module in a drush script ) 
我有一个疏浚脚本,我从我的drupal环境运行,加载我想要访问的特定模块。特别是,我想使用它在其中一个包含的文件中定义的函数之一。 我试过只需调用我脚本中的函数,但PHP失败了,错误引用了一个未定义的功能。 我正在运行脚本,如下所示: drush php-script ~/path/to/script.php ...

0  如何更改OpenLayers地图设置?  ( How to alter openlayers map settings ) 
我正在编写一个模块,它将根据URL的参数改变地图缩放级别和地图中心。但我无法弄清楚 99887661 works,我试图用:测试这个钩子 function openlayers_mapalter_openlayers_map_alter(&$map = array()) { $map->center[...

1  字符串覆盖限于某些页面?  ( String override limited to certain pages ) 
我正在使用的 fivestar 模块在站点的不同区域。它在评级小部件下方显示"x票" 。 在网站上的某些区域,它希望将"选票" 更改为"评论" 。我怎么能这样做? ...




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


Licensed under cc by-sa 3.0 with attribution required.