要求是展示所有公开的内容和所有已经限制在浏览者区域的内容。
目前这是通过在标准页面上以 block 的形式生成两个 View 来实现的。一个 View 被设置为显示在“restrict to region”字段中没有“N”的所有新闻文章。另一个 View 被设置为显示在“restrict to region”字段中具有“Y”的所有新闻文章,并在上下文过滤器中使用 php 代码来添加新闻文章中的“region”字段与“region”匹配的条件"用户配置文件中的字段。在标准页面的内容字段中堆叠这些 View 会生成一个页面,该页面返回所有不受限制的新闻文章以及所有限制在用户区域的新闻文章。
此策略的不良并发症包括单独的分页和创建多个 View 以将功能扩展到其他内容类型或扩展到城市或州的必要性。
您能想出一种方法来在单个 View 上应用复杂的过滤器,以避免需要先呈现一个单独的不受限制的 View ,然后再呈现一个仅限于区域与查看者区域匹配的记录的 View 吗?
或者将过滤器作为对字段的权限应用?
提前致谢
最佳答案
很简单,您在工作中使用了错误的工具。
PHP 不是您为此选择的工具,您应该直接使用 SQL。
$q="SELECT *
FROM
articles
WHERE
limited_to_region=0
UNION
SELECT
a.*
FROM
articles a
INNER JOIN
regions r
ON
a.rid=r.id
AND
r.id='".$_SESSION["user"]["region"]."';";
(我不知道你的数据模型,你可以/应该在两者之间有一个关系项等等,但是这个最佳实践与规范相去甚远......)
通过这种方式,您的过滤和所有对您的前端来说无论如何都是透明的,更快、无限并且不会浪费时间/带宽来传输不需要的信息。
关于php - 区域化内容显示给具有配置文件中匹配区域的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6398751/