昨天为大家介绍了怎样使用Drupal的主题预处理函数为模板添加变量,今天我来说说怎样使用主题预处理函数处理逻辑。同样的,例子都很简单,没什么实用价值,主要用于说明思路和方法。
首先,我要介绍一下Drupal主题开发中的一个重要原则:尽量不要在模板文件中处理复杂的逻辑,它们应该放在PHP函数中,而不是模板中。这样做的最大好处是:逻辑层与表示层的分离,有利于代码的组织与维护。 下面来看第一个例子:让我们的自定义变量在Drupal网站的首页和内页显示不同的内容。function mytheme_preprocess_page(&variables) { if ($variables['is_front']) { $variables['custom_text'] = t(‘这儿是首页’); } else { $variables['custom_text'] = t('这儿不是首页'); }}下面我来解释一下这个函数:与昨天重复的地方我就不啰嗦了,没有看过昨天文章的朋友可以回头看一下,链接在本文最下方的文章列表里。这是一个很简单的if...else...逻辑,if的条件是$variables['is_front']这个变量,其中的数组键'is_front'表示page.tpl.php模板文件中的$is_front变量,该变量是一个布尔值,用于判断用户访问的当前页面是否为Drupal网站的首页。如果是首页,我们的自定义模板变量$custom_text的值为‘这儿是首页’,否则为’这儿不是首页‘。 然后,清理缓存,分别打开Drupal的首页和内页就能看到效果了。 再看看第二例子:让我们的自定义变量只显示给Drupal的网站管理员角色。
function mytheme_preprocess_page(&variables) { if (isset($variables['user']->roles[3])) { $variables['custom_text'] = t(‘我是网站管理员’); } else { $variables['custom_text'] = t('我不是网站管理员'); }}解释一下这个函数:与第一个函数的区别在于$user(在预处理函数中用$variables['user']表示)变量,它采用对象的形式表示当前访问的用户,而$user->roles[3](在预处理函数中用$variables['user']->roles[3]表示)则表示网站管理员这一用户角色。 好了,通过这两个简单的范例,大家应该可以理解Drupal的主题预处理函数是如何处理逻辑的了,希望大家能举一反三,写出更漂亮的代码^_^