【问题标题】:PURL and/or Spaces?PURL 和/或空格?
【发布时间】:2010-08-18 05:05:57
【问题描述】:

我的网站有一个供普通用户使用的部分,一个供管理员使用的部分,以及一个仅供匿名访问者使用的部分。网站的每个部分都需要更改 Drupal 设置以使用不同的主题、更改主要和次要链接、更改使用的块等。换句话说,用户体验因部分而异。

我可以通过使用 Drupal 的多站点、共享数据库并使用 settings.php 覆盖我需要的变量(即:menu_primary_links_source)来完成我需要的工作。但是,为了使事情从操作的角度更易于管理,并购买灵活性,我正在考虑使用 PURL API (purl.module) 为某些站点部分的 URL 添加前缀,并让我的主题和自定义模块根据到当前的 PURL 前缀。

在开始之前,我想确保我不会打折 Spaces.module。 Spaces 使用 PURL、Features 和 Context(我目前也用于我的站点)。我不完全理解 Spaces 到底是如何融入图片的。它会帮助我制作不同的网站部分,每个部分都有特定的配置和行为吗?还是直接依赖 PURL API 会更好?

【问题讨论】:

    标签: drupal drupal-6


    【解决方案1】:

    Spaces-PURL-Context 难题。乐趣。我一直想写这篇长文来完成我的头。

    什么是空间?

    Spaces 是一个模块,可为您的站点创建覆盖配置的容器。它不是专门针对功能,而是关于能够与空间一起使用的任意数量的配置值,包括功能是否处于活动状态。 (激活并不意味着模块被禁用,只是一些面向功能的东西被扫走了,例如内容类型和空间感知视图。

    使用 Spaces 时,您需要决定要使用哪种类型的“桶”。 Open Atrium 使用 OG 和 User-shaped bucket,你需要的是一种基于用户角色的新型 bucket。出于理智的考虑,您甚至可能需要创建一个单独的模块,以将用户角色定义为 Drupal 中更具体的东西,就像 Spaces OG 需要依靠 Organic Groups 来实现许多概念一样。

    什么是上下文?

    上下文归根结底是一种页面装饰机制。你告诉它一些关于页面的东西,它会相应地修改页面。上下文不能修改 URL,反之亦然。功能定义上下文以告诉站点如何为该功能唯一地呈现给定页面,上下文和空间或上下文和 PURL 之间没有直接联系。

    什么是 PURL?

    PURL 是一种在 URL 中粘贴内容并将它们保留在那里直到你完成它们的方法。

    这是如何粘合在一起的

    具有 PURL 集成的空间基于以下两种情况之一触发:URL 或有关页面内容的某些内容。为了解释这一点,我将以 Spaces OG 为例。

    1. 您单击一个链接。该链接是使用 Spaces OG 正在寻找线索的 PURL 组件预先构建的。如果该部分 URL 对空格有意义,则会触发空格。
    2. 除了选择退出 PURL 修改的链接之外的所有链接都保留 PURL URL 元素,这意味着 Space 很高兴,并在每次页面加载时重新触发。
    3. Spaces OG 知道检查节点的组从属关系。如果 Spaces 可以破解打开一个节点并找到一个组,它会触发该节点的 Space,使用 PURL 的修改版drupal_goto() 重定向整个页面以实现 URL 一致性。这将胜过任何现有的 URL 结构。
    4. 如果没有 URL 组件,并且节点没有组从属关系,则不会触发 Space。

    一旦触发 Spaces,所有 Spaces 配置值都会发挥作用。这将意味着 Space 的预设默认值(您可以为每种 Space 类型设置多个默认 Space 配置)覆盖 Drupal 的默认值,而这些默认值又会被专门为 Space 保存的任何配置覆盖。在 Open Atrium 的情况下,这包括诸如组颜色、仪表板上的块和启用的功能之类的好东西。

    如果用户去访问一个特性提供的东西——一个节点、一个视图等,任何与该节点、该视图、任何模块提供的 URL 相关的上下文都可能会被触发,并开始使用块和主题来为功能的内容定制页面。

    后续步骤

    正如我上面提到的,在我看来,您的第一步似乎是尝试查看 Spaces OG,并将其重写为以用户角色而不是有机组为中心。除了从 Spaces OG 复制和粘贴一些内容外,您不必直接对 PURL 做太多事情。您可能想在 Spaces 问题队列中发布这个想法,以便维护者可以看到它并提供指导。

    【讨论】:

    • 这是一个非常有用的答案,感谢您解释它是如何粘合在一起的。对于我的场景,我相信我会听从您的建议并使用 space_og 进行指导。如果我理解正确的话,我的模块将首先创建一个 PURL 提供程序,其次是一个新类型的空间,它将根据我的 PURL 前缀被激活。
    【解决方案2】:

    我对空间模块的理解是这样的:

    它为功能模块(以及由此创建的“功能”)提供了一种与站点的定义区域集成并在其中可用的方法。开箱即用包括:有机组、分类和用户。有一个 API 可以定义比这更多的“空间”。

    例如,您可以创建图片库的“功能”(使用功能模块)。将空间与有机组一起使用,您可以让每个组都能够启用和禁用此功能,并且只能在该“空间”(本例中为组)内使用。

    来自有机群组页面:

    组有自己的主题、语言、分类等。集成良好并依赖于 Views 模块

    因此,在您的情况下,您可以将空间视为使有机群组更加灵活的一种方式。正如 NoParrots 所说,OpenAtrium (http://openatrium.com/) 严重依赖 features/spaces/context 模块,因此这可能是回顾这些模块如何协同工作的好地方。

    编辑:

    我发现了一个可以更清楚地解释事情的精彩视频:http://www.archive.org/details/TheHeartOfOpenAtriumContextPurlAndSpaces_782。 16:00 左右,他开始谈论 PURL。

    从这个页面(视频下方)还有一个我认为非常好的 PURL/Context/Spaces 的解释:

    • 上下文是一个用于在页面加载中触发反应行为的模块。 控制块可见性,菜单 路径、页面类和页面 模板布局是 落入它的东西 管辖权。
    • PURL 是一个用于捕获和抽象请求处理的库 超越 Drupal 核心菜单 系统提供 ($_GET['q'])。 检测请求组件,例如 子域、路径前缀、用户代理或 文件扩展名,并维持他们的 存在是它的主要作用。
    • Spaces 是一个通用的配置覆盖框架。在 理论上它允许你“定制 一切,一切。”在实践中 它允许自定义组之类的东西 颜色和功能,每个用户 仪表板和类似多站点的使用 单个 Drupal 安装。

    【讨论】:

    • 感谢您的回答。我可以清楚地看到 Spaces 将如何轻松地在每个空间的基础上创建定制的用户体验。我不明白 PURL 是如何进入等式的。如果我想为每个 Space 实现 Persistent URL 前缀,我是否还需要写入 PURL API,或者空格在这里有什么帮助?
    • 我不是 100% 确定,但我认为可能会与 PURL 和有机组集成以定义每个组的路径前缀。请参阅我上面的编辑视频,该视频可能比我能更好地解释事情。
    • 那个视频很棒。我认为它回答了我所有的问题。谢谢!
    【解决方案3】:

    我建议使用 Spaces 或 Organic Groups。 Spaces 在 Open Atrium 中被大量使用......一个开箱即用的开发种子 Intranet 包。 Intranet 确实需要访问控制和功能可见性的概念,具体取决于您的部门或角色,因此我相信 Spaces 对您非常有用。

    当然还有可敬的有机团体。 Spaces 是比 PURL 更“高级”的概念。顺便说一句,Spaces 使用 context 和 PURL 模块。我的直觉是让你使用 Spaces 或 Organic 组。

    网上有几个视频是关于 Spaces 的。看看他们。

    【讨论】:

    • 我刚刚观看了 Spaces 3 演示视频。这是一个很好的教程,我确实看到了 Spaces 将如何帮助我完成我的项目:vimeo.com/8241142 尽管如此,我仍然不明白如何使用 PURL。我希望能够在上下文中应用 URL 前缀 - 即:在站点的“管理器”部分中,每个 url 都以“管理器”为前缀(例如:管理器/节点/添加、管理器/搜索、经理/节点/34)。
    猜你喜欢
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 2019-09-07
    • 2018-11-07
    • 2016-08-20
    相关资源
    最近更新 更多