【发布时间】:2014-03-05 20:54:40
【问题描述】:
我正在尝试有条件地从其驱动程序中抑制一个小部件。我基本上有逻辑,如果遇到,应该显示小部件,如果没有,应该抑制它。小部件从当前页面内容项加载属性,并根据某些属性显示或隐藏。我已经完成了所有的逻辑工作,剩下的唯一部分就是抑制实际输出。
我尝试从驱动程序返回 null,但这只是输出一个空的小部件(及其包装器)。如何从视图中完全删除小部件?
最后,如果没有显示任何条件小部件,则放置此小部件的区域应禁止显示。
这种灵活性在 Orchard 是否可行?最好从我的自定义模块而不是我的主题中,我试图将功能与样式分开。
编辑:
这是我的情况以及我想要完成的任务。我敢肯定,在 Orchard 中,有一种比我在第一次尝试时天真地设计它的方式更简洁的方法:我的客户的撰稿人在他们认为合适的时候标记页面(使用标签模块/部分)。我创建了 2 种自定义内容类型,“推荐”和“优惠”,它们本身都带有标签以及其他属性 [这些由不同的文案团队管理]。
在网站的大多数“内页”(我使用层来确定合适的页面)上,页面的侧边栏有一个“推荐”小部件和一个“报价”小部件。这些小部件的操作相同,但彼此独立:
他们抓取当前页面的标签,然后随机抽取一个包含任何匹配标签的 [Testimonial|Offer]。任何内页都可能发生 4 种情况:显示推荐并隐藏报价(推荐标签匹配,报价标签不匹配),隐藏推荐并显示报价,推荐和报价都显示,最后都没有显示。前 3 个用例运行良好,第 4 个用例是我遇到的困难,因为即使两个小部件都没有显示侧边栏 [zone](从各自的驱动程序返回 null)。
【问题讨论】:
-
这正是图层正在做的事情。创建一个图层,将您的规则用于在其中显示或隐藏小部件,完成。
-
我不能在图层中包含逻辑,显示的逻辑在小部件中(基于它所在的当前页面的属性)。这一切正常(意味着小部件正在针对逻辑正确执行,如果未满足,则正确“隐藏”(从驱动程序返回 null)。一个层可能有多个“条件”小部件。它仍应显示是否有 1 个小部件显示/活动,但如果所有小部件子项均未显示,则折叠。为了进一步说明,
-
为什么不能在层规则中包含逻辑?这正是层的设计目的。
-
当逻辑范围为 PAGE 宽时,层非常好。在我的情况下,逻辑的范围是小部件,而不是页面。我的“侧边栏”有 2 个小部件,它们彼此独立运行。 1 小部件查找显示页面的标签,并显示具有相同标签的随机“推荐”(自定义部分/类型)。同样,第二个小部件查找页面标签并显示具有相同标签的随机“报价”(另一个自定义部分/类型)。
-
字符用完了...在某些页面上,可能只有一个匹配的“推荐”小部件,在其他页面上,可能只有一个匹配的“报价”小部件,在另一个页面子集上可能既有推荐小部件,也有报价小部件,最后在其他小部件上可能没有匹配的小部件[这是我的问题所涉及的边缘情况]。我不知道要在哪些页面上显示哪个组合,所以我无法创建图层来处理这个问题。一切正常,除了页面没有匹配的推荐或报价小部件时。我得到一个“空白”侧边栏区域,我该如何缓解?
标签: asp.net-mvc orchardcms orchardcms-1.7