如何控制公开过滤器的可用选项? -- 7 领域 和 views 领域 drupal 相关 的问题

How do I control the available options for an exposed filter?


5
vote

问题

中文

我有一个暴露的过滤器"国家" ,我会员列表视图(我正在使用地址菲尔德模块来存储该国)。 我只想在我有成员的暴露过滤器中展示国家。我可以通过选择国家手动限制过滤器。

哪一个是最好的选择,在以下呢?

之间
  • 主题视图 - 曝光形式.tpl.php
  • 使用 hook_form_alter()
  • 用CSS
  • 隐藏一些字段
英文原文

I have an exposed filter "country" for my member list view (I'm using addressfield module to store the country). I would like to only show countries in my exposed filters where I have members. I can manually restrict the filter by select countries.

Which one would be the best option, between the following ones?

  • theming views-exposed-form.tpl.php
  • using hook_form_alter()
  • hiding some fields with CSS
     
 
 

回答列表

11
 
vote
vote
最佳答案
 

我只是做了一些类似于我的自定义模块的视图(无论观点的数据有点相同的数据)所曝光的东西。

要以最有效/的方式执行此操作,您应该创建自己的过滤器处理程序。

是一个非常简单的例子:

  <?php class custom_handler_filter_countries extends views_handler_filter_string {   /**    * Shortcut to display the exposed options form.    */   function value_form(&$form, &$form_state) {     $form['value'] = array(       '#type' => 'select',       '#title' => t('Countries'),       '#options' => function_that_returns_options_you_want(),     );      return $form;   } } ?>   

然后,在模块的.info文件中,添加包含此类的文件(在此示例中,"custom_handler_filter_countries.inc" )到.info文件的文件阵列( 99887668 )。

要使您的特定视图使用此视图处理程序而不是默认处理程序,您应该能够在 hook_views_pre_view() ,我想。 (在我的特定网站上,自从我自己定义了视图数据表以来,我只是为需要它的字段设置我的自定义处理程序。对于您的网站,由于正常处理程序已由地址字段定义,因此您需要覆盖过滤器处理程序。
 

I just did something similar for some data I'm exposing in Views for my custom module (it's kinda the same process no matter where views is getting its data).

To do this in the most efficient/easy way possible, you should create your own filter handler.

For a really simple example:

<?php class custom_handler_filter_countries extends views_handler_filter_string {   /**    * Shortcut to display the exposed options form.    */   function value_form(&$form, &$form_state) {     $form['value'] = array(       '#type' => 'select',       '#title' => t('Countries'),       '#options' => function_that_returns_options_you_want(),     );      return $form;   } } ?> 

Then, in your module's .info file, add the file containing this class (in this example, 'custom_handler_filter_countries.inc') to the .info file's files array (files[] = includes/custom_handler_filter_countries.inc).

To make your particular view use this views handler instead of the default handler, you should be able to change the handler in hook_views_pre_view(), I think. (On my particular site, since I defined the views data table myself, I just set my custom handler for fields that needed it. For your site, since the normal handler is already defined by Address Field, you need to override the filter handler.

 
 
4
 
vote

我的团队一旦尝试这样做,在D6中。细节现在有点朦胧,但我会分享我的经验和解决方案。

最初,我们使用了 {{ item.content['#node'].field_name.value }} 0 解决方案,删除了所有不存在的条目。

在我们的特定情况下,我们有几个具有曝光块的显示器,据我们可以确定,视图给出了相同的形式ID,使解决方案"不稳定" 。出于这个原因,我们自己实施了自己的形式。这可能是或可能不是您的问题,具体取决于核心/视图版本以及显示数量。

我们最终实现了一个新的块,从视图复制了表单结构,以便将其识别为暴露的形式,而添加现有条目而不是删除不存在的。

解决方案工作,但如果我再次这样做,我会看看视图选择性暴露过滤器模块首先,看看它是如何完成的。
还有"官方" 尝试解决这个问题。

 

My team once attempted to do the same, in D6. Details are a bit hazy by now, but I'll share my experience and solution.

Initially, we went with a hook_form_alter() solution that removed all non-existant entries.

In our particular case however, we had several displays with exposed blocks, and as far as we could determine, views gave them the same form-id, making the solution "unstable". For this reason, we implemented the form ourselves. This may or may not be an issue for you, depending on Core/Views version, and number of displays.

We ended up implementing a new block, copied the form structure from Views so it would be recognized as an exposed form, and added the existing entries instead of removing the non-existent ones.

The solution works, but if I were to do it again, I would look at the Views Selective Exposed Filters module first, and see how it's done.
There is also an "official" attempt to solve this.

 
 
3
 
vote

首先,以编程方式究竟是什么意思?我有一个感觉,你并不意味着你绝对需要编写代码以实现你的目标,但你基本上希望你的视图"自动" 过滤曝光的过滤器(基于正在使用哪些)。

您实际需要做的是获得有成员国的国家。在Drupal 6(术语节点count )中有一个模块,它专门针对检索附加的节点数量到一个特定的术语。

是,您甚至不需要该模块。有了视图3,您可以使用关系和"组" 选项(组类型:COUNT),以便如果有任何使用此国家/地区的节点,则可以随时使用您的视图确定。

如果您绝对需要您解决方案的自定义代码,我建议看看D7端口的术语节点的D7端口count 或非常简单的(虽然相当一般)解释如何使用关系来实现与实现目标的关系,以便在来自同一术语节点计数端口讨论的评论。

 

First of all, what do you mean by programmatically? I have a sense that you don't mean that you ABSOLUTELY NEED to write code in order to achieve your goal, but you basically want your view to "automatically" filter the exposed filters for you (based on which ones are being used).

What you actually need to do is get a count of the countries that have members. There was a module for that kind of thing in Drupal 6 (Term Node Count) which was specifically targeted to retrieve the number of nodes attached to a particular term.

The thing is, though, that you don't even need a module for that. With Views 3 you can use Relationships and the "Group By" option (Group Type: Count) to have your View determine on the fly if there are any nodes that are using this country.

If you absolutely need custom code for your solution, I would recommend taking a look at the attempt for D7 Port for Term Node Count or a very simple (rather general though) explanation of how to setup your Views with relationships to achieve your goal can be found in this comment from the same Term Node Count port discussion.

 
 
 
 
1
 
vote

视图选择过滤器模块将仅显示结果集中存在的选项,完善对于此用例。

此模块允许具有公开的过滤器仅显示选项 属于结果集。

 

The Views selective filters module will only show options that are present in the result set, perfect for this use case.

This module allows to have an exposed filter only show options that belong to result set.

 
 
 
 

相关问题

2  如何设置上下文过滤器或儿童关系?  ( How to set up a contextual filter or child relationship ) 
每一个,然后我正在重新尝试设置一个体面的分类科学版浏览器/浏览器。我已经设法为此定制了TPL文件(哦,我知道,TPL不应该包含高级逻辑,有一天我会学会如何正确做到这一点)。现在我决定使用视图给它拍摄。虽然我设法为顶级列表设置了一个视图,但现在我正在尝试设置一个不错的较低级别的浏览器。 我不认为这是可能的,但也许你会向...

2  在节点插入/更新后,如何将节点发布到PayPal?  ( How do i post a node to paypal after node insert update ) 
我在我的节点中有一个选择"升级" 。 如果用户在创建新节点或更新现有节点时选择此选项,我想将节点数据(包含一些PayPal HTML元素)发布到PayPal,以便它可以处理付款。 无论付款结果如何,都应插入/保存。我需要通过PayPal指定返回URL是什么,并且使用插入节点的我不会知道,直到插入节点后。 有没有办法发...

5  如何从私有文件系统下载文件  ( How to download a file from private file system ) 
我需要我的模块中的函数,让用户从私有文件系统下载文件。 $file : "private://sample.csv" 应该使用哪个函数, file_download() ,或 file_transfer() ? function file_download_page() { $file = "pri...

2  “没有结果”查看问题  ( A no results view problem ) 
我希望听到某人的确认: 如果我在没有结果的情况下显示View B的视图A,那么View B显示所有附件吗?不知何故,我无法让这个级联工作。附件没有显示,我不确定它是因为限制还是我(再次)... ...

4  如何在用户注册表中添加自定义antispam问题  ( How to add a custom antispam questions in user registration form ) 
最近我正在收到一些用户注册垃圾邮件......我使用reCAPTCHA模块,但我想在用户在许多论坛网站上看到的用户注册注册时添加反垃圾邮件问题。 有人知道如何做到这一点吗?...有没有模块..? ...

7  是否有一个模块,使得像Stackexchange网站上的分类标签一样?  ( Is there a module that makes taxonomy tags like they are on stackexchange sites ) 
我正在寻找一个模块,使我的免费标记分类标记像在此或任何其他堆栈的交换站点上。我想要当用户将光标放在自动完成标签字段中时,它会显示一个建议标签的列表以选择。此外,我想合并标签别名/同义词,所以多个标签彼此相关。我正在运行Drupal 7,我举报我可以使用我的分类系统的权限设置,以允许人们根据其角色创建新标签。有谁知道模...

5  如何在帖子中间添加Google Adsense Adlinks  ( How to add google adsense adlinks at the middle of the post ) 
Hello我需要在内容的中间或段落之间放置AdSense Adlinks,但我没有得到任何模块要做。我使用内容注射器在帖子的顶部和底部显示图像广告。 ...

8  Drupal 7中的图像注释  ( Image annotations in drupal 7 ) 
在Drupal 7中创建图像注释的最佳方式是什么? 理想情况下,我想重新重新重新重新重新重新创建概念反馈,您可以在其中发布图像上的注释,然后将注释显示为图像下方的列表,按类别分组。 image注释(查看演示),让您注释图像。注释也显示为节点的注释(在"注释" 部分下)。不幸的是,它的Drupal 7版本是不完整...

1  Drupal 7中有节点API挂钩  ( Is there node api hook in drupal 7 ) 
在Drupal 7中仍然存在 hook_nodeapi ,或者我必须尝试 hook_node_load 钩子,以将一些内容附加到节点? ...

1  在Drupal 7中使用hook_init()或template.php基于路径切换到管理主题  ( Switch to admin theme based on path using hook init or template php in drupal ) 
我正在运行一个使用单独的管理主题的网站。我想包括一些使用admin样式表的附加页面。如何选择性地将主题应用于这些页面。我宁愿在hook_init()或template.php中执行此操作。我不想此时向网站添加任何更多的Contract模块。谢谢你的任何照明。 ...

1  媒体/文件存储库 - 资产自动填充小部件?  ( Media file repository asset autocomplete widget ) 
任何人都知道一个模块,它将在admin-side上安装一个自动完成小部件的文件和图像字段? 它是允许管理员/编辑器通过键入其名称重新使用对已上载文件的引用。然后,窗口小部件基于所谓的商品的目录的实际内容自动完成路径/引用。否则,文件必须重复上传。 或者,重新查询问题:你们如何解决这样的媒体存储库问题? ...

2  用户WebForm作为用户注册页面  ( User webform as user registartion pages ) 
我在我的网站上有3页,用户可以注册登录寄存器。在每个页面上,注册所需的数据量不同。问题是我需要为用户注册页面使用WebForms,并创建具有不同数据级别的3个不同的表单。当用户在注册表中输入他的电子邮件ID时,如果他已经提交了一次表格,则应在用户注册中填写以前的数据以进行编辑目的。 ...

4  迁移到PressFlow  ( Migrating to pressflow ) 
我目前正在使用Drupal 7我的网站。我最近阅读了关于Drupal的PressFlow,与常规Drupal 7版本相比,它似乎提供了更好的性能。我有一个很少的自定义模块,如果我稍后必须迁移到按下按下,我是否必须修改模块以支持压力?此外,还有关于从Drupal 7迁移到压力的问题吗? ...

5  我是否需要在普通网站上启用RDF? [关闭]  ( Do i need rdf enabled on a normal site ) 
关闭。这个问题是基于意见的。它目前不接受答案。 想要改进这个问题?更新问题,以便通过编辑此帖的事实和引用。 关闭 3年前。 ...

12  如何阻止Cron任务被网站访问者触发?  ( How can i stop the cron tasks from being triggered by site visitors ) 
我的网站的日志表明,如果有人访问网站,Cron被触发。这正在减慢第一次访问的负载时间。 cron配置为在此处运行3小时:管理»配置»系统»CRON 。 如何运行Cron计划,而不是由访客触发? ...

1  无法识别Drupal模板文件  ( Drupal template files are not recognized ) 
站点/全部/模块/ dc_wiwo function dc_wiwo_theme($existing, $type, $theme, $path) { return array( 'dc_wiwo_page' => array( 'variables' => array('tweets'...

5  按视图中的分类学期名称排序?  ( Sort by taxonomy term name in views ) 
所以我觉得我必须遗漏一些明显的东西,但我无法找到解决我的情况。我正在尝试按所选择的分类学期名称对一些节点进行排序。这是Drupal 7,观点3。 我有一个分类词汇"国家" ,它是如下所示: 亚洲 - 孟加拉国 - 印度 - 越南 阿代AFRIA - 阿尔及利亚 - 利比亚 - 恩惠岛 在内容类型('合...

2  如何将所有URL重定向到新域[已关闭]  ( How to redirect all urls to a new domain ) 
关闭。这个问题需要更多聚焦。它目前不接受答案。 想要改进这个问题?更新问题,因此它仅拍摄了一个问题,只有编辑此帖。 关闭 1年前。 ...

1  如何根据URL将参数化变量条件添加到我的主题中?  ( How can i conditionally add a parameterized variable to my themes based on url ) 
我想做以下的事情: 如果用户进入 node/15 ,我的 node.tpl.php 文件是正常的,以生成HTML。 如果用户进入 node/15/animal/7 ,那么我的 node.tpl.php 仍然如预期使用,但它在名为 $animal 的范围内具有变量,设置为我从装载动物的价值。 所以,URL架构看起来像...

1  LightBox2带CCK字段,文章中的重复图像  ( Lightbox2 with cck fields duplicate images in articles ) 
我用 lightbox2 for drupal 7,或者我不知道如何正确配置它。在我的 Desperate Search 用于一个工具,它将处理插入缩放的图像缩略图缩略图通过与原始图像的链接到文章文本的随机地点,我来到了Lightbox2,这对我需要的几乎是什么。我为我的文章类型创建了一个Field_Image,然...




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


Licensed under cc by-sa 3.0 with attribution required.