1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
<?php
/**
* Implements hook_theme().
*/
function theme_test_theme($existing, $type, $theme, $path) {
$items['theme_test'] = array(
'file' => 'theme_test.inc',
'variables' => array('foo' => ''),
);
$items['theme_test_template_test'] = array(
'template' => 'theme_test.template_test',
);
$items['theme_test_template_test_2'] = array(
'template' => 'theme_test.template_test',
);
$items['theme_test_foo'] = array(
'variables' => array('foo' => NULL),
);
return $items;
}
/**
* Implements hook_system_theme_info().
*/
function theme_test_system_theme_info() {
$themes['test_theme'] = drupal_get_path('module', 'theme_test') . '/themes/test_theme/test_theme.info';
return $themes;
}
/**
* Implements hook_menu().
*/
function theme_test_menu() {
$items['theme-test/suggestion'] = array(
'title' => 'Suggestion',
'page callback' => '_theme_test_suggestion',
'access arguments' => array('access content'),
'theme callback' => '_theme_custom_theme',
'type' => MENU_CALLBACK,
);
$items['theme-test/alter'] = array(
'title' => 'Suggestion',
'page callback' => '_theme_test_alter',
'access arguments' => array('access content'),
'theme callback' => '_theme_custom_theme',
'type' => MENU_CALLBACK,
);
$items['theme-test/hook-init'] = array(
'page callback' => 'theme_test_hook_init_page_callback',
'access callback' => TRUE,
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_init().
*/
function theme_test_init() {
if (arg(0) == 'theme-test' && arg(1) == 'hook-init') {
// First, force the theme registry to be rebuilt on this page request. This
// allows us to test a full initialization of the theme system in the code
// below.
drupal_theme_rebuild();
// Next, initialize the theme system by storing themed text in a global
// variable. We will use this later in theme_test_hook_init_page_callback()
// to test that even when the theme system is initialized this early, it is
// still capable of returning output and theming the page as a whole.
$GLOBALS['theme_test_output'] = theme('more_link', array('url' => 'user', 'title' => 'Themed output generated in hook_init()'));
}
}
/**
* Implements hook_exit().
*/
function theme_test_exit() {
if (arg(0) == 'user') {
// Register a fake registry loading callback. If it gets called by
// theme_get_registry(), the registry has not been initialized yet.
_theme_registry_callback('_theme_test_load_registry', array());
print theme_get_registry() ? 'registry initialized' : 'registry not initialized';
}
}
/**
* Fake registry loading callback.
*/
function _theme_test_load_registry() {
return array();
}
/**
* Menu callback for testing themed output generated in hook_init().
*/
function theme_test_hook_init_page_callback() {
return $GLOBALS['theme_test_output'];
}
/**
* Custom theme callback.
*/
function _theme_custom_theme() {
return 'test_theme';
}
/**
* Page callback, calls drupal_alter().
*
* This is for testing that the theme can have hook_*_alter() implementations
* that run during page callback execution, even before theme() is called for
* the first time.
*/
function _theme_test_alter() {
$data = 'foo';
drupal_alter('theme_test_alter', $data);
return "The altered data is $data.";
}
/**
* Page callback, calls a theme hook suggestion.
*/
function _theme_test_suggestion() {
return theme(array('theme_test__suggestion', 'theme_test'), array());
}
/**
* Theme function for testing theme('theme_test_foo').
*/
function theme_theme_test_foo($variables) {
return $variables['foo'];
}
|