可以在Drupal 7上触发Ajax呼叫重新加载自己的表单吗? -- 7 领域 和 forms 领域 和 ajax 领域 drupal 相关 的问题

Can a form triggering an ajax call reload itself on drupal 7?


1
vote

问题

中文

我正在尝试建立一个页面,以便在顶部的流提出问题,因此我需要ajax来避免重新加载。它实际上很简单。顶部是一个带有流的节点,我添加到下面的块。

  1. 一个问题,问题,问题的票数和"添加投票" 按钮
  2. 一种添加新节点的表单"用0投票"

我有两个问题。

a)当我点击2的提交按钮时。块我添加一个问题,我可以用新问题更新表,但添加问题表单不会被清空。

b)当我在表上添加投票时(当前从复选框中的Ajax调用)时,我将数据库有一个更高的计数器,并且据我所知,可以检查回调,但旧的旧表格从不被替换。我以为这是缓存,但我甚至设法避免使用缓存的一个,仍然没有更换。我得到了一些标题已经发送了通知,但我不明白为什么。我只是希望表格被新的表格所取代。

(不要介意我得到一个观点而不是只是一个数据库结果,它只是建立了表)

  function questions_list_voting_form($form, &$form_state){ global $user; $form['#prefix'] = '<div id="questions-list-table">'; $form['#suffix'] = '</div>'; $form['table'] = array(         '#tree' => TRUE,         '#theme' => 'table',         '#header' => array(t("Title"),t("Votes"),t("Add vote")),         );     $view = views_get_view('questions_view'); } $view->is_cacheable = FALSE; $view->execute('block'); foreach ($view->result as $row){     //['rows']['row-'.$row->nid]     $question = array('#markup'=>$row->node_title);     $vote = array('#markup'=>$row->field_data_field_votes_field_votes_value);     $addvote = array(     '#type'=>'checkbox',         '#return_value' => 'add_vote'.$row->nid,     '#ajax' => array(       'callback' => 'ajax_addvote_callback',       'wrapper' => 'question-list-table',         'effect' => 'slide',     ));     $tab_arr = array(             'question' => &$question,             'vote' => &$vote,             'addvote'.$row->nid => &$addvote     );     $tab_rows = array(             array('data' => &$question),             array('data' => &$vote),             array('data' => &$addvote),     );             $form['table'][] = $tab_arr;     $form['table']['#rows'][] = $tab_rows;     $form['redirect'] = FALSE;     $form['#rebuild'] =TRUE;     unset($question);     unset($vote);     unset($addvote);        }      return $form; } function questions_list_voting_form_submitx($form, $form_state){    if(substr($form_state['triggering_element']['#value'],0,8) == 'add_vote'){     $tmp_node = node_load(substr($form_state['triggering_element']['#value'],8,2)); //question node     $tmp_node->field_votes['und'][0]['value']++;     node_save($tmp_node);    } } function ajax_addvote_callback($form, &$form_state){ questions_list_voting_form_submitx($form, $form_state); $form_state['no_redirect'] = TRUE; // avoid redirect?? maybe not working $form_state['input'] = array('test'=>'etch'); //something to avoid cache  $form = drupal_build_form('questions_list_voting_form', $form_state); $form_html = drupal_render($form); return $form_html;  }   
英文原文

I'm trying to built a page to ask questions with a stream on top, so I need ajax to avoid the reload. It is actually simple. On top is a node with the stream and I add to blocks beneath.

  1. A table with the questions, number of votes for the questions and an "add vote" button
  2. A form to add a new node "question with 0 votes"

I have two problems.

A)When I click on the submit button of the 2. Block I add a question, I can update the table with the new question, but the add question form is not being emptied.

B)When I add a vote on the table (currently an ajax call from a checkbox) I get the database to have an increased counter and as far as I could check the callback delivers the new table, but the old one is never replaced. I thought it was the cache, but I even managed to avoid using the cached one, still no replacement. I get a few headers allready sent notices, but I don't understand why. I just want the form to be replaced by the new one.

(don't mind me getting a view instead of just a database result, it's just to built the table)

