5

我已经用 PHP 编码 4 年了,即使我发现它是如此复杂且难以掌握。我不知道他们希望设计师如何管理主题。

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

我需要为自定义内容类型设置节点输入表单的主题。我用 7 到 9 个教程绞尽脑汁,但它仍然没有融合在一起。我理解为什么模块构建会很复杂——因为大多数使用模块的人都是开发人员。

但是,即使是开发人员也无法理解主题,那肯定是过度设计了!

也许是我的错,也许是我没有正确学习 Drupal。在那种情况下,是否有一个循序渐进的系统来成为 Drupal 大师?

4

6 回答 6

10

如果你只知道基本的 php,主题真的没有那么难。您有 3 种更改标记的方法,即 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 字段。

于 2010-09-14T07:08:53.377 回答
6

也许你应该得到一份Front End Drupal

在我看来,Drupal 主题化并不难,一旦你围绕模板、覆盖、.info 文件和预处理函数等概念。那些东西与php技能没有直接关系,都是关于理解系统的。

有趣的是,你是一个主题,但你只谈论 php,而不是 CSS 和 HTML。以我的经验,很多主题化任务都可以用 CSS 完成,甚至不用接触 php。

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

于 2010-09-14T07:18:37.913 回答
6

大多数人都会听到“啊哈!” 主题突然开始有意义的那一刻。

我认为这对于有经验的 PHP 开发人员来说可能更难,因为你必须克服许多在普通 PHP 中没有意义的概念(“该函数在适当的时间被神奇地调用......因为它的名字是?!”)

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

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

2) 自由使用该devel模块,尤其是主题注册表菜单(注意添加新主题功能时它的变化)、“渲染”选项卡以及dpm()dvm()功能

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

4) 清空你的杯子。在主题级别,PHP 实际上只是为了简单的逻辑和语法——几乎所有实质内容都由 Drupal API 函数处理。尝试像 Drupal 开发人员而不是 PHP 开发人员那样思考(即不要仅仅因为您构建了一个做同样事情的普通 PHP 站点就假设您知道如何做某事),您将拥有更轻松的时间。

坚持下去!一旦你弄清楚了,主题系统实际上真的很容易使用。

于 2010-09-14T10:38:21.050 回答
3

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

Drupal 主题可能看起来势不可挡,因为有大量的可能性,请参阅@googletorps 答案以获得一个很好的概述。拥有“做一件事的多种方式”带来了力量:高级用户可以选择所有可能性中最好的。但它也带来了复杂性:新用户没有获得好的引导,因为没有“你应该这样做。句号”。

除了完成工作的方式之外,还有嵌套问题。Drupal 有一个非常深嵌套项的概念。举一个随机但简单的例子:

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

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

最后,它难以学习的另一个原因是 Drupal 在线文档更像是一个 wiki,而不是一个从头到尾阅读的手册。有很多很棒的书可以填补空白,但是您必须购买它们。

于 2010-09-14T08:14:49.183 回答
1

如果您还没有看过它,这是一个关于为什么 Drupal 6 主题化困难以及如何在 Drupal 7 中改进的精彩演示。有希望!在更多体验主题之后,第二次观看该视频对我来说更有意义。 http://sf2010.drupal.org/conference/sessions/design-and-theming-whats-new-drupal-7

于 2010-09-14T12:14:06.710 回答
1

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

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

于 2010-09-17T05:56:32.893 回答