Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么drupal主题化如此困难?有没有简化或加快学习的建议?_Drupal_Themes_Theming - Fatal编程技术网

为什么drupal主题化如此困难?有没有简化或加快学习的建议?

为什么drupal主题化如此困难?有没有简化或加快学习的建议?,drupal,themes,theming,Drupal,Themes,Theming,我用PHP编写代码已经4年了,甚至我都觉得它很复杂,很难掌握。我不知道他们希望设计师如何管理主题 我知道基本的主题化、使用tpl文件的主题化、查看模板、思考模板等。但是每当我进入template.php文件时,我就会迷路 我需要为自定义内容类型设置节点输入表单的主题。我绞尽脑汁想了7-9个教程,但还是没合拍。我理解为什么模块构建会很复杂,因为不管怎样,大多数使用模块的人都是开发人员 然而,即使是开发人员也无法理解主题化,这显然是设计过度了 也许是我的错,也许是我没有正确地学习Drupal。在这种

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

我知道基本的主题化、使用tpl文件的主题化、查看模板、思考模板等。但是每当我进入template.php文件时,我就会迷路

我需要为自定义内容类型设置节点输入表单的主题。我绞尽脑汁想了7-9个教程,但还是没合拍。我理解为什么模块构建会很复杂,因为不管怎样,大多数使用模块的人都是开发人员

然而,即使是开发人员也无法理解主题化,这显然是设计过度了


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

如果您只知道基本的php,那么主题真的没有那么难。您有3种修改标记的方法,css和js,您应该能够处理

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

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

  • 主题功能。您可以覆盖主题函数以更改所使用的标记。您只需要创建一个名为
    yourtheme\u[theme\u function\u name]
    的函数。要做到这一点,您不需要了解很多php。通常,您只需复制原始的主题函数,并对其进行一些修改即可获得所需的标记

有了以上这些,你可以完成90-95%的需要。表单有点特殊,因为Drupal6中的表单在主题中无法(轻松)更改。相反,您想要的是创建一个小模块并使用
hook\u form\u alter
,它允许您修改表单、按钮上使用的文本等。这在Drupal 7中有所更改,这将更易于主题化


所以它其实并不那么复杂,只要使用上面描述的3个基本工具就可以了。棘手的部分可能是命名函数和模板,但这可以帮助您。您使用的另一个工具是,它可以帮助您打印变量,以便您可以检查它们并查看节点上的可用fx CCK字段。

也许您应该获得一份

在我看来,Drupal主题化并不困难,只要你将头脑集中在模板、覆盖、.info文件和预处理函数等概念上。这些都与php技能没有直接关系,都是关于理解系统的

有趣的是,你是一个主题设计师,但你只谈论php,而不是CSS和HTML。根据我的经验,许多主题化任务都可以通过CSS完成,甚至不需要接触php


最后,我不知道您是否已经在使用(like或)了。我建议使用基本主题并将自己的设计作为子主题。

要回答您关于为什么这么难的问题

Drupal主题可能看起来势不可挡,因为有太多的可能性,请参阅@googletorps Response以获得良好的概述。 拥有“做一件事的多种方式”带来了力量:强大的用户可以选择所有可能的最佳方式。但这也带来了复杂性:新用户无法获得良好的潜在客户,因为没有“你应该这样做。完全停止。”

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

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

username大多数人都会得到一个“啊哈!”主题突然变得有意义的时刻

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

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

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

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

3) 买一本关于Drupal主题的老tyme dead tree书。如果你已经知道自己在做什么,那么在线文档真的很出色,但是如果你不确定自己在寻找什么,那么在线文档可能会非常混乱

4) 把你的杯子倒空。在主题级别,PHP实际上只用于简单的逻辑和语法——几乎所有实质内容都由Drupal API函数处理。试着像Drupal开发人员而不是PHP开发人员那样思考(也就是说,不要仅仅因为你建立了一个普通的PHP站点来做同样的事情,就认为你知道如何做某事),这样你会过得更轻松


坚持下去!一旦你了解了主题系统,它实际上很容易使用。

如果你还没有看到它,这是一个关于为什么Drupal 6主题化很难以及如何改进的很好的演示