function questions_list_voting_form($form, &$form_state){ global $user; $form['#prefix'] = '<div id="questions-list-table">'; $form['#suffix'] = '</div>'; $form['table'] = array(         '#tree' => TRUE,         '#theme' => 'table',         '#header' => array(t("Title"),t("Votes"),t("Add vote")),         );     $view = views_get_view('questions_view'); } $view->is_cacheable = FALSE; $view->execute('block'); foreach ($view->result as $row){     //['rows']['row-'.$row->nid]     $question = array('#markup'=>$row->node_title);     $vote = array('#markup'=>$row->field_data_field_votes_field_votes_value);     $addvote = array(     '#type'=>'checkbox',         '#return_value' => 'add_vote'.$row->nid,     '#ajax' => array(       'callback' => 'ajax_addvote_callback',       'wrapper' => 'question-list-table',         'effect' => 'slide',     ));     $tab_arr = array(             'question' => &$question,             'vote' => &$vote,             'addvote'.$row->nid => &$addvote     );     $tab_rows = array(             array('data' => &$question),             array('data' => &$vote),             array('data' => &$addvote),     );             $form['table'][] = $tab_arr;     $form['table']['#rows'][] = $tab_rows;     $form['redirect'] = FALSE;     $form['#rebuild'] =TRUE;     unset($question);     unset($vote);     unset($addvote);        }      return $form; } function questions_list_voting_form_submitx($form, $form_state){    if(substr($form_state['triggering_element']['#value'],0,8) == 'add_vote'){     $tmp_node = node_load(substr($form_state['triggering_element']['#value'],8,2)); //question node     $tmp_node->field_votes['und'][0]['value']++;     node_save($tmp_node);    } } function ajax_addvote_callback($form, &$form_state){ questions_list_voting_form_submitx($form, $form_state); $form_state['no_redirect'] = TRUE; // avoid redirect?? maybe not working $form_state['input'] = array('test'=>'etch'); //something to avoid cache  $form = drupal_build_form('questions_list_voting_form', $form_state); $form_html = drupal_render($form); return $form_html;  } 
        

回答列表

1
 
vote

您的表单ID是"问题 - 列表表" ,但您有'包装器'=&gt; "问题列表表" (字母S缺失)。您可能还希望用'方法'=&gt来显式。 "替换" 由于Ajax导致问题。

您应该添加'#submit'=&gt; 'subment_function'并在该函数中修改$ form_state,而不是尝试在ajax回调中修改它。

为什么您重建并在Ajax回调中呈现表单?我认为你只是想返回表格的一部分来替换 - 在这种情况下,$表单本身。

 

Your form id is 'questions-list-table' but you have 'wrapper' => 'question-list-table' (letter s is missing). You might also want to be explicit with 'method' => 'replace' since the ajax is causing problems.

You should add a '#submit' => 'submit_function' and modify your $form_state in that function instead of trying to modify it in the ajax callback.

Why do you rebuild and render the form in your ajax callback? I think you just want to return the part of the form to replace - in this case, $form itself.

 
 
 
 
0
 
vote

看看这里在ajax提交我有一个类似的问题

后,删除Ajax提交和显示状态留言的表达式消息

还因为乔贝克曼说你在#ajax ['包装']值上有一个拼写错误。

 

Have a look here Remove tabledrag statuses on Ajax submit and display status message after Ajax submit I had a similar issue

Also as Joe Beuckman said you have a typo on your #ajax['wrapper'] value.

 
 

相关问题

5  如何修改页面中的分类术语路径呈现数组?  ( How to modify taxonomy term path in the page render array ) 
我正在尝试在节点页面上显示之前更改一个术语的路径。我在template.php中使用这个预处理函数: function bartik_preprocess_node(&$variables) { $variables['field_photo_topic']['0']['taxonomy_term']->...

1  用户的论坛CMS? [关闭]  ( Forum cms for user ) 
此问题似乎在帮助中心中定义的范围内涉及Drupal。。 想要改进这个问题?更新问题,所以它是关于drupal答案的主题。 ...

0  可以使用数字启动主题名称吗?  ( Can a theme name be started with a number ) 
我可以用数字开始主题名称吗?例如:"123Go" drupal识别文件夹&amp;以其开头的文件? 它在寺庙中工作.PHP作为函数的开始? ...

1  在视图列表节点中显示节点注释的分组视图  ( Displaying grouped view of node comments in a view listing nodes ) 
我创建了一个列出了许多节点的视图。我已经添加了"节点注释" 的关系,然后将注释添加为视图中的字段。我所拥有的问题是,如果节点上有多个注释,则视图列出多次节点。例如,当前视图显示此名称 Node Title: Title 1 Nid: 1 Node Image: Image Comment: Comment 1 ...

5  在Drupal 7中,我如何只有在查看前页面时才能包含CSS文件?  ( In drupal 7 how can i include a css file only when the front page is being view ) 
我想仅在查看前页面时包含特定的CSS文件,因为它只适用于前页,并且它是一个相对大的文件。我知道解决方案将涉及使用 drupal_add_css()我不确定在我的主题 theme/template.php3 文件中的位置。我的主题内有特定的钩子,我应该实施它吗?谢谢。 编辑:我基本上有代码,我只是不确定我的主题文件可以...

1  Drupal 7,Ubercart,产品搜索按价格范围  ( Drupal 7 ubercart product search by price range ) 
我正在使用ubercart 3.x,drupal7。有人可以告诉我如何在指定的时间间隔内使用价格创建一个用于搜索产品的表格? IE。用户应以最低价格填充此表格,以间隔和最高价格和发布表格后,他将看到所有适合的产品。 ...

1  RTF与内联图像+字限制的模块?  ( Modules for rtf with inline images word limits ) 
我想允许我的所有网站的用户添加自己的博客文章,具有某些约束。 这是我想要给它们的表格: Title : Contents (RTF, max 700 characters) : Submit (or Login/Register then Submit) : 所有帖子的强制性: 在注释上启用读/写权限 ...

1  从Drupal的前端更改模块中的代码  ( Change the code in the module from the front end of drupal ) 
我已创建了我的自定义模块。我可以从Drupal的末尾编辑我的模块,然后将其前后提起并编辑模块。是否有任何模块为此目的? ...

1  CSS移动兼容的耳机主题吗?  ( Css mobile compatible theme for drupal ) 
是否有CSS移动兼容的主题,用于DRUPAL? CSS移动兼容站点的示例: http://framelessgrid.com/ ...

0  如何为内容添加类别  ( How to add categories to content ) 
我仍然是德鲁佩尔7.我读过一些关于Drupal的工作的几件事,但我不太好了。 如何为不同类别创建文章?我想制作可以在图形,绘画或3D等下列出的文章。如何将它们分类在主菜单中?博客模块或书本模块如何不同? 我知道这可能已经在这里发布了同样的地方,但我只想在长章中找不到一个简单的解释。谢谢家伙。 ...

21  在模态窗口中显示表单[已关闭]  ( Show forms in a modal window ) 
关闭。这个问题是基于意见的。它目前不接受答案。 想要改进这个问题?更新问题,所以它可以通过编辑此帖的事实和引用来回答。 关闭 3年前。 ...

1  YouTube缩略图 - 单击时调整接口小部件和行为的选项?  ( Youtube thumbnails options for adjusting interface widgets and behaviour when ) 
我希望将YouTube视频添加到我的网站作为链接 - 我想使用视频缩略图。我不关心使用哪种缩略图(如本文所讨论的:如何控制YouTube中的预览图像) 我所关注的是戏剧等等。按钮在缩略图上看(即,一切都从youtube中出现的方式减少了大小)。 YouTube自己提供了哪些选项?三方解决方案怎么样? facebo...

2  显示最新编辑的日期,而不是节点发布日期  ( Showing the date of the latest edit instead of nodes posting date ) 
我有一些我经常更新一些节点,但在内容窗格中,我可以看到节点的发布日期。 如何使Drupal 7显示最新编辑的日期,而不是发布日期? ...

3  如何以编程方式确定节点是否是OG组类型节点?  ( How to programmatically determine whether a node is a og group type node ) 
Drupal 7,OG 如何编程方式确定节点是否是OG组类型节点? ...

14  是否有功能清除模块内的看门狗日志?  ( Is there a function to clear the watchdog log inside a module ) 
我不想在调试时每次清除从UI的看门狗日志。它变得耗时和繁琐。 是否有一个Drupal函数来清除模块内的看门狗日志? ...

2  面板仍在添加侧栏  ( Panels is still adding sidebars ) 
这是我们正在做的事情: 我们正在努力为我们正在努力的网站建立一个新的主题。 我们使用的主题和上下文来利用我们正在使用新主题而不是面板的新给定内容类型/ drupal路径的区域。 面板以前拥有我们正在建设的页面。 出于某种原因,侧栏/块(来自前一个面板)仍然仍然打印到新主题的$ Content标记。 任何想法?...

7  如何在Drupal Ajax呼叫完成时触发JavaScript函数?  ( How can i trigger a javascript function when a drupal ajax call is complete ) 
在Drupal Ajax完成后,我需要做一些额外的东西,将一些东西插入DOM。用jquery这是脑卒中的简单,但我不能为我的生活弄清楚如何在Drupal 7:s 我是否添加了我的ajaxified链接的东西?我读了关于附加行为的东西......混淆是设置的... ...

5  寻找一个良好的迷你 - 面板教程[关闭]  ( Looking for a good mini panels tutorial ) 
此问题似乎在帮助中心中定义的范围内涉及Drupal。。 想要改进这个问题?更新问题,所以它是关于drupal答案的主题。 ...

15  哪个时事通讯模块将适合我的要求?  ( Which newsletter module will fit my requirements ) 
我正试图为我的用户实施一款新闻通讯订阅,我注意到那里有很多不同的时事通讯模块。我正在寻找一个,它很容易允许我: 每周发送每周前5-10个帖子的每周通讯。 允许我为我网站上的不同"类别" 的多个新闻通讯(我有一个分类学期"类别" ,我希望我的用户能够选择他们想订阅的"类别" 至)。 让我自定义新闻信的外观。 我已经...

2  将评论表单/呈现出node.tpl.php(进入单独的区域)  ( Move comment form render out of node tpl php into separate region ) 
我想呈现 99887668 在node.tpl.php文件之外的节点的一部分,并在主题的单独区域中呈现评论(表单和所有)。 我注意到了 commesblock 在这些行中做某事,但需要一个视图,而不是似乎太完了。 我可以做一些预处理,以将渲染数组中的整个评论变为page.tpl.php模板如果我在某个节点类型页面上,...




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


Licensed under cc by-sa 3.0 with attribution required.