【问题标题】:Regionalizing content display to users with matching region in profile区域化内容显示给配置文件中匹配区域的用户
【发布时间】:2011-06-18 20:37:36
【问题描述】:

要求是显示所有公共内容和所有限制在查看者区域的内容。

目前,这是通过在标准页面上以块的形式生成两个视图来实现的。设置一个视图以显示在“限制区域”字段中没有“N”的所有新闻文章。另一个视图设置为显示在“限制区域”字段中具有“Y”的所有新闻文章,并在上下文过滤器中使用 php 代码添加新闻文章中的“区域”字段与“区域”匹配的条件" 用户配置文件中的字段。将这些视图堆叠在标准页面的内容字段中会产生一个页面,该页面返回所有不受限制的新闻文章以及所有仅限于用户区域的新闻文章。

此策略的不良并发症包括单独的分页以及创建多个视图以将功能扩展到其他内容类型或扩展到城市或州的必要性。

您能想出一种方法在单个视图上应用复杂过滤器,以避免需要呈现一个单独的不受限制的视图,然后是一个视图,该视图仅限于记录谁的区域与查看者的区域匹配?

或者将过滤器作为字段权限应用?

提前谢谢,

【问题讨论】:

  • 如果您使用的是 Views 2,您可以使用Views OR 将过滤器与'OR' 组合在一起。没有测试 Views 3,但读到它包含此功能。
  • 您对此有任何更新吗?如果您以某种方式解决了它,您可以发布解决方案的答案,以帮助可能遇到类似问题的其他人。

标签: php drupal localization internationalization


【解决方案1】:

很简单,你使用了错误的工具来完成这项工作。

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"]."';";

(我不知道你的数据模型,你可以/应该在两者之间有一个关系项等等。但这种最佳实践远非正常,所以......)

这样,您的过滤和所有对您的前端都是透明的,更快,无限并且不会浪费时间/带宽来传输不需要的信息。

【讨论】:

    【解决方案2】:

    在数据库中的表 [articles, news] 中添加另一列标签(文本类型)[可以设置很少的标签,用逗号分隔它们],然后创建另一个包含标签的表,将这些标签的 id 给你的文章/新闻。您可以通过按 IP 地址查找用户位置来过滤此内容,或者如果您以某种方式知道用户来自哪里,则可以设置 cookie。

    【讨论】:

      【解决方案3】:

      希望您将Location 用于个人资料和文章。

      听起来确实想将这两个结果集混合到一个项目列表中。 回到过去,它会是Views Union

      相信 Ovideiu 关于Views OR 是最现代的解决方案是正确的。它说是开发,但人们在生产中使用它。

      如果您没有将这两个集合组合起来,您可以使用Views Exclude Previous 来处理您的重复项。

      不幸的是,当我过去这样做时,我们不得不创建自己的自定义(但缓存)输出解决方案,因为我们可以控制查询。但是您仍然可以使用 drupal 查询和 node_loads 来使用模板等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-24
        • 1970-01-01
        相关资源
        最近更新 更多