当前位置: 首页 > 工具软件 > PHP XTemplate > 使用案例 >

如何允许php代码,如何允许在XTemplate的一级链接中使用PHP代码

晏阳飙
2023-12-01

注意:这个可用于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代码了。

 类似资料: