注意:这个可用于Drupal 4.6.5;它应该也适用于Drupal4.6.6
XTemplate的一个不足是,当它展示一级链接时,不能够处理里面的PHP.不过,我从php.net的用户评论中,找到两个函数,可以帮助XTemplate引擎解决这个问题:
首先需要将下面的代码拷贝到xtemplate.engine文件(位于/themes/engines/xtemplate)的最底部;恰好位于PHP结束标签的前面:
function eval_mixed_helper($arr){
return ("echo stripslashes(\"".addslashes($arr[1])."\");");
}
function eval_mixed($string){
$string = " ?>".$string." ?>";
$string = preg_replace("//", " echo $1; ?>", $string);
$string = str_replace('?>', '', str_replace( array(' <?php ', '<?'), ', preg_replace_callback( "/\?> ((.|\n)*?)
return eval($string);
}
?>
XTemplate使用theme_get_setting()来获取一级链接的html,并将其放到页面中.我们可以先把这个html放到一个变量中,提前做些处理工作。为了实现这一点,你需要修改下面的代码(丛28行开始,根据你的drupal版本的不同,可能会有所出入):
$xtemplate->template->assign(array(
"language" => $GLOBALS['locale'],
"head_title" => implode(' | ', $head_title),
"head" => drupal_get_html_head(),
"styles" => theme_get_styles(),
"onload_attributes" => theme_onload_attribute(),
"primary_links" => theme_get_setting('primary_links'),
"secondary_links" => theme_get_setting('secondary_links')
));
替换为下面的代码:
// allow for php in the primary links
ob_start();
eval_mixed(theme_get_setting('primary_links'));
$primary_link_eval = ob_get_clean();
$xtemplate->template->assign(array(
"language" => $GLOBALS['locale'],
"head_title" => implode(' | ', $head_title),
"head" => drupal_get_html_head(),
"styles" => theme_get_styles(),
"onload_attributes" => theme_onload_attribute(),
"primary_links" => $primary_link_eval,
"secondary_links" => theme_get_setting('secondary_links')
));
?>
现在,就可以在你的一级链接中添加php代码了。