【问题标题】:Overwrite drupal calendar theming覆盖 drupal 日历主题
【发布时间】:2010-09-18 16:08:03
【问题描述】:

我正在尝试为日历视图设置主题,有没有办法用模块覆盖主题路径而不是覆盖模板文件?

我想创建一个覆盖主题功能的模块,这样我就可以在我的模块中包含模板文件而不是日历模块。

提前谢谢

【问题讨论】:

    标签: drupal drupal-6 calendar


    【解决方案1】:

    您可以在模块中覆盖视图模板,请参阅 Views 高级帮助的 Using default views in your module 页面中的“在模块中设置视图主题”。由于日历是一个视图插件,我认为视图模板的基本行为适用。如果在 hook_theme($existing, $type, $theme, $path) 中声明自己的主题输出不适用于日历视图,则可能需要使用 hook_theme_registry_alter(&$items)

    【讨论】:

      【解决方案2】:

      我认为你不能在一个模块中做这样的事情,至少不能以一种干净的方式。

      Drupal 将功能(模块)和展示(主题)分开。将两者分开是很有意义的。

      • 更简洁更易维护的代码。
      • 功能需求在不同网站中很常见。
      • 演示和功能通常由不同的人(开发人员和用户)完成

      所以如果你可以在一个模块中做这样的事情,我不会感到惊讶。但是你会反对 Drupal,很难做到,而且没有充分的理由。

      如果您想创建可重用的样式、模板覆盖等,请改用子主题系统。

      【讨论】:

      • 是的,这就是问题所在,日历没有挂钩,所以我必须覆盖它的主题。我也想更改一些功能,但我无法将模块扩展至我所能看到的范围内
      • 在某些情况下,需要在现有模块之上构建一项功能,并需要将一些默认演示元素添加到现有模板中。在这些情况下,欢迎在模块中使用模板。例如,一个模块可以提供一个自定义的自定义“仪表板”页面构建,其中包含需要对默认视图模板进行一些修改的视图。
      【解决方案3】:

      看来您在这里要做的是重写calendar 模块的功能,以一种在主题层有机会干预之前完全取代正常日历行为的方式。

      在这些(希望很少见)的情况下,最好的办法是创建自己的 calendar 分支作为新模块,并以现有的 calendar 代码作为起点。直接修改模块代码比尝试破解 Drupal 的基本功能/显示交互要容易得多。

      我通常不会推荐这个,但它似乎适合你的情况。

      请务必将任何改进发送回日历开发人员,以便我们都能受益:)

      【讨论】:

      • 也许我可以在日历模块中编写一个钩子,并检查一个模块是否执行该钩子,然后取消默认行为。然后将其作为补丁上传?
      • 甚至更好,我想说:) 但是,您希望实现的钩子与您描述的有所不同,因为钩子通常不意味着相互替换或覆盖正常行为。与其让钩子取消默认行为,不如让钩子替换默认行为,然后将原始行为移动到调用它自己的钩子的模块实例中。
      • user_user 是其他模块如何使用钩子实现可覆盖的默认行为的一个很好的例子。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-28
      • 1970-01-01
      • 2011-01-23
      • 2013-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多