【问题标题】:Show only exposed filter when field data is available当字段数据可用时仅显示公开的过滤器
【发布时间】:2011-03-30 08:34:18
【问题描述】:

假设我的网站销售汽车和其他交通工具。我有一个名为 Product 的内容类型,它按分类法分类,例如。汽车、自行车、船、直升机。

Product 内容类型有一些 CCK 字段来描述产品的基本功能,例如 horsepowernumber_of_wheelstop_speed

我使用视图覆盖分类术语页面,并显示一些公开的过滤器,以便用户缩小选择范围。

我的问题是,我的一些公开过滤器在查看某些术语时并不真正适用。例如,如果我正在查看 Bicycles 术语,我不希望能够通过 horsepower 进行过滤!或者,如果我正在查看 Boats,我不想通过 number_of_wheels 进行过滤(因为我的船都没有轮子)。

如果视图中没有行包含该字段中的数据,有没有办法隐藏该字段的公开过滤器?

【问题讨论】:

    标签: drupal drupal-views drupal-exposed-filter


    【解决方案1】:

    只有一种内容类型“产品”虽然简单,但最终会导致冗余和问题,例如您现在遇到的问题。添加单独的内容类型要好得多;汽车、自行车、船和他们独有的场地。这样您就可以轻松地在视图中针对内容类型创建过滤器。

    如果你要在 mysql 中创建表,你会只有一个表 Products 吗?我希望不是。 ;-)

    【讨论】:

    • 是的,我明白你的意思,感谢你的 cmets Gary。我试图让它灵活地允许(使用我的示例)混合动力车船产品很好地存在。我想我只需要把它吸起来,然后分成不同的内容类型。再次感谢!
    • “混合动力汽车船”听起来不错,我想要一辆!无论如何,对于这种情况,我会再次创建一个新的内容类型来显示“两栖汽车”——Drupal 的好处是您不必一遍又一遍地创建字段,您可以在新内容中重新使用它们类型(只需从 CCK 的下拉菜单中选择)。您有字段和字段实例。因此,例如,您可以有一个通用字段名称“标题”并将其附加到多种内容类型。对于您的情况,请从“汽车”内容类型中选择字段,这样可以更轻松地在 CCK 中创建。制作完成后,您以后无需担心。
    【解决方案2】:

    如果您无法按照 Gary Green 的建议对内容类型进行分支,制作单独的视图(对视图过滤器进行更精细的控制),您或许可以使用 hook_form_alter 检查对应的分类字段的默认值您的产品类型(自行车、船等),然后通过将这些字段的 #access 设置为 FALSE 来删除字段。

    如果您不习惯使用 hook_form_alter,您也可以将这些设置为 display: none 与 jQuery(不要删除它们,否则表单在提交时不会通过安全/完整性测试)。不幸的是,你不能用简单的 css 做到这一点,因为至少在 D6 中,CCK 过滤器输入元素没有足够具体的 id 或类来允许简单的 css 操作。

    这假定您对每个分类确定的产品类型都有单独的视图页面;您的描述听起来像是这种设置。

    【讨论】:

    • 感谢您的回复詹姆斯,感谢您的意见。我从来没有玩过#access 字段,所以你鼓励我为将来的目的研究它。最终,对于这个问题,我认为对我来说最有效的选择是对内容类型进行分支并牺牲少量的灵活性。再次感谢!
    • 谢谢你,derpal。我同意为此目的,听起来分支内容类型更有意义。请注意,有一个与 CCK 打包在一起的模块,您可以激活它(“内容副本”或类似的名称),它允许您创建具有所有各种属性的内容类型,您可以将其“克隆”到新的内容类型中 - 然后删除您不想要的各种字段。这将节省您的时间并防止产品内容类型的一致性错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多