查看块中的视图表单:如何添加Ajax结果计数器? -- ajax 领域 和 views 领域 和 blocks 领域 drupal 相关 的问题

Views Exposed form in block : how to add a ajax results counter?


4
vote

问题

中文

我实现了一个视图:

  • 具有广泛暴露过滤器的页面显示(更好的暴露过滤器),启用Ajax,让我们称之为着陆页
  • 它的克隆,在第二页显示中显示完全相同的字段,但是很少曝光过滤器(快速搜索形式)
  • 克隆具有完全相同的路径,块中的<强>暴露形式被设置为

我在主页上显示克隆创建的块(快速搜索表单):将其表单重定向到着陆页面,并具有正确的结果和完整的暴露过滤器。这很好。

问题:

我需要在暴露的表单块旁边显示一个结果count 每次刷新,每个时间刷新你更改表单中的暴露过滤器值。

global:结果摘要在标题或页脚中不起作用,因为页脚和标头未与公开的块一起显示,它们只有完整视图显示。

如何通过UI或以编程方式解决此问题?低于一些想法开始,可能有一种好的和直接的方式:

  • 强制结果计数标题以显示在暴露的块旁边?
  • 将标记添加到具有Ajax结果的表单中?
  • 创建另一个块?

编辑

我尝试了几种基于shreya答案的方法,但阻塞点总是相同的,我需要执行视图来获取结果数量,但一旦我这样做,它会返回允许的允许的内存大小耗尽

在template.php中:

  function shoot_preprocess_views_exposed_form(&$vars){    if($vars['form']['#id'] == 'views-exposed-form-customer-products-list-search-block') {     $view = views_get_view('MY_VIEW');     $view->set_display('MY_DISPLAY');     $view->execute();     $count = count( $view->result );     $vars['count'] = $count;   } }   

在视图中 - overs-form - my_view.tpl.php

  print 'There are:'. $count. 'results';    

和其他尝试与 views_get_current_view() views_get_view_result() 在tpl中,也在表单中尝试改变:

  function MYMODULE_form_views_exposed_form_alter(&$form, &$form_state, $form_id) {   if($form['#id'] == 'views-exposed-form-my-view-my-display') {     $view = views_get_view('MY_VIEW');     $view->set_display('MY_DISPLAY');     $view->get_total_rows = true;      $view->pre_execute();      $view->preview('MY_DISPLAY');     $view->execute();      $content = $view->total_rows;    }   $form['submit']['#value'] = 'Voir les'. $content.' résultats'; }   

解释为什么我无法执行视图的原因,或者如何在该上下文中返回计数?

英文原文

I implemented a view as following :

  • a page display with an extensive exposed filters form (Better exposed filters), ajax enabled, let's call it the landing page
  • a clone of it, in a second page display with exactly the same fields, but few exposed filters instead (quick search form)
  • that clone has exactly the same path, Exposed form in block is set to yes

I display the clone created block (quick search form) on homepage : submitting its form redirects to landing page with correct results and the complete exposed filters. This is fine.

Question :

I need to display a results count next to the exposed form block, which refreshes each time you change a exposed filter value in the form.

The Global: Result summary in header or footer doesn't work because footer and header aren't displayed together with the exposed block, they only come with the full view display.

How could solve that, either with UI or programmatically ? Below some ideas to begin, there might be a good and straight way :

  • force the results count header to be displayed next to exposed block ?
  • add a markup to the form with ajax results ?
  • create another block ?

EDIT

I tried several approaches based on Shreya answer below, but the blocking point is always the same, I need to execute the view to get result count, but as soon as I do, it returns an Allowed memory size exhausted.

in template.php :

function shoot_preprocess_views_exposed_form(&$vars){    if($vars['form']['#id'] == 'views-exposed-form-customer-products-list-search-block') {     $view = views_get_view('MY_VIEW');     $view->set_display('MY_DISPLAY');     $view->execute();     $count = count( $view->result );     $vars['count'] = $count;   } } 

in views-exposed-form--MY_VIEW.tpl.php

print 'There are:'. $count. 'results';  

And other tries with views_get_current_view() or views_get_view_result() in the tpl, also tried within form alter :

