为什么drupal主题如此困难?有关简化或更快学习的提示吗?

时间:2010-09-14 04:23:44

标签: drupal themes theming

我已经用PHP编写了4年的代码,甚至我觉得它很复杂且很难掌握。我不知道他们希望设计师如何管理主题。

我知道基本的主题,主题是tpl文件,视图模板,考虑模板等。但是每当我输入template.php文件时我都会迷路。

我需要为自定义内容类型设置节点输入表单的主题。我用7-9个教程将我的大脑震撼了它,它仍然没有聚集在一起。我理解为什么模块构建可能很复杂 - 因为大多数使用模块的人都是开发人员。

然而,即使 开发人员无法理解主题 ,它肯定会过度设计!

也许这是我的错,也许我没有正确地学习Drupal。在那种情况下,是否有成为Drupal大师的分步系统?

6 个答案:

答案 0 :(得分:10)

主题真的不是那么难,如果你只知道基本的PHP。你有三种方法可以改变你应该能够处理的标记,即css和js。

  • 模板文件。通过在主题中创建模板文件并正确命名,它将优先于其他模板文件,因此您可以为视图,节点等创建自定义标记。通过为noce类型创建模板,您可以执行诸如打印之类的操作在任何其他字段中输出cck字段而不是使用$content。您只需要在节点对象上。

  • 放置在主题中的
  • 预处理函数将使您可以添加或更改将在模板中使用的变量。您可以为节点模板等的页面模板yourtheme_page命名函数,例如钩子:yourtheme_node。在这里,您可以创建一些自定义逻辑或修改,以帮助您的模板更加干净,只需处理打印变量。

  • 主题功能。您可以覆盖主题函数以更改使用的标记。您只需要创建一个名为yourtheme_[theme_function_name]的函数。你不需要了解太多的PHP来做到这一点。通常,您只需复制原始主题功能,并对其进行一些更改即可获得所需的标记。

通过上述内容,您可以完成所需的90-95%。表格有点特别,因为你在Drupal 6中无法在主题中轻松改变它们。相反,您想要的是创建一个小模块并使用hook_form_alter,它允许您修改表单,按钮上使用的文本等。这在Drupal 7中更改,这将更容易主题。

所以真的不是那么复杂,只需使用上面描述的3种基本工具。棘手的部分可能是命名您的功能和模板,但devel themer可以帮助您。您使用的另一个工具是devel,它可以帮助您打印变量,以便您可以检查它们并查看您可用的内容,节点上的fx CCK字段。

答案 1 :(得分:6)

也许你应该得到Front End Drupal的副本。

在我看来,一旦你绕过模板,覆盖,.info文件和预处理函数等概念,Drupal主题就不难了。这些东西与PHP技能没有直接关系,而是与理解系统有关。

有趣的是看到你是一个美国人,但你只谈论PHP,而不是CSS和HTML。根据我的经验,很多主题任务都可以用CSS完成,甚至不用触摸php。

最后,我不知道您是否已使用base/starter theme(例如ZenGenesis)。我建议使用基本主题并将自己的设计实现为子主题。

答案 2 :(得分:5)

大多数人得到'啊哈!'主题突然开始变得有意义的时刻。

我认为对于经验丰富的PHP开发人员来说这可能更难,因为你必须通过许多在vanilla PHP中没有意义的概念(“该函数在适当的时候被神奇地调用......因为如何命名?!“)

@ googletorp的答案非常全面,所以我只想添加一些帮助我的实用技巧:

1)尝试构建一个实现它自己的主题输出和简单钩子的模块。当您看到模块实际调用它们并使用它们时,钩子和主题函数使 lot 更有意义。

2)自由使用devel模块,尤其是主题注册表菜单(注意添加新主题功能时它如何更改),“渲染”选项卡和dpm()dvm()函数

3)购买一本关于Drupal主题的老式死树书。如果您已经知道自己在做什么,那么在线文档非常出色,但如果您不确定自己在寻找什么,可能会非常混乱。

4)清空你的杯子。在主题级别,PHP实际上只是用于简单的逻辑和语法 - 几乎所有实质内容都由Drupal API函数处理。尝试像Drupal开发人员一样思考而不是PHP开发人员(也就是说,不要因为你构建了一个同样的东西的vanilla PHP网站而假设你知道如何做某事)并且你会有更轻松的时间。

坚持下去!一旦你弄明白,主题系统实际上很容易使用。

答案 3 :(得分:2)

回答你的问题为什么这么难

Drupal主题可能看起来势不可挡,由于可能性很大,请参阅@googletorps回答以获得良好的概述。 “多种方式做一件事”带来了力量:高级用户可以选择最好的可能性。但它也带来了复杂性:新用户没有获得良好的领先优势,因为没有“你应该这样做。完全停止。”

除了完成这些工作的方法之外,还有嵌套问题。 Drupal有一个非常深层嵌套项目的概念。采取一个随机但简单的例子:

username<menuitem<menuitem<menuitem<menu<block<region<page. 

将呈现一个菜单项,其中包含侧边栏中三级深层菜单项中的用户名。 大多数模板环境都有页面概念,其中包含多个“内容”,最多可能包含一些部分内容。嵌套最多是三层。每个级别都有明确,独特的专业领域。 Drupal没有:嵌套是相当随意的。每个嵌套项与其父项没有区别。这再一次为高级用户提供了一个很好的概念和强大的功能,但对于新的开发人员/设计人员来说却很难理解。

最后,另一个难以学习的原因是,Drupal在线文档更像是wiki,而不是从头到尾阅读的手册。有很好的书籍可以填补这些差距,但你必须购买它们。

答案 4 :(得分:1)

如果你还没有看到它,这是一个很好的演示文稿,说明为什么Drupal 6主题难以及如何在Drupal 7中进行改进。有希望!经过更多的体验后,这段视频对我来说更有意义。 http://sf2010.drupal.org/conference/sessions/design-and-theming-whats-new-drupal-7

答案 5 :(得分:1)

其中一个最大的技巧是将使用主题功能正常渲染的内容覆盖到模板中。这使您可以更好地控制标记,还允许您在将变量移交给模板之前使用预处理函数来操作变量。

这对于主题表格来说是一个巨大的福音。观看一段简短的视频,比我更好地解释它:http://drupaldojo.com/session/fine-tuning-ui-theming-forms-drupal-60