Handles the interface between XTemplate files and the Drupal theme system.
File
themes/engines/xtemplate/xtemplate.engineView source
<?php
// $Id$
/**
* @file
* Handles the interface between XTemplate files and the Drupal theme system.
*/
// Initialize the xtemplate engine.
function xtemplate_init($template) {
// We cannot use the theme() or path_to_theme() functions here
if (!class_exists('XTemplate')) {
include_once dirname(__FILE__) . '/xtemplate.inc';
}
$GLOBALS["xtemplate"] = new StdClass();
$dir = dirname($template->filename);
$GLOBALS['xtemplate']->template = new XTemplate(basename($template->filename), $dir);
$GLOBALS['xtemplate']->template
->assign(array(
'directory' => $dir,
));
$GLOBALS['xtemplate']->template
->SetNullBlock(' ');
// '' doesn't work!
}
function xtemplate_templates() {
return system_listing('^xtemplate\\.xtmpl$', 'themes', 'filename');
}
function xtemplate_features() {
return array(
'logo',
'toggle_name',
'toggle_search',
'toggle_slogan',
'toggle_mission',
'toggle_primary_links',
'toggle_secondary_links',
'toggle_node_user_picture',
'toggle_comment_user_picture',
);
}
function xtemplate_node($node, $main = 0, $page = 0) {
global $xtemplate;
$xtemplate->template
->assign(array(
"submitted" => theme_get_setting("toggle_node_info_{$node->type}") ? t("Submitted by %a on %b.", array(
"%a" => format_name($node),
"%b" => format_date($node->created),
)) : '',
"link" => url("node/{$node->nid}"),
"title" => check_plain($node->title),
"author" => format_name($node),
"date" => format_date($node->created),
"sticky" => $main && $node->sticky ? 'sticky' : '',
"content" => $main && $node->teaser ? $node->teaser : $node->body,
));
if ($page == 0) {
$xtemplate->template
->parse("node.title");
}
if (theme_get_setting('toggle_node_user_picture') && ($picture = theme('user_picture', $node))) {
$xtemplate->template
->assign("picture", $picture);
$xtemplate->template
->parse("node.picture");
}
if (module_exist("taxonomy") && ($taxonomy = taxonomy_link("taxonomy terms", $node))) {
$xtemplate->template
->assign("taxonomy", theme_links($taxonomy));
$xtemplate->template
->parse("node.taxonomy");
}
if ($node->links) {
$xtemplate->template
->assign("links", theme_links($node->links));
$xtemplate->template
->parse("node.links");
}
$xtemplate->template
->parse("node");
$output = $xtemplate->template
->text("node");
$xtemplate->template
->reset("node");
return $output;
}
function xtemplate_comment($comment, $links = 0) {
global $xtemplate;
$xtemplate->template
->assign(array(
"new" => t("new"),
"submitted" => t("Submitted by %a on %b.", array(
"%a" => format_name($comment),
"%b" => format_date($comment->timestamp),
)),
"title" => l($comment->subject, $_GET['q'], NULL, NULL, "comment-{$comment->cid}"),
"author" => format_name($comment),
"date" => format_date($comment->timestamp),
"content" => $comment->comment,
));
if ($comment->new) {
$xtemplate->template
->parse("comment.new");
}
if (theme_get_setting('toggle_comment_user_picture') && ($picture = theme('user_picture', $comment))) {
$xtemplate->template
->assign("picture", $picture);
$xtemplate->template
->parse("comment.picture");
}
if ($links) {
$xtemplate->template
->assign("links", $links);
$xtemplate->template
->parse("comment.links");
}
$xtemplate->template
->parse("comment");
$output = $xtemplate->template
->text("comment");
$xtemplate->template
->reset("comment");
return $output;
}
function xtemplate_page($content) {
global $xtemplate;
// Construct page title
if (drupal_get_title()) {
$head_title = array(
strip_tags(drupal_get_title()),
variable_get('site_name', 'drupal'),
);
}
else {
$head_title = array(
variable_get('site_name', 'drupal'),
);
if (variable_get('site_slogan', '')) {
$head_title[] = variable_get('site_slogan', '');
}
}
$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'),
));
if ($logo = theme_get_setting('logo')) {
$xtemplate->template
->assign('logo', $logo);
$xtemplate->template
->parse('header.logo');
}
if (theme_get_setting('toggle_name')) {
$xtemplate->template
->assign('site_name', variable_get('site_name', ''));
$xtemplate->template
->parse('header.site_name');
}
if (theme_get_setting('toggle_slogan')) {
$xtemplate->template
->assign('site_slogan', variable_get('site_slogan', ''));
$xtemplate->template
->parse('header.site_slogan');
}
if ($tabs = theme('menu_local_tasks')) {
$xtemplate->template
->assign("tabs", $tabs);
$xtemplate->template
->parse("header.title.tabs");
}
if ($title = drupal_get_title()) {
$xtemplate->template
->assign("title", $title);
$xtemplate->template
->assign("breadcrumb", theme("breadcrumb", drupal_get_breadcrumb()));
$xtemplate->template
->parse("header.title");
}
if ($help = menu_get_active_help()) {
$xtemplate->template
->assign("help", $help);
$xtemplate->template
->parse("header.help");
}
if ($message = theme_status_messages()) {
$xtemplate->template
->assign("message", $message);
$xtemplate->template
->parse("header.message");
}
if (theme_get_setting('toggle_search')) {
$xtemplate->template
->assign(array(
//"search" => search_form(),
"search_url" => url("search"),
"search_button_text" => t("Search"),
"search_description" => t("Enter the terms you wish to search for."),
"form_token" => form_token(),
));
$xtemplate->template
->parse("header.search_box");
}
// only parse the mission block if we are on the frontpage ...
if ($_GET["q"] == variable_get("site_frontpage", "node") && theme_get_setting('toggle_mission') && ($mission = theme_get_setting('mission'))) {
$xtemplate->template
->assign("mission", filter_xss($mission));
$xtemplate->template
->parse("header.mission");
}
if ($blocks = theme("blocks", "left")) {
$xtemplate->template
->assign("blocks", $blocks);
$xtemplate->template
->parse("header.blocks");
}
$xtemplate->template
->parse("header");
$output = $xtemplate->template
->text("header");
$output .= "\n<!-- begin content -->\n";
$output .= $content;
$output .= "\n<!-- end content -->\n";
if ($blocks = theme("blocks", "right")) {
$xtemplate->template
->assign("blocks", $blocks);
$xtemplate->template
->parse("footer.blocks");
}
// only parse the footer block if site_footer is set
if ($footer_message = variable_get("site_footer", FALSE)) {
$xtemplate->template
->assign("footer_message", $footer_message);
$xtemplate->template
->parse("footer.message");
}
$xtemplate->template
->assign("footer", theme_closure());
$xtemplate->template
->parse("footer");
$output .= $xtemplate->template
->text("footer");
return $output;
}
function xtemplate_block(&$block) {
global $xtemplate;
// create template variables for all block variables (module, delta, region, subject, content, ...)
foreach ($block as $key => $value) {
$xtemplate->template
->assign($key == "subject" ? "title" : $key, $value);
// TODO: standardize on 'title' (ie. rename all $block["subject"] to "title")
}
$xtemplate->template
->parse("block");
$output = $xtemplate->template
->text("block");
$xtemplate->template
->reset("block");
return $output;
}
function xtemplate_box($title, $content, $region = "main") {
global $xtemplate;
$xtemplate->template
->assign(array(
"title" => $title,
"content" => $content,
));
$xtemplate->template
->parse("box");
$output = $xtemplate->template
->text("box");
$xtemplate->template
->reset("box");
return $output;
}