function MYMODULE_form_views_exposed_form_alter(&$form, &$form_state, $form_id) {   if($form['#id'] == 'views-exposed-form-my-view-my-display') {     $view = views_get_view('MY_VIEW');     $view->set_display('MY_DISPLAY');     $view->get_total_rows = true;      $view->pre_execute();      $view->preview('MY_DISPLAY');     $view->execute();      $content = $view->total_rows;    }   $form['submit']['#value'] = 'Voir les'. $content.' rxc3xa9sultats'; } 

Any clue to explain why I can't execute the view, or how to return count in that context ?

        
         
         

回答列表

1
 
vote
  1. 创建文件夹结构作为站点/全部/主题/ example_theme /模板/视图

2.创建一个名为视图的文件 - 曝光形式。使用mytheme_preprocess_views_exposed_form的Vars。下面的代码段:

  drupal_get_normal_path($path)9  
  1. 然后您可以覆盖公开的滤波器tpl。覆盖 特定视图的公开表单模板,您需要创建一个 在以下名称模式下的模板,

    视图 - 曝光形式 - View_name.tpl.php

    并在任何需要放置计数的地方打印$ count变量。 添加模板清除缓存后。

 
  1. Create a folder structure as sites/all/themes/example_theme/templates/views

2.Create a file named views-exposed-form.vars where you use MYTHEME_preprocess_views_exposed_form. Code snippet below:

function example_theme_preprocess_views_exposed_form(&$vars){   if($vars['form']['#id'] == 'views-exposed-form-exaample-page') {     $views_rows = views_get_view_result('my_custom_view', 'page'); $count_rows = count($views_rows);    $vars['count'] = $count_rows;   }  } 
  1. Then you can override the exposed filter tpl. To override the exposed form template for a particular view, you need to create a template in the following name pattern,

    views-exposed-form--view_name.tpl.php

    and print the $count variable wherever you want to place the count. Once you add the template clear the cache.

 
 
         
         
0
 
vote

你可以尝试前端的方法。 在"视图" 标题中,您可以在隐藏DIV中显示总结果(全局:结果摘要),并使用JS,从那里取值并在任何地方打印它。

编辑:我误解了你的实际内容。你可以尝试使用块 呈现完全相同的过滤器(隐藏使用CSS),显示 只不过是标题。你可以调整它 要使用Ajax,因此结果将刷新并使用JS到 将过滤器更改为以暴露形式更改的过滤器 块。

 

You could try a front-end approach. In the views header you can show the total results (Global: Result Summary) in a hidden div and, using js, take the value from there and print it wherever you want.

Edit: I misuderstood your implemmentation. You could try using a block with exactly the same filters (hidden with css) you need, showing nothing but a header. You can adjust it to work with ajax, so the results will be refreshed and use js to change the filters with those changed in the exposed form in the block.

 
 
       
       

相关问题

0  如何用无限值修复一个字段,其中“添加另一个项目”被破坏?  ( How to fix a field with unlimited values where the add another item is broken ) 
我正在研究Drupal 7.43。 我已经创建了几个月的标准字段(文本),具有无限值。一切都很好。 今天,我不能添加另一个项目,javascript图标正在转动,然后没有任何事情发生。令人惊讶的是,它适用于本地版本。最奇怪的是,当我使用一个新鲜的字段时,为测试创建时,一切都适用于正常,我可以添加多个值。 在最近的日志...

