主题功能覆盖和预处理功能 - 对于非程序员 -- theming 领域 drupal 相关 的问题

Theme function overrides and preprocess functions - for the non-programmer


6
vote

问题

中文

我正试图让我的脑袋是什么。我读过一些文章和帖子,介绍了这些滴水主题,其中提到了这些,但我正在努力理解他们是什么以及他们所看到的是什么以及我到目前为止看到的每种解释(包括Drupal.org)都是假设我知道PHP或有编程经验。

有人可以用外行的术语解释或指向一个好的,简单的理解解释,请?

英文原文

I'm trying to get my head around what these are. I've read a few articles and posts introducing Drupal theming where these are mentioned, but I'm struggling to understand what they are and what they do - each explanation I've seen so far (including on Drupal.org) makes an assumption that I know PHP or have programming experience.

Could someone explain in layman's terms or point to a good, simple-to-understand explanation, please?

  
   
   

回答列表

11
 
vote
vote
最佳答案
 
嗯,主题层 php,因此您需要对某些编程概念的最小了解(例如,a function

主题图层在命名约定时构建了如何命名您的函数,以自动调用它们。类似于所谓的 hooks 。至少预处理功能是钩子的特殊变体。我稍后会回来。

任何模块都可以使用 hook_theme()(您无需了解它的方式,注册主题函数(或模板)。现在工作)。 )例如,它可以基本上告诉Drupal,它具有称为 mymodule_fancything 的主题函数。然后,该模块还负责提供默认主题函数,该函数与 theme_ 9。在前面的示例中,该模块需要定义函数 theme_mymodule_fancything

