在D8中显示通过表单构建器的HTML结果 -- forms 领域 和 8 领域 drupal 相关 的问题

display html result via form builder in d8


0
vote

问题

中文

我在d8中使用表单构建器构建形式,我需要与表单一起显示HTML结果。但与我们在控制器中使用HTML标记显示结果,它不显示结果。

module_name.routing.yml

  module_name.findAllUsers:   path: '/module_name/findusersgroup'   defaults:     _form:  'Drupalmodule_nameFormUserLookUp'     _title: 'Find users of a Group'   requirements:     _permission: 'access admin menus   

module_name/src/Form/UserLookUp.php

  <?php  namespace Drupalmodule_nameForm;  use DrupalCoreFormFormState; use DrupalCoreFormConfigFormBase; use DrupalCoreFormFormStateInterface;  class UserLookUp extends ConfigFormBase {    public function getFormId() {     return 'user_lookup';   } /**  * General form for switching all nodes from one user to another.  */   public function buildForm(array $form, FormStateInterface $form_state) {    $operation = select_usergroup_dropdown_options();      // two ways to transfer the nid     $form['operation'] = array(         '#type' => 'select',         '#title' => t('Select User group:'),         '#options' => select_usergroup_dropdown_options(),         '#description' => t(''),         '#required' => TRUE,     );      $form['submit'] = array(         '#type' => 'submit',         '#value' => t('Find Users'),     );     return $form; } /**  * #submit callback for node_adoption_transfer_form().  */   public function submitForm(array &$form, FormStateInterface $form_state) { //   $form_state = new FormState();    $form_state->setRebuild();    //get the dropdown values selected     $operation = $form_state->getValue('operation');     $res = '';    //query the db to get all the users under this group         $query =  "SELECT vid,uid,init as email,u.name,ctu.field_p_group_name_value as group_name FROM {content_type_usergroup} ctu"             . " INNER JOIN usergroup_user_map um ON ctu.vid = um.group_id"             . " LEFT JOIN users_field_data u ON u.uid = um.user_id"             . " WHERE ctu.vid=$operation"             . " ORDER BY name";     if(count(db_query($query)->fetchObject())==0){        $res='<p style=""> No users found for this group </p>';         }    else {         $res .= page_1_maketable_3($query);         #print $res;exit();         #$form['result'] = array( '#value' => $res, '#type' => 'markup' );         $build = array(           '#markup' => $res         );        return $build;    }    }    protected function getEditableConfigNames() {     return "user_lookup";   } }   

和函数page_1_maketable_3()我正在将HTML表从查询中添加为

   function page_1_maketable_3($query) {         $buf = '<form method="post" action="module_name/batchdelete"><table class="inline">';            $result = db_query($query);           // Body           $rowcount = 0;           while ($row = $result->fetchObject()) {               $id = $row->vid;               unset($row->vid);             if ($rowcount == 0) {               $width = sizeof($row);               // Header               $buf .= '<tr>';               foreach($row as $key => $value) {                 $buf .= '<th>' . $key . '</th>';               }               if($isedit) {                   $buf .= '<th>Edit</th>';                   $buf .= '<th>Delete</th>';                 if($batchop)$buf .= '<th>Select items</th>';                         }               if($isaha)$buf .= '<th>Delete</th>';               $buf .= '</tr>';             }             ++$rowcount;;             $buf .= '<tr>';             foreach($row as $key => $value) {               $buf .= '<td>' . $value . '</td>';                        }                 //adding one more td with edit button if needed            if($isedit) {                $buf .= '<td><a href='.$url.$id.'>edit</a></td>';                $buf .= '<td><a href='.$urlDelete.$id.'>delete</a></td>';                $buf .= '<td><input type="checkbox" name="chkbox[]" value='.$id.' ></td>';            }            if($isaha) $buf .= '<td><a href='.$urlAhaDelete.$id.'/user/'.$row['uid'].'>delete</a></td>';            $buf .= '</tr>';           }            $buf .= '</table>';           if($batchop)$buf .= '<input type="submit" name="btchDelete" value="Delete Selected Items" id="batchDelete"></input>';           $buf .= '</form><br/>';           return "($rowcount rows)" . $buf;     }   
英文原文

i am building a form in d8 using form builder , what i need to display the html results along with the form .But unlike we display the result using html markup in controller, its not displaying the result however .

in module_name.routing.yml

module_name.findAllUsers:   path: '/module_name/findusersgroup'   defaults:     _form:  '\Drupal\module_name\Form\UserLookUp'     _title: 'Find users of a Group'   requirements:     _permission: 'access admin menus 

and in module_name/src/Form/UserLookUp.php

<?php  namespace Drupal\module_name\Form;  use Drupal\Core\Form\FormState; use Drupal\Core\Form\ConfigFormBase; use Drupal\Core\Form\FormStateInterface;  class UserLookUp extends ConfigFormBase {    public function getFormId() {     return 'user_lookup';   } /**  * General form for switching all nodes from one user to another.  */   public function buildForm(array $form, FormStateInterface $form_state) {    $operation = select_usergroup_dropdown_options();      // two ways to transfer the nid     $form['operation'] = array(         '#type' => 'select',         '#title' => t('Select User group:'),         '#options' => select_usergroup_dropdown_options(),         '#description' => t(''),         '#required' => TRUE,     );      $form['submit'] = array(         '#type' => 'submit',         '#value' => t('Find Users'),     );     return $form; } /**  * #submit callback for node_adoption_transfer_form().  */   public function submitForm(array &$form, FormStateInterface $form_state) { //   $form_state = new FormState();    $form_state->setRebuild();    //get the dropdown values selected     $operation = $form_state->getValue('operation');     $res = '';    //query the db to get all the users under this group         $query =  "SELECT vid,uid,init as email,u.name,ctu.field_p_group_name_value as group_name FROM {content_type_usergroup} ctu"             . " INNER JOIN usergroup_user_map um ON ctu.vid = um.group_id"             . " LEFT JOIN users_field_data u ON u.uid = um.user_id"             . " WHERE ctu.vid=$operation"             . " ORDER BY name";     if(count(db_query($query)->fetchObject())==0){        $res='<p style=""> No users found for this group </p>';         }    else {         $res .= page_1_maketable_3($query);         #print $res;exit();         #$form['result'] = array( '#value' => $res, '#type' => 'markup' );         $build = array(           '#markup' => $res         );        return $build;    }    }    protected function getEditableConfigNames() {     return "user_lookup";   } } 

and in function page_1_maketable_3() am making the html table from the query as

 function page_1_maketable_3($query) {         $buf = '<form method="post" action="module_name/batchdelete"><table class="inline">';            $result = db_query($query);           // Body           $rowcount = 0;           while ($row = $result->fetchObject()) {               $id = $row->vid;               unset($row->vid);             if ($rowcount == 0) {               $width = sizeof($row);               // Header               $buf .= '<tr>';               foreach($row as $key => $value) {                 $buf .= '<th>' . $key . '</th>';               }               if($isedit) {                   $buf .= '<th>Edit</th>';                   $buf .= '<th>Delete</th>';                 if($batchop)$buf .= '<th>Select items</th>';                         }               if($isaha)$buf .= '<th>Delete</th>';               $buf .= '</tr>';             }             ++$rowcount;;             $buf .= '<tr>';             foreach($row as $key => $value) {               $buf .= '<td>' . $value . '</td>';                        }                 //adding one more td with edit button if needed            if($isedit) {                $buf .= '<td><a href='.$url.$id.'>edit</a></td>';                $buf .= '<td><a href='.$urlDelete.$id.'>delete</a></td>';                $buf .= '<td><input type="checkbox" name="chkbox[]" value='.$id.' ></td>';            }            if($isaha) $buf .= '<td><a href='.$urlAhaDelete.$id.'/user/'.$row['uid'].'>delete</a></td>';            $buf .= '</tr>';           }            $buf .= '</table>';           if($batchop)$buf .= '<input type="submit" name="btchDelete" value="Delete Selected Items" id="batchDelete"></input>';           $buf .= '</form><br/>';           return "($rowcount rows)" . $buf;     } 
     

回答列表

2
 
vote

命名 module_name/src/Controller/Form/UserLookUp.php 看起来你想要混合形式和控制器。这是不可能的。

您可以做的是重建提交的表单并将额外的HTML放在BuildForm()中。在那里你检查$ form_state。如果它是空的,则您拥有一个新的形式,如果它充满了数据,您可以重建。然后,您可以对用户输入反应以生成应沿表单显示的HTML。

 

The naming module_name/src/Controller/Form/UserLookUp.php looks like you want to mix form and controller. That's not possible.

What you can do is to rebuild the form in submit and put the additional html in buildForm(). There you check $form_state. If it is empty you have a new form and if it is filled with data you have a rebuild. Then you can react on the user input to generate the html that should be displayed along the form.

 
 
         
         

相关问题

1  形成API自定义元素  ( Forms api custom element ) 
我当前将一些自定义表单API元素转换为Drupal 8等价物,但是我正在运行几个问题。 首先,我似乎没有在元素进程中收到'triggering_element'返回我的$ form_state,它在ajax回调中 - 但不是在进程中,它在d7中允许我实现不同的逻辑在使用不同按钮/表单控件的过程函数中。我不确定是否有一...

1  联系表单:来自节点电子邮件字段的收件人  ( Contact form recipient from nodes email field ) 
用例:企业目录。 描述:我需要创建一个动态联系人表单,将每个节点的(业务列表内容类型)单个电子邮件字段作为联系表单的主收件人,或者至少作为碳副本('cc') 。 我花了2天寻找模块以及网络周围的各种编码建议,没有成功。 示例: Drupal 8中的每个节点的联系人8? 这很容易在D7中完成 视图联系表格 模块...

2  如何将表单作为桌子呈现?  ( How do i render a form as a table ) 
默认表单布局具有在单个div标签中包装的每个表单元素,带有标签和内部输入。我想整齐地展示一些东西,并为现场标签创建一个列,以及输入区域的另一列。 我可以看到这一点以两种方式之一完成: - 我可以使用表元素或div创建一个表,并将标签与输入分开。我会用枝条吗? - 或者,也许有一个创造性的方法可以使用CSS与默认结...

1  如何使用ajax单击它后更改按钮名称  ( How to change the button name after click on it using ajax ) 
我是司布的新手。我创建了一种执行AJAX动作的表单。如何在使用Ajax后单击后更改按钮名称。 function auktion_fav_form($form, &$form_state, $auktion_id) { form['add_to_fav'] = array( '#type' => 's...

5  如何找到hook_form_form_id_alter的form_id?  ( How do i find a form id for hook form form id alter ) 
我想改变我为视频创建的内容类型的表单。该类型称为视频。如何使用hook_form_alter更改表单以创建内容? ...

2  如何在条件选择类型下触发AJAX后从分组的表单字段中获取值  ( How to fetch value from grouped form fields after ajax is fired under conditiona ) 
我也使用dpm($ form_state-&gt; getValue('input_select','text')); 和DPM($ form_state-&gt; getValue('input_select','body'));它在Ajax处理程序被称为... 之后 在Drupal 8中为分组的表单字段获...

1  在块中显示表单数据[重复]  ( Showing form data in a block ) 
这个问题已经在这里有答案: 存储匿名用户的数据/会话 (5个答案) 关闭 ...

0  你可以在ctools中做分支多学分表吗?  ( Can you do branching multistep forms in ctools ) 
我在项目中的几个地方使用ctools multiSep表单代码,并希望将用户的路径分支通过表单。也就是说,在步骤1中,我从用户那里获得一些东西,允许我确定用户应该被发送到步骤2a,2b和2c,或3a,3b和3c。我一直在看,但尚未找到任何关于这个的东西; CTOOLS是可以使用CTOOL的分支多步形式? ...

1  托管文件元素以$ form_state为匿名用户的  ( Managed file element empty in form state on submit for anonymous user ) 
我有一个用drupal 8 fapi构建的表格。这是一个复杂的"联系我们" 类型的东西,包括上传文件的能力。 其中它包括多个Managed_file元素。 元素在buildform()中定义。 $form['myfile'] = [ '#type' => 'managed_file', '#upl...

4  将值插入$ form_state  ( Insert a value to form state ) 
function form_example_form($form, &$form_state) { $form_state ['store_value'] =1; $form['submit_button'] = array( '#type' => 'submit'...

0  submit_preprocess中更改表单值  ( Alter form value in submit preprocess ) 
如何更改值,在这种情况下,在form_alter hook的预处理功能中,节点对象表单的标题字段。 $form['actions']['publish']['#submit'][] = MODULE_submit_preprocess'; function MODULE_submit_preprocess($f...

3  我可以将字段集合添加到块吗?  ( Can i add a field collection to a block ) 
我已经制作了一个字段集合,导出为一个功能,现在我想将它添加到一个块。有没有人有什么建议?我已添加字段以通过表单API块,但这似乎没有应用。 我想通过代码添加此字段集合,而是找到模块。 我看了看着hook_block_configure以在那里添加表单,但我不知道我是否可以在 form api参考。 ...

0  #ajax回调使用错误的回调  ( Ajax callback uses the wrong callback ) 
我不知道为什么,但是使用这个代码,当我点击标记类 - 类 - 添加提交按钮时,它执行 type_callback 回调,不是 marker_category_add_callback 。为什么? 如果我在表单中注释所有标记类型字段,它使用正确的回调。 function food_truck_form_admin(...

2  白色屏幕的钩形形式改变  ( White screen of death in hook form alter ) 
我在Drupal 8中启用了SimbleNews模块,我试图将输入字段的宽度从 60 降低到 30 。我正在尝试实施表单更改挂钩并安装了Devel模块。我使用了dsm($ form_id);要识别表单,然后为了识别要更改的表单属性,我试图使用DSM($表格),DPM($ FORM)和PRINT_R($表格),所有这些...

5  依赖注入不工作自定义表单  ( Dependency injection not working custom form ) 
我有一个带有表单类的自定义模块,在那里我正在尝试注入自定义服务以在它的提交方法中使用: namespace Drupalmy_moduleForm; use DrupalCoreFormFormBase; use DrupalCoreFormFormStateInterface; use Drupalmy_mo...

1  按列订购表  ( Ordering table by column ) 
我尝试通过表元素标题中按列顺序添加可能性。 我开始使用drupal 8,我找不到关于API站点上表的任何清晰文档,以执行我想要的东西... 提前感谢。 ...

2  如何更改节点添加表单  ( How to change node add form ) 
我不知道我怎样才能改变节点添加形式在Drupal 8.在Drupal 7的布局我Panopoly工作,可能会覆盖在页面管理器中的网址,并添加面板变种。我认为它在Drupal 8中可以在同样的方式工作,但在面板中,我无法添加表单项目。因此,我在激活变体上获得一个空白页。 任何想法? ...

1  如何在节点编辑表单中更改“添加菜单链接”复选框中的选项吗?  ( How do i alter the options in the add menu link checkbox in the node edit form ) 
我用 hook_form_node_page_edit_form_alter() 挂钩节点编辑表单。如何在为该节点添加菜单项时更改可用选项? 我只需要显示给定节点ID的菜单项: if (isset($form['menu'])) { $node_ids = array(1,2,3); // only sh...

0  最佳存储不是公开可查看的数据? [关闭]  ( Best way to store not publicly viewable data ) 
关闭。这个问题是基于意见的。它目前不接受答案。 想要改进这个问题?更新问题,以便通过编辑此帖的事实和引用来回答。 关闭 4年前。 ...

1  特定链接不通过PCA测试  ( Specific links do not pass pca test ) 
我有一个drupal 7网站。它是HTTPS启用。当我进行PCA合规性测试时,某些引用/站点/默认/文件/样式/ *的链接失败了。失败消息说".. ......请求传递的文本信息...... 在样式文件夹中,我有一些其他文件夹,在我为网站创建内容时,保存了图像。我在内部/样式文件夹中添加了一个.httaccess文...




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


Licensed under cc by-sa 3.0 with attribution required.