1  自定义自动完成领域  ( Custom autocomplete field ) 
我正在尝试为用户创建一个自动完成字段。以下代码对用户名搜索很好,但要求是由用户名和姓氏的任何部分搜索。 $form['user'] = [ '#type' => 'entity_autocomplete', '#target_type' => 'user', '#selection_settings'...

2  如何将默认的Ajax ThroBBER编程地添加到表单提交?  ( How can i programatically add the default ajax throbber to a form submit ) 
我正在尝试在核心中添加Ajax Throbber到表单提交按钮,特别是私有消息模块新消息页。 这是我的代码: function MYMODULE_form_privatemsg_new_alter(&$form, &$form_state, $form_id) { $form['actions']['subm...

8  如何添加“添加更多”按钮?  ( How do i add a add more button ) 
我想显示一个添加更多按钮,该按钮添加额外的文本字段和相应的删除按钮。 我遵循 <代码> ajax_example_add_more() 在Drupal 7中实现这一点。对于Drupal 8,我尝试了以下代码。 class XmlfeedsSettingsForm extends FormBase { pub...

1  从JS代码中重新加载AJAX  ( Reload ajax from the js code ) 
我无法通过自定义js的ajax重新加载页面。有一种形式,它将随着您的选择而改变,此更改由Ajax进行。 如何从代码中更改选择列表"leistung" ,以便通过ajax更新价格? 因为你们都知道我不能简单地写$("选择" )。单击();它不起作用。此外,我也尝试了.trigger()和.mousedown(),实际上...

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

1  通过ajax添加产品时更新Commerce Cart块  ( Update commerce cart block when product added through ajax ) 
hii如何更新 commerce_cart_block 当我的产品通过 ajax 添加时。 任何建议都会有所帮助。 ...

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...

1  创建一个显示节点和分类术语的视图  ( Create a view which shows nodes and taxonomy terms ) 
我正在使用搜索autocomplete来创建一个建议列表,其中包括节点和分类术语。有没有办法在单个视图中包含两个实体类型?谢谢你的时间。 ...

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  如何在单击公开的过滤器Ajax后执行一些JS代码?  ( How to execute some js code after click on exposed filter ajax enabled submit ) 
我已经尝试在提交曝光过滤器通过JS之前更新公开的过滤器字段的输入值。 我尝试了什么 url()0 没有警报消息。 我也试过: url()1 ...

1  添加日期过滤器到其中一个视图显示Ajax错误:长度未定义  ( Added date filter to one of the views shows ajax errorlength undefined ) 
我已添加一个日期模块到我的站点,并在视图中使用日期过滤器以搜索新闻内容通过日期。此滤镜在预览部分中工作正常,但在主页面上,它将Ajax错误显示为undefined的长度。 ...

1  如何改变nodequeue或entityue search autocomplete  ( How to alter nodequeue or entityqueue search autocomplete ) 
我想在drupal 7中使用nodequeue或entityue,并且希望自动完成搜索给定队列以使用节点标题以外的自定义字段。 在没有黑客模块的情况下有办法做到这一点吗?我希望neutuqueue自动完成工作,以解决扬声器名称,而不是节点标题估计。 我看到nodequeue问题添加查询标签,以便通过开发人员修改查询,...

0  找不到资源节点。但节点已启用?  ( Could not find resource node but node enabled ) 
在我的应用程序中,我正在获取数据,编辑和重新提交它。那就是我得到 Could not find resource node. 。但是, node 在 Resources 下启用了。此外,我没有收到数据的任何错误。我在追随本指南。如何处理这种情况?我的代码如下: $.ajax({ url: 'http://...

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

-1  load()模板文件  ( Load a template file ) 
我正在开发一个自定义模块,允许在Ajax中添加节点/分类页面。 到目前为止,我可以通过自定义模块andsimple ajax代码存储在cookie中。 我现在正在努力在我的页面中刷新一些div。 "div" 实际上是一个独立的文件,存储在我的主题的模板目录中,尝试$ .load它我得到了500个服务器错误,必须与UR...

0  如何在更改的表单中单击Ajax按钮时限制提交处理程序  ( How to restrict submit handler when ajax button is clicked in altered form ) 
我正在改变ubercart"uc_product_add_to_cart_form" 并添加ajax按钮"计算价格" : $form['price_calculation']['calculate'] = array( '#type' => 'button', '#value' => ...

1  在Ajax回调之后,如何更改视图暴露的表单  ( After ajax callback how to alter views exposed form ) 
查看我的代码有没有其他方法来执行此操作。在选择任何下拉菜单和我的DSM($ FORM_STATE)未显示任何 [值] 索引后,我试图在我的暴露视图过滤器中更改表单元素类型。 function loan_details_filter_form_views_exposed_form_alter(&$form, &$f...

0  如何在有条件地添加一个字段?  ( How do i conditionally add a field ) 
我正在尝试使用Drupal 8表格API中使用AJAX添加新的条件字段的任何示例,但我找不到它。 这是我的代码。 $form['name'] = array( '#type' => 'textfield', '#title' => $this->t('Name'), '#maxlength...

0  如何使用表单API获取列表框中的选定值  ( How to get selected value in the listbox by using form api ) 
我创建了一个标题为州和城市的字段的表单。选择州合适的城市记录后,它们将被加载到城市列表框中。到目前为止,他们正在运行正常,但点击提交按钮后,我无法将城市的值存储为称为 $data1 的变量。如何让它返回城市价值? 源代码 function form_test_form($form,&$form_submit) {...




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


Licensed under cc by-sa 3.0 with attribution required.