我现在正在以Drupal 6结束我的智慧,我希望第二双眼睛可以指出我今早早些时候遗漏的一些语法错误。
假设我有一个名为my_theme
的主题。
这是一个来自银杏的子主题的主题,这个主题又是来自子主题的主题 Rubik,来自Tao的子主题,一个相当常见的CSS重置主题。
我正在努力了解如何声明我自己的主题功能,所以我可以 在我正在为网站工作的费用页面清理标记。
现在我对主题的理解与'如果注册了'一致 使用hook_theme的主题函数,将其传递给数组,使用 功能的名称,你以后可以调用它 主题中的theme_function_name。
例如,如果有一个名为my
的模块,我就会弄乱hook_theme
如下所示,定义函数的名称,并定义哪个
论证应该传递给它:
<?php
function my_theme() {
$items = array();
$items['randomtext'] = array('arguments' => array('element' => NULL));
$items['button_links'] = array('arguments' => array( '$links' => NULL, '$attributes' => NULL));
return $items;
};
现在我已经注册了函数,我只需要实现它们 这个有点人为的例子:
function theme_randomtext($element) {
$output = ' <h1>This is some very random text with' . ' this text concatenated: ' . $element . '</h1>';
return $output;
}
我现在可以通过调用
来使用这个新功能 <php
print theme('randomtext', 'some arbitrary words')
?>
预计会返回以下内容:
<h1>This is some very random text with this text concatenated: some arbitrary words</h1>
我正在拿nada。
我不知道为什么。当我看主题注册表时,我看到了我的主题
函数列为my_randomtext
- 我试过调用这两个函数
选项,如果我应该添加主题前缀:
theme('my_randomtext', 'getting desparate');
theme('randomtext', 'really losing my rag now');
仍然没有运气。
为什么这些主题功能不起作用?有什么好处呢 这会让你简单地在一个主题中声明一个这样的函数吗?
function manual_random_text($element) {
$output = ' <h1>This is gives me everything I aleady need,
'without relying on the weird themeing sytem. It's perfect for' . $element . '</h1>';
return $output;
}
答案 0 :(得分:0)
啊,经过一段距离问题,我看到了问题。
为此,我需要添加我声明函数的主题的前缀,以便我可以使用。
因此,如果我的模块名称为my
,则所需的主题函数名称为:
function my_random_text($element) {
$output = ' <h1>,
'This is finally outputting content. Now I can: ' . $element . '</h1>';
return $output;
}
问题是,如果我正在创建一个尚未存在的主题函数的覆盖,例如random_text
,则无论如何都没有覆盖它的函数。
术语主题覆盖表明存在一个默认的主题函数来覆盖 - 在许多主题中,我们没有明确覆盖函数,而是创建在特定情况下使用的替代函数。
我现在假设我需要在模块中定义这个,如果我想将函数定义为theme_function_name
而不是themename_theme_function_name
。
此page here about theming on Drupal.org是查找部分信息的有用信息。