【问题标题】:Drupal 6: Drupal Themer gives same candidate name for different type of content typesDrupal 6:Drupal Themer 为不同类型的内容类型提供相同的候选名称
【发布时间】:2010-06-03 09:56:33
【问题描述】:

我是一个drupal新手...

我有不同类型的内容,例如新闻、活动等,它们的内容也不同。新闻详细信息页面具有标题内容文本日期。但活动详细信息页面有标题-日期-内容文本-位置-演讲者等。所以我需要针对这些不同类型的不同布局页面。因此,我启用了 Drupal Themer 来获取候选名称。对于事件页面,它给了我 page-node.tpl.php 并且它也给新闻页面提供了相同的内容:(我怎样才能分隔这些页面?我希望像 page-event- node.tpl ,但没有...:/ Drupal Themer 还为事件页面提供唯一的候选名称,例如 page-node-18.tpl.php 但这并不意味着什么,因为我可以不按此节点名称为所有事件创建通用布局。:(

感谢帮助很大!非常感谢!!!

【问题讨论】:

    标签: drupal drupal-6 content-type drupal-theming


    【解决方案1】:

    虽然按照 monkeyninja (+1) 的建议使用不同的 node.tpl.php 文件将是“正常”方式,但您可以通过自己添加基于节点类型的页面模板建议来添加所需的功能,在 @987654321 @ 在自定义模块/主题中:

    function yourModuleOrTheme_preprocess_page(&$variables) {
      // If this is a node page, add a page template suggestion based on node type
      if (isset($variables['node'])) {
        // Build the suggestion name ('.tpl.php' suffix will be added by the theming system)
        $suggestion = 'page-type-' . $variables['node']->type;
        // Add to end of suggestion array, thus keeping the fallback to other suggestions,
        // if this specific version is not implemented by the theme
        $variables['template_files'][] = $suggestion;
      }
    } 
    

    有了这个,你应该能够添加例如一个“page-type-event.tpl.php”文件,应该用于所有事件节点页面。

    (注意:添加该功能后,您需要trigger a rebuild of the theme registry 以使其被系统识别)

    【讨论】:

    • 哇!谢谢您的回复!它看起来很适合我的解决方案......所以我将此功能添加到主题/mysite/template.php 以及如何使用它来将 page-type-event.tpl.php 定义到事件页面? ps,感谢链接drupal.org/node/223430我正在阅读所有内容。
    • 哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇忘了清除缓存,现在效果很好!!现在我有 page-type-event.tpl.php !!谢啦!我是认真的!!我很想给你买啤酒或任何东西...... :)
    • 很高兴能帮上忙——不过请注意:过度增加页面模板可能会成为以后的维护负担,因为您最终会得到多个需要保持同步的位置对于整个站点应该相同的基本内容。因此,您可能仍想探索替代解决方案,例如建议的上下文模块,或根据节点类型切换块可见性等......
    • 感谢您的警告。今天是该项目的最后期限。而且我知道如何使用 $node->fields 来塑造内容......我可以快速完成。我稍后会在有时间的时候查看上下文模块,以进行下一个项目:) 再次感谢。
    【解决方案2】:

    我不熟悉 Drupal Themer,但稍微不同的方法是使用节点模板来设置内容的样式,并使用优秀的 Context module(可能还有 Panels module)来更改布局页面上的任何附加信息(例如块)。

    要使用节点模板对不同的内容类型进行主题化,只需基于 node.tpl.php 以 node-content_type.tpl.php 形式创建模板。因此,您将拥有一个名为 node-events.tpl.php 的事件节点模板。

    然后,您可以使用 Context 模块定义一个上下文,该模块在显示事件内容类型的页面时做出反应,并选择您想要显示的区域/块。

    【讨论】:

    • 感谢回复... node.tpl.php 仅包含内容部分,但对于此事件详细信息页面,我还需要指定边栏、页脚等。这就是为什么我一直在寻找 page-node.tpl.php 解决方案。所以我现在要回顾一下上下文模块,谢谢!
    • Context 模块非常值得一试,因为它可以更好地控制站点上的块,并将更常见的“部分”概念引入 Drupal 站点。
    • ps,感谢您提到 Context 模块。我将在下一个项目中使用它。多谢! :)
    猜你喜欢
    • 2010-11-06
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多