稍后,或者任何其他模块可以用函数主题(): theme('mymodule_fancything', $arg1, $arg2); (d6)或 theme('mymodule_fancything ,array('arg1'=> $ arg1,'arg2'= > $ arg2));`(d7)。

然后,该功能将弄清楚要调用的函数。首先,它将检查是否有主题覆盖主题。这意味着,一个以 themename_ 而不是 theme_ 前缀的函数。所以在我们的示例中, themename_mymodule_fancything 。如果发现该功能它将调用它,如果没有,它将返回 theme_mymodule_fancything

如您所见在示例代码中,通常将许多参数传递给主题函数或包含应显示的数据的模板。有时您希望在传递给主题函数或模板之前进一步处理/更改该信息。或模块想要更改另一个模块的内容。此外,因为主题函数/模板不应包含任何复杂的PHP处理。与提到的钩子不同(可以由所有模块实现的钩子不同),主题函数只能通过重写一次。

这是预处理功能的地方。它们由主题()调用,并接收传递给该主题函数的所有参数(仅在D7)或模板中。然后他们可以以任何方式改变/扩展。有大量规则在但基本上调用了哪些预处理功能,通常只使用特定于给定主题函数/模板的一个特定的函数。这看起来如此: name_preprocess_hook(&$vars) theme_0 可以是模块或主题的名称, theme_1 是模板/主题函数的名称。核心中的预处理函数有很多示例,搜索 预处理

记得重建主题注册表(例如,使用devel.module或通过重新保存主题配置表格)。

 

Well, the theme layer is PHP, so you will need a minimal understanding of some programming concepts (e.g. what a function is). Especially since you will have to write some basic PHP within them. So the following might not be perfectly suited for a non programmer initally, but I tried to link everything so you can read more about it. Also, add comments if something is not clear.

The theme layer builds upon naming conventions on how to name your functions to have them called automatically. Similar to the so called hooks. At least preprocess functions are a special variant of hooks. I'll come back to that later.

Any module can register theme functions (or templates) by using hook_theme() (You don't need to understand how that works right now). ) For example, it can basically tell Drupal that it has a theme function called mymodule_fancything. This module is then also responsible for providing the default theme function, which is prefixed with theme_. In the previous example, that module needs to define the function theme_mymodule_fancything.

Later on, that, or any other, module can call that theme function with the function theme() like this: theme('mymodule_fancything', $arg1, $arg2); (D6) or theme('mymodule_fancything, array('arg1' => $arg1, 'arg2' => $arg2));` (D7).

Then, that function will figure out which function to call. First, it will check if there is a theme override for the active theme. That means, a function that is prefixed with themename_ instead of theme_. So in our example, themename_mymodule_fancything. If it finds that function it will call that and if not, it falls back to theme_mymodule_fancything.

As you've seen in the example code, you usually pass a number of arguments to a theme function or a template which contains the data that should be displayed. Sometimes you want to further process/change that information before it's passed to the theme function or the template. Or a module wants to change something of another module. Also because theme functions/templates should not contain any complex PHP processing. Unlike with the mentioned hooks (which can be implemented by all modules and all are called), a theme function can only by overridden once.

That is where preprocess functions come into play. They are invoked by the theme() and receive all arguments passed to that theme function (only in D7) or template. Then they can be altered/extended in any way. There is a large number of rules what preprocess functions are called when but basically, you usually only use one that is specific for a given theme function/template. That looks like this: name_preprocess_hook(&$vars). name can be the name of a module or theme and hook is the name of the template/theme function. There are tons of examples for preprocess functions in core, search for preprocess.

Remember to rebuild theme registry (e.g. with devel.module or by re-saving the theme configuration form).

 
 
   
   

相关问题

0  最简单的方法来制作文本包裹的形象  ( Easiest way to make body of text wrap around image ) 
我想在下面的图像周围有一个身体文本缠绕。这是一个例子: http://www.fareham.ac。英国/赛事/ 2011/06 / Creative-arts-Summer-exition 和这里是代码的摘录: <div class="content"> <div class="field fiel...

1  Drupal 7 WEBForm设置:如何更改按钮中的默认文本“下一页”?  ( Drupal 7 webform settings how to change the default text in button next page ) 
我已经使用drupal 7创建了一个webform,其中两个页面与"pagebreak" 字段,但是当我进入MySite WebForm并在页面底部查看WebForm时,有一个按钮"下一页" :我必须更改此按钮中的文本......也可能在简单文本"下一页" 的地方设置图像。 谢谢! ...

0  如何隐藏我的主题代码? [关闭]  ( How do i hide the code of my theme ) 
关闭。这个问题是 off-topic 。它目前不接受答案。 想要改进这个问题? 更新问题所以它是 - 主题用于卸妆答案。 关闭 9年前。 ...

2  我可以在drupal 7中使用函数menu_tree()来自定义菜单并添加CSS类吗?  ( Can i use the function menu tree in drupal 7 to customize a menu and add css c ) 
我可以在drupal 7中使用函数 menu_tree() ,以自定义菜单并添加CSS类吗?我试图通过添加CSS类自定义Main_Menu:是正确的方法吗? ...

11  将内容字段分成不同地区  ( Splitting up content fields into different regions ) 
我的情况如下:我有一个内容类型研讨会,带有字段A,B和C.我有地区标题,页脚,内容和侧边栏左。在Content Region中显示有一些领域我想要在内容区域中显示,而且在侧边栏左区域。 我怎么去做这个?道歉,如果此前已被回答。我是一个开发人员,我并不犹豫地潜入钩子和预处理器的功能。我有安装模块,但从未使用过(这是我的...

1  为节点保存/提交进程添加其他逻辑  ( Add additional logic to node save submit process ) 
在其中可以挂钩drupal以修改在插入数据库之前的特定字段的值? 例如,让我们说我想在节点插入数据库之前触发电子邮件或运行任意代码? 我一直在看Hook_node_PreSave,看起来它会尽我所需要,但我需要它只适用于一个内容类型。 ...

2  搜索页面摘要使用视图进行自定义  ( Search page summary customization using views ) 
我可以弄清楚如何在Drupal 7中使用视图创建搜索结果页面。我无法解决的是如何将其格式化为具有两行摘要文本和关键字的搜索结果页面相同的方式大胆的。我必须使用"字段" 显示? ...

3  主题查看/编辑选项卡  ( Theme the view edit tabs ) 
我希望能够主题查看/编辑选项卡。 是,我想向 <li> 添加一个类。 对此的任何帮助都非常感谢。 提前欢呼。 ...

2  观看页面主题  ( Views page themeing ) 
我在灯箱中显示一些节点内容。输出需要自定义,以便输出完全裸露,除了实际视图结果之外。我想要每个周围的div,菜单,造型等。 要实现此目的,我创建了一个名为视图的自定义视图页面 - pharess-floorplans - page.tpl.php 。从单行PHP打印代码中打印出换挡。我删除了除了那条线之外的一切...

1  如何在Drupal 7中的DDBlock上工作圆角?  ( How do i get rounded corners to work on a ddblock in drupal 7 ) 
我试图制作我正在使用的dd-block的边界。它们是Firefox 5.0的圆形,但比这更早或在任何其他浏览器中,它都不是工作。我安装了Curvycorners模块,我让CSS设置为圆形。问题是,在Chrome中,只有标题是圆的,而不是其他的。在Internet Explorer中,一切都是圆形的,除了DD-Bloc...

4  如何动态更改节点类型的CSS样式?  ( How to dynamically change the css style of a node type ) 
我想动态修改内容类型基础中页面的样式: 我尝试使用预处理功能插入此代码: if(isset($variables['node'])){ if($variables['node']->type=='article'){ drupal_add_css(drupal_get_path('theme','my...

6  覆盖主题_node_preview  ( Override theme node preview ) 
我正在使用自定义主题,但 seven 作为管理主题。 如何覆盖主题函数' theme_node_preview '? 注意,在节点表单中调用 theme_node_preview ,它在叠加层中显示。所以它是刽子金主题的一部分。 我试图使用通用 phptemplate_ 前缀,但是这种推翻主题函数的方式被删除了Dr...

6  如何与jQuery移动框架集成?  ( How to integrate with the jquery mobile framework ) 
我看到WordPress集成了一个特殊插件,以通过集成jQuery Mobile Framework的移动主题中的WordPress主题。 是可以制作Drupal 7?存在一个模块,可以与jQuery Mobile更改或集成? ...

4  在“忙碌”的主题上,如何在底部删除“0评论”?  ( On the theme busy how to remove the 0 comments at the bottom ) 
我已经取消了对每个页面发表评论的能力,但现在它只是说"0评论" 这非常讨厌。 ...

2  使侧边栏和“内容”区域与每个相同的长度?  ( Make the sidebars and the content region the same length as each other ) 
我有一个有一个没有不均匀的地区的网站。侧边栏首先是与内容不同的长度,并且内容是侧边栏第二的不同长度。它看起来像这样: 我可以手动在CSS中手动修复它并使它们保持相同的长度,但随时我向其中任何时候添加一些东西,它会再次变得不均匀。有没有办法(或任何模块)来修复它,以便它将动态保持相同的长度,以便当我向内容添加一些东...

2  智能分页渲染寻呼机与devel模型不同  ( Smart paging rendering pager different from the devel model ) 
我在drupal 7上,我启用了智能分页模块。在主题时,我希望页码编号显示为常规链接。这似乎是自然的行为。以下是在渲染部分上的Devel模块上提供的HTML为[Smart_paging]: <div class="smart-paging-pager"> <h2 class="element-invisi...

5  将LightBox添加到Ubercart中的产品列表  ( Add lightbox to product list in ubercart ) 
我正在尝试为ubercart为ubercart for drupal 6启用lightbox2。这是简单的通过视图,但我认为产品列表是由uc_catalog模块生成的。如何将类添加到产品缩略图或为它们启用LightBox2?是要自定义输出的TPL.php文件吗?谢谢你的任何帮助。 ...

3  如何使用jqm主题和jquerymobile插件与drupal?  ( How to use jqm theme and jquerymobile plugin with drupal ) 
我正在开发一个带有drupal 7的移动网站,我想使用jQuery Mobile。我发现了很多插件,但只有一个可用的ropal 7(jQuery Mobile Module)。我还有一个jquery移动主题(JQM主题)。我的问题是不起作用(只有HTML,没有CSS和JQuery Mobile,显示)。 有没有人使用...

3  维护标准页的模板和首页的最佳方法是什么?  ( Whats the best way to maintain templates for standard pages and a front page ) 
我正在使用自定义首页开发新的Drupal 6主题。我的标准 page.tpl.php 具有整个HTML结构(应原样),包括DOCTYPE,HTML HEAD和HTML主体。 当我制作 page-front.tpl.php 时,我必须重复 page.tpl.php 并修改它,这意味着每当我需要更改标准页面模板时(添加...

3  在模板文件中更改用户头像的大小  ( Changing size of user avatar in template file ) 
在node.tpl中我当前使用此代码显示用户avatar theme('user_picture', $account) 我的化身当前设置为85x85px,但是当它们显示在节点中时,我希望它们更小。如何将尺寸更改为此包含用户的头像? ...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.