You are here

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

g089h515r806 的头像
Submitted by g089h515r806 on 星期四, 2008-09-18 02:54

注意:这个可用于Drupal 4.6.5;它应该也适用于Drupal4.6.6

XTemplate的一个不足是,当它展示一级链接时,不能够处理里面的PHP.不过,我从php.net的用户评论中,找到两个函数,可以帮助XTemplate引擎解决这个问题:

 

  1. 首先需要将下面的代码拷贝到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("/<\?=\s+(.*?)\s+\?>/", "<? echo $1; ?>", $string);
  $string = str_replace('?>', '', str_replace( array(' <?php', '<?'), ', preg_replace_callback( "/\?> ((.|\n)*?)<\?(php)?/","eval_mixed_helper",$string) ) );
  return eval($string);
}
?>

 

  1. 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')
   ));
?></li>

现在,就可以在你的一级链接中添加php代码了。

 

 相关链接: http://drupal.org/node/54861 ,Think in Drupal

 

 

Drupal版本: