#600974 by effulgentsia, JohnAlbin, sun, and Damien Tournoud: Allow theme functions to take one argument without any hacks. NOTE: This is an API change in hook_theme().

merge-requests/26/head
Angie Byron 2009-10-23 22:24:19 +00:00
parent f2d90e99fb
commit a7149821d6
40 changed files with 279 additions and 251 deletions

View File

@ -5071,196 +5071,196 @@ function drupal_common_theme() {
return array(
// theme.inc
'placeholder' => array(
'arguments' => array('text' => NULL)
'variables' => array('text' => NULL)
),
'html' => array(
'arguments' => array('page' => NULL),
'render element' => 'page',
'template' => 'html',
),
'page' => array(
'arguments' => array('page' => NULL),
'render element' => 'page',
'template' => 'page',
),
'region' => array(
'arguments' => array('elements' => NULL),
'render element' => 'elements',
'template' => 'region',
),
'status_messages' => array(
'arguments' => array('display' => NULL),
'variables' => array('display' => NULL),
),
'links' => array(
'arguments' => array('links' => NULL, 'attributes' => array('class' => array('links')), 'heading' => array()),
'variables' => array('links' => NULL, 'attributes' => array('class' => array('links')), 'heading' => array()),
),
'image' => array(
'arguments' => array('path' => NULL, 'alt' => '', 'title' => '', 'attributes' => array(), 'getsize' => TRUE),
'variables' => array('path' => NULL, 'alt' => '', 'title' => '', 'attributes' => array(), 'getsize' => TRUE),
),
'breadcrumb' => array(
'arguments' => array('breadcrumb' => NULL),
'variables' => array('breadcrumb' => NULL),
),
'help' => array(
'arguments' => array(),
'variables' => array(),
),
'submenu' => array(
'arguments' => array('links' => NULL),
'variables' => array('links' => NULL),
),
'table' => array(
'arguments' => array('header' => NULL, 'rows' => NULL, 'attributes' => array(), 'caption' => NULL, 'colgroups' => array(), 'sticky' => TRUE),
'variables' => array('header' => NULL, 'rows' => NULL, 'attributes' => array(), 'caption' => NULL, 'colgroups' => array(), 'sticky' => TRUE),
),
'table_select_header_cell' => array(
'arguments' => array(),
'variables' => array(),
),
'tablesort_indicator' => array(
'arguments' => array('style' => NULL),
'variables' => array('style' => NULL),
),
'mark' => array(
'arguments' => array('type' => MARK_NEW),
'variables' => array('type' => MARK_NEW),
),
'item_list' => array(
'arguments' => array('items' => array(), 'title' => NULL, 'type' => 'ul', 'attributes' => array()),
'variables' => array('items' => array(), 'title' => NULL, 'type' => 'ul', 'attributes' => array()),
),
'more_help_link' => array(
'arguments' => array('url' => NULL),
'variables' => array('url' => NULL),
),
'feed_icon' => array(
'arguments' => array('url' => NULL, 'title' => NULL),
'variables' => array('url' => NULL, 'title' => NULL),
),
'more_link' => array(
'arguments' => array('url' => NULL, 'title' => NULL)
'variables' => array('url' => NULL, 'title' => NULL)
),
'blocks' => array(
'arguments' => array('region' => NULL),
'variables' => array('region' => NULL),
),
'username' => array(
'arguments' => array('account' => NULL),
'variables' => array('account' => NULL),
),
'progress_bar' => array(
'arguments' => array('percent' => NULL, 'message' => NULL),
'variables' => array('percent' => NULL, 'message' => NULL),
),
'indentation' => array(
'arguments' => array('size' => 1),
'variables' => array('size' => 1),
),
// from theme.maintenance.inc
'maintenance_page' => array(
'arguments' => array('content' => NULL, 'show_messages' => TRUE),
'variables' => array('content' => NULL, 'show_messages' => TRUE),
'template' => 'maintenance-page',
),
'update_page' => array(
'arguments' => array('content' => NULL, 'show_messages' => TRUE),
'variables' => array('content' => NULL, 'show_messages' => TRUE),
),
'install_page' => array(
'arguments' => array('content' => NULL),
'variables' => array('content' => NULL),
),
'task_list' => array(
'arguments' => array('items' => NULL, 'active' => NULL),
'variables' => array('items' => NULL, 'active' => NULL),
),
'authorize_message' => array(
'arguments' => array('message' => NULL, 'success' => TRUE),
'variables' => array('message' => NULL, 'success' => TRUE),
),
'authorize_report' => array(
'arguments' => array('messages' => array()),
'variables' => array('messages' => array()),
),
// from pager.inc
'pager' => array(
'arguments' => array('tags' => array(), 'element' => 0, 'parameters' => array(), 'quantity' => 9),
'variables' => array('tags' => array(), 'element' => 0, 'parameters' => array(), 'quantity' => 9),
),
'pager_first' => array(
'arguments' => array('text' => NULL, 'element' => 0, 'parameters' => array()),
'variables' => array('text' => NULL, 'element' => 0, 'parameters' => array()),
),
'pager_previous' => array(
'arguments' => array('text' => NULL, 'element' => 0, 'interval' => 1, 'parameters' => array()),
'variables' => array('text' => NULL, 'element' => 0, 'interval' => 1, 'parameters' => array()),
),
'pager_next' => array(
'arguments' => array('text' => NULL, 'element' => 0, 'interval' => 1, 'parameters' => array()),
'variables' => array('text' => NULL, 'element' => 0, 'interval' => 1, 'parameters' => array()),
),
'pager_last' => array(
'arguments' => array('text' => NULL, 'element' => 0, 'parameters' => array()),
'variables' => array('text' => NULL, 'element' => 0, 'parameters' => array()),
),
'pager_link' => array(
'arguments' => array('text' => NULL, 'page_new' => NULL, 'element' => NULL, 'parameters' => array(), 'attributes' => array()),
'variables' => array('text' => NULL, 'page_new' => NULL, 'element' => NULL, 'parameters' => array(), 'attributes' => array()),
),
// from locale.inc
'locale_admin_manage_screen' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
),
// from menu.inc
'menu_link' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'menu_tree' => array(
'arguments' => array('tree' => NULL),
'render element' => 'tree',
),
'menu_local_task' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'menu_local_action' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'menu_local_tasks' => array(
'arguments' => array(),
'variables' => array(),
),
// from form.inc
'select' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'fieldset' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'radio' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'radios' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'date' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'checkbox' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'checkboxes' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'button' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'image_button' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'hidden' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'textfield' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'form' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'textarea' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'markup' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'password' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'file' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'tableselect' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'form_element' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'text_format_wrapper' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'vertical_tabs' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'container' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
);
}

View File

@ -299,11 +299,15 @@ function drupal_theme_rebuild() {
* - 'template': The filename of the template generating output for this
* theme hook. The template is in the directory defined by the 'path' key of
* hook_theme() or defaults to $path.
* - 'arguments': The arguments for this theme hook as defined in
* hook_theme(). If there is more than one implementation and 'arguments' is
* - 'variables': The variables for this theme hook as defined in
* hook_theme(). If there is more than one implementation and 'variables' is
* not specified in a later one, then the previous definition is kept.
* - 'render element': The renderable element for this theme hook as defined
* in hook_theme(). If there is more than one implementation and
* 'render element' is not specified in a later one, then the previous
* definition is kept.
* - 'theme paths': The paths where implementations of a theme hook can be
* found. Its definition is similarly inherited like 'arguments'. Each time
* found. Its definition is similarly inherited like 'variables'. Each time
* _theme_process_registry() is called for this theme hook, either the
* 'path' key from hook_theme() (if defined) or $path is added.
* - 'preprocess functions': See theme() for detailed documentation.
@ -365,11 +369,15 @@ function _theme_process_registry(&$cache, $name, $type, $theme, $path) {
$result[$hook]['includes'][] = $include_file;
}
// If 'arguments' have been defined previously, carry them forward.
// If 'variables' have been defined previously, carry them forward.
// This should happen if a theme overrides a Drupal defined theme
// function, for example.
if (!isset($info['arguments']) && isset($cache[$hook])) {
$result[$hook]['arguments'] = $cache[$hook]['arguments'];
if (!isset($info['variables']) && isset($cache[$hook]['variables'])) {
$result[$hook]['variables'] = $cache[$hook]['variables'];
}
// Same for 'render element'.
if (!isset($info['render element']) && isset($cache[$hook]['render element'])) {
$result[$hook]['render element'] = $cache[$hook]['render element'];
}
// The following apply only to theming hooks implemented as templates.
@ -780,30 +788,28 @@ function theme($hook, $variables = array()) {
}
// If a renderable array is passed as $variables, then set $variables to
// what's expected by the theme hook. If the theme hook expects a single
// argument, set the renderable array as that argument. If the theme hook
// expects multiple arguments, set the properties of the renderable array as
// those arguments.
// the arguments expected by the theme function.
if (isset($variables['#theme']) || isset($variables['#theme_wrappers'])) {
$element = $variables;
$variables = array();
$n = count($info['arguments']);
if ($n == 1) {
$arg_keys = array_keys($info['arguments']);
$variables[$arg_keys[0]] = $element;
}
elseif ($n > 1) {
foreach ($info['arguments'] as $name => $default) {
if (isset($info['variables'])) {
foreach (array_keys($info['variables']) as $name) {
if (isset($element["#$name"])) {
$variables[$name] = $element["#$name"];
}
}
}
else {
$variables[$info['render element']] = $element;
}
}
// Merge in argument defaults.
if (!empty($info['arguments'])) {
$variables += $info['arguments'];
if (!empty($info['variables'])) {
$variables += $info['variables'];
}
elseif (!empty($info['render element'])) {
$variables += array($info['render element'] => array());
}
// Invoke the variable processors, if any. The processors may specify
@ -968,8 +974,7 @@ function path_to_theme() {
}
/**
* Find overridden theme functions. Called by themes and/or theme engines to
* easily discover theme functions.
* Allow themes and/or theme engines to easily discover overridden theme functions.
*
* @param $cache
* The existing cache of theme hooks to test against.
@ -990,9 +995,10 @@ function drupal_find_theme_functions($cache, $prefixes) {
if ($matches) {
foreach ($matches as $match) {
$new_hook = str_replace($prefix . '_', '', $match);
$arg_name = isset($info['variables']) ? 'variables' : 'render element';
$templates[$new_hook] = array(
'function' => $match,
'arguments' => $info['arguments'],
$arg_name => $info[$arg_name],
);
}
}
@ -1015,8 +1021,7 @@ function drupal_find_theme_functions($cache, $prefixes) {
}
/**
* Find overridden theme templates. Called by themes and/or theme engines to
* easily discover templates.
* Allow themes and/or theme engines to easily discover overridden templates.
*
* @param $cache
* The existing cache of theme hooks to test against.
@ -1093,10 +1098,11 @@ function drupal_find_theme_templates($cache, $extension, $path) {
foreach ($matches as $match) {
$file = substr($match, 0, strpos($match, '.'));
// Put the underscores back in for the hook name and register this pattern.
$arg_name = isset($info['variables']) ? 'variables' : 'render element';
$templates[strtr($file, '-', '_')] = array(
'template' => $file,
'path' => dirname($files[$match]->uri),
'arguments' => $info['arguments'],
$arg_name => $info[$arg_name],
);
}
}

View File

@ -40,43 +40,43 @@ function aggregator_help($path, $arg) {
function aggregator_theme() {
return array(
'aggregator_wrapper' => array(
'arguments' => array('content' => NULL),
'variables' => array('content' => NULL),
'file' => 'aggregator.pages.inc',
'template' => 'aggregator-wrapper',
),
'aggregator_categorize_items' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
'file' => 'aggregator.pages.inc',
),
'aggregator_feed_source' => array(
'arguments' => array('feed' => NULL),
'variables' => array('feed' => NULL),
'file' => 'aggregator.pages.inc',
'template' => 'aggregator-feed-source',
),
'aggregator_block_item' => array(
'arguments' => array('item' => NULL, 'feed' => 0),
'variables' => array('item' => NULL, 'feed' => 0),
),
'aggregator_summary_items' => array(
'arguments' => array('summary_items' => NULL, 'source' => NULL),
'variables' => array('summary_items' => NULL, 'source' => NULL),
'file' => 'aggregator.pages.inc',
'template' => 'aggregator-summary-items',
),
'aggregator_summary_item' => array(
'arguments' => array('item' => NULL),
'variables' => array('item' => NULL),
'file' => 'aggregator.pages.inc',
'template' => 'aggregator-summary-item',
),
'aggregator_item' => array(
'arguments' => array('item' => NULL),
'variables' => array('item' => NULL),
'file' => 'aggregator.pages.inc',
'template' => 'aggregator-item',
),
'aggregator_page_opml' => array(
'arguments' => array('feeds' => NULL),
'variables' => array('feeds' => NULL),
'file' => 'aggregator.pages.inc',
),
'aggregator_page_rss' => array(
'arguments' => array('feeds' => NULL, 'category' => NULL),
'variables' => array('feeds' => NULL, 'category' => NULL),
'file' => 'aggregator.pages.inc',
),
);

View File

@ -47,13 +47,13 @@ function block_help($path, $arg) {
function block_theme() {
return array(
'block' => array(
'arguments' => array('elements' => NULL),
'render element' => 'elements',
'template' => 'block',
),
'block_admin_display_form' => array(
'template' => 'block-admin-display-form',
'file' => 'block.admin.inc',
'arguments' => array('form' => NULL),
'render element' => 'form',
),
);
}

View File

@ -12,25 +12,25 @@
function book_theme() {
return array(
'book_navigation' => array(
'arguments' => array('book_link' => NULL),
'variables' => array('book_link' => NULL),
'template' => 'book-navigation',
),
'book_export_html' => array(
'arguments' => array('title' => NULL, 'contents' => NULL, 'depth' => NULL),
'variables' => array('title' => NULL, 'contents' => NULL, 'depth' => NULL),
'template' => 'book-export-html',
),
'book_admin_table' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
),
'book_title_link' => array(
'arguments' => array('link' => NULL),
'variables' => array('link' => NULL),
),
'book_all_books_block' => array(
'arguments' => array('book_menus' => array()),
'render element' => 'book_menus',
'template' => 'book-all-books-block',
),
'book_node_export_html' => array(
'arguments' => array('node' => NULL, 'children' => NULL),
'variables' => array('node' => NULL, 'children' => NULL),
'template' => 'book-node-export-html',
),
);

View File

@ -22,7 +22,7 @@ function color_help($path, $arg) {
function color_theme() {
return array(
'color_scheme_form' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
),
);
}

View File

@ -122,21 +122,21 @@ function comment_entity_info() {
function comment_theme() {
return array(
'comment_block' => array(
'arguments' => array(),
'variables' => array(),
),
'comment_preview' => array(
'arguments' => array('comment' => NULL),
'variables' => array('comment' => NULL),
),
'comment' => array(
'template' => 'comment',
'arguments' => array('elements' => NULL),
'render element' => 'elements',
),
'comment_post_forbidden' => array(
'arguments' => array('node' => NULL),
'variables' => array('node' => NULL),
),
'comment_wrapper' => array(
'template' => 'comment-wrapper',
'arguments' => array('content' => NULL),
'render element' => 'content',
),
);
}

View File

@ -152,19 +152,19 @@ function dashboard_system_info_alter(&$info, $file, $type) {
function dashboard_theme() {
return array(
'dashboard' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'dashboard_admin' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'dashboard_region' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'dashboard_disabled_blocks' => array(
'arguments' => array('blocks' => NULL),
'variables' => array('blocks' => NULL),
),
'dashboard_disabled_block' => array(
'arguments' => array('block' => NULL),
'variables' => array('block' => NULL),
),
);
}

View File

@ -33,7 +33,7 @@ function dblog_help($path, $arg) {
function dblog_theme() {
return array(
'dblog_filters' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
),
);
}

View File

@ -676,7 +676,7 @@ function hook_field_widget_error($element, $error) {
*
* @code
* 'field_formatter_FORMATTER_NAME' => array(
* 'arguments' => array('element' => NULL),
* 'render_element' => 'element',
* )
* @code
*

View File

@ -161,17 +161,17 @@ function field_theme() {
$items = array(
'field' => array(
'template' => 'field',
'arguments' => array('element' => NULL),
'render element' => 'element',
'path' => $path,
),
'field_multiple_value_form' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
);
$field_formatters = field_info_formatter_types(NULL);
foreach ($field_formatters as $key => $field_formatter) {
$items['field_formatter_' . $key] = array(
'arguments' => array('element' => NULL),
'render element' => 'element',
);
if (isset($field_formatter['theme'])) {
$items['field_formatter_' . $key] += $field_formatter['theme'];

View File

@ -11,7 +11,7 @@
*/
function number_theme() {
return array(
'number' => array('arguments' => array('element' => NULL)),
'number' => array('render element' => 'element'),
);
}

View File

@ -12,16 +12,16 @@
function options_theme() {
return array(
'options_select' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'options_buttons' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'options_onoff' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'options_none' => array(
'arguments' => array('instance' => NULL),
'variables' => array('instance' => NULL),
),
);
}

View File

@ -12,10 +12,10 @@
function text_theme() {
return array(
'text_textarea' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'text_textfield' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
);
}

View File

@ -154,12 +154,12 @@ function field_ui_menu_label($instance) {
function field_ui_theme() {
return array(
'field_ui_field_overview_form' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
'file' => 'field_ui.admin.inc',
'template' => 'field_ui-field-overview-form',
),
'field_ui_display_overview_form' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
'file' => 'field_ui.admin.inc',
'template' => 'field_ui-display-overview-form',
),

View File

@ -65,24 +65,24 @@ function file_theme() {
return array(
// file.module.
'file_link' => array(
'arguments' => array('file' => NULL),
'variables' => array('file' => NULL),
),
'file_icon' => array(
'arguments' => array('file' => NULL),
'variables' => array('file' => NULL),
),
'file_managed_file' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
// file.field.inc.
'file_widget' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'file_widget_multiple' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'file_upload_help' => array(
'arguments' => array('description' => NULL, 'upload_validators' => NULL),
'variables' => array('description' => NULL, 'upload_validators' => NULL),
),
);
}

View File

@ -38,22 +38,22 @@ function filter_help($path, $arg) {
function filter_theme() {
return array(
'filter_admin_overview' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
'file' => 'filter.admin.inc',
),
'filter_admin_order' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
'file' => 'filter.admin.inc',
),
'filter_tips' => array(
'arguments' => array('tips' => NULL, 'long' => FALSE),
'variables' => array('tips' => NULL, 'long' => FALSE),
'file' => 'filter.pages.inc',
),
'filter_tips_more_info' => array(
'arguments' => array(),
'variables' => array(),
),
'filter_guidelines' => array(
'arguments' => array('format' => NULL),
'variables' => array('format' => NULL),
),
);
}

View File

@ -39,26 +39,26 @@ function forum_theme() {
return array(
'forums' => array(
'template' => 'forums',
'arguments' => array('forums' => NULL, 'topics' => NULL, 'parents' => NULL, 'tid' => NULL, 'sortby' => NULL, 'forum_per_page' => NULL),
'variables' => array('forums' => NULL, 'topics' => NULL, 'parents' => NULL, 'tid' => NULL, 'sortby' => NULL, 'forum_per_page' => NULL),
),
'forum_list' => array(
'template' => 'forum-list',
'arguments' => array('forums' => NULL, 'parents' => NULL, 'tid' => NULL),
'variables' => array('forums' => NULL, 'parents' => NULL, 'tid' => NULL),
),
'forum_topic_list' => array(
'template' => 'forum-topic-list',
'arguments' => array('tid' => NULL, 'topics' => NULL, 'sortby' => NULL, 'forum_per_page' => NULL),
'variables' => array('tid' => NULL, 'topics' => NULL, 'sortby' => NULL, 'forum_per_page' => NULL),
),
'forum_icon' => array(
'template' => 'forum-icon',
'arguments' => array('new_posts' => NULL, 'num_posts' => 0, 'comment_mode' => 0, 'sticky' => 0),
'variables' => array('new_posts' => NULL, 'num_posts' => 0, 'comment_mode' => 0, 'sticky' => 0),
),
'forum_submitted' => array(
'template' => 'forum-submitted',
'arguments' => array('topic' => NULL),
'variables' => array('topic' => NULL),
),
'forum_form' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
'file' => 'forum.admin.inc',
),
);

View File

@ -170,7 +170,7 @@ function image_theme() {
return array(
// Theme functions in image.module.
'image_style' => array(
'arguments' => array(
'variables' => array(
'style_name' => NULL,
'path' => NULL,
'alt' => '',
@ -182,42 +182,42 @@ function image_theme() {
// Theme functions in image.admin.inc.
'image_style_list' => array(
'arguments' => array('styles' => NULL),
'variables' => array('styles' => NULL),
),
'image_style_effects' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
),
'image_style_preview' => array(
'arguments' => array('style' => NULL),
'variables' => array('style' => NULL),
),
'image_anchor' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'image_resize_summary' => array(
'arguments' => array('data' => NULL),
'variables' => array('data' => NULL),
),
'image_scale_summary' => array(
'arguments' => array('data' => NULL),
'variables' => array('data' => NULL),
),
'image_crop_summary' => array(
'arguments' => array('data' => NULL),
'variables' => array('data' => NULL),
),
'image_rotate_summary' => array(
'arguments' => array('data' => NULL),
'variables' => array('data' => NULL),
),
// Theme functions in image.field.inc.
'image_widget' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'field_formatter_image' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'field_formatter_image_link_content' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'field_formatter_image_link_file' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
);
}

View File

@ -449,16 +449,16 @@ function locale_field_node_form_submit($form, &$form_state) {
function locale_theme() {
return array(
'locale_languages_overview_form' => array(
'arguments' => array('form' => array()),
'render element' => 'form',
),
'locale_languages_configure_form' => array(
'arguments' => array('form' => array()),
'render element' => 'form',
),
'locale_translation_filters' => array(
'arguments' => array('form' => array()),
'render element' => 'form',
),
'locale_date_format_form' => array(
'arguments' => array('form' => array()),
'render element' => 'form',
),
);
}

View File

@ -159,11 +159,11 @@ function menu_theme() {
return array(
'menu_overview_form' => array(
'file' => 'menu.admin.inc',
'arguments' => array('form' => NULL),
'render element' => 'form',
),
'menu_admin_overview' => array(
'file' => 'menu.admin.inc',
'arguments' => array('title' => NULL, 'name' => NULL, 'description' => NULL),
'variables' => array('title' => NULL, 'name' => NULL, 'description' => NULL),
),
);
}

View File

@ -122,40 +122,40 @@ function node_help($path, $arg) {
function node_theme() {
return array(
'node' => array(
'arguments' => array('elements' => NULL),
'render element' => 'elements',
'template' => 'node',
),
'node_list' => array(
'arguments' => array('items' => NULL, 'title' => NULL),
'variables' => array('items' => NULL, 'title' => NULL),
),
'node_search_admin' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
),
'node_filter_form' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
'file' => 'node.admin.inc',
),
'node_filters' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
'file' => 'node.admin.inc',
),
'node_add_list' => array(
'arguments' => array('content' => NULL),
'variables' => array('content' => NULL),
'file' => 'node.pages.inc',
),
'node_form' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
'file' => 'node.pages.inc',
),
'node_preview' => array(
'arguments' => array('node' => NULL),
'variables' => array('node' => NULL),
'file' => 'node.pages.inc',
),
'node_log_message' => array(
'arguments' => array('log' => NULL),
'variables' => array('log' => NULL),
),
'node_admin_overview' => array(
'arguments' => array('name' => NULL, 'type' => NULL),
'variables' => array('name' => NULL, 'type' => NULL),
),
);
}

View File

@ -34,18 +34,18 @@ function poll_theme() {
return array(
'poll_vote' => array(
'template' => 'poll-vote',
'arguments' => array('form' => NULL),
'render element' => 'form',
),
'poll_choices' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
),
'poll_results' => array(
'template' => 'poll-results',
'arguments' => array('raw_title' => NULL, 'results' => NULL, 'votes' => NULL, 'raw_links' => NULL, 'block' => NULL, 'nid' => NULL, 'vote' => NULL),
'variables' => array('raw_title' => NULL, 'results' => NULL, 'votes' => NULL, 'raw_links' => NULL, 'block' => NULL, 'nid' => NULL, 'vote' => NULL),
),
'poll_bar' => array(
'template' => 'poll-bar',
'arguments' => array('title' => NULL, 'votes' => NULL, 'total_votes' => NULL, 'vote' => NULL, 'block' => NULL),
'variables' => array('title' => NULL, 'votes' => NULL, 'total_votes' => NULL, 'vote' => NULL, 'block' => NULL),
),
);
}

View File

@ -54,19 +54,19 @@ function profile_help($path, $arg) {
function profile_theme() {
return array(
'profile_block' => array(
'arguments' => array('account' => NULL, 'fields' => array()),
'variables' => array('account' => NULL, 'fields' => array()),
'template' => 'profile-block',
),
'profile_listing' => array(
'arguments' => array('account' => NULL, 'fields' => array()),
'variables' => array('account' => NULL, 'fields' => array()),
'template' => 'profile-listing',
),
'profile_wrapper' => array(
'arguments' => array('content' => NULL),
'variables' => array('content' => NULL),
'template' => 'profile-wrapper',
),
'profile_admin_overview' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
'file' => 'profile.admin.inc',
)
);

View File

@ -321,10 +321,10 @@ function rdf_entity_load($entities, $type) {
function rdf_theme() {
return array(
'rdf_template_variable_wrapper' => array(
'arguments' => array('content' => NULL, 'attributes' => array(), 'context' => array(), 'inline' => TRUE),
'variables' => array('content' => NULL, 'attributes' => array(), 'context' => array(), 'inline' => TRUE),
),
'rdf_metadata' => array(
'arguments' => array('metadata' => array()),
'variables' => array('metadata' => array()),
),
);
}

View File

@ -118,21 +118,21 @@ function search_help($path, $arg) {
function search_theme() {
return array(
'search_block_form' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
'template' => 'search-block-form',
),
'search_result' => array(
'arguments' => array('result' => NULL, 'type' => NULL),
'variables' => array('result' => NULL, 'type' => NULL),
'file' => 'search.pages.inc',
'template' => 'search-result',
),
'search_results' => array(
'arguments' => array('results' => NULL, 'type' => NULL),
'variables' => array('results' => NULL, 'type' => NULL),
'file' => 'search.pages.inc',
'template' => 'search-results',
),
'search_results_listing' => array(
'arguments' => array('title' => NULL, 'content' => NULL),
'variables' => array('title' => NULL, 'content' => NULL),
),
);
}

View File

@ -109,11 +109,11 @@ function shortcut_menu() {
function shortcut_theme() {
return array(
'shortcut_set_switch' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
'file' => 'shortcut.admin.inc',
),
'shortcut_set_customize' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
'file' => 'shortcut.admin.inc',
),
);

View File

@ -75,11 +75,11 @@ function simpletest_permission() {
function simpletest_theme() {
return array(
'simpletest_test_table' => array(
'arguments' => array('table' => NULL),
'render element' => 'table',
'file' => 'simpletest.pages.inc',
),
'simpletest_result_summary' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
'file' => 'simpletest.pages.inc',
),
);

View File

@ -106,7 +106,7 @@ function common_test_drupal_alter_alter(&$data, &$arg2 = NULL, &$arg3 = NULL) {
function common_test_theme() {
return array(
'common_test_foo' => array(
'arguments' => array('foo' => 'foo', 'bar' => 'bar'),
'variables' => array('foo' => 'foo', 'bar' => 'bar'),
),
);
}

View File

@ -580,13 +580,13 @@ function field_test_field_formatter_info() {
function field_test_theme() {
return array(
'field_formatter_field_test_default' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'field_formatter_field_test_multiple' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
'field_formatter_field_test_needs_additional_data' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
);
}

View File

@ -83,7 +83,7 @@ function syslog_watchdog(array $log_entry) {
function syslog_theme() {
return array(
'syslog_format' => array(
'arguments' => array('entry' => NULL),
'variables' => array('entry' => NULL),
),
);
}

View File

@ -849,12 +849,19 @@ function hook_permission() {
* to each sub-array is the internal name of the hook, and the array contains
* info about the hook. Each array may contain the following items:
*
* - arguments: (required) An array of arguments that this theme hook uses. This
* value allows the theme layer to properly utilize templates. The
* array keys represent the name of the variable, and the value will be
* used as the default value if not specified to the theme() function.
* These arguments must be in the same order that they will be given to
* the theme() function.
* - variables: (required if "render element" not present) An array of
* variables that this theme hook uses. This value allows the theme layer to
* properly utilize templates. Each array key represents the name of the
* variable and the value will be used as the default value if it is not given
* when theme() is called. Template implementations receive these arguments as
* variables in the template file. Function implementations are passed this
* array data in the $variables parameter.
* - render element: (required if "variables" not present) A string that is the
* name of the sole renderable element to pass to the theme function. The
* string represents the name of the "variable" that will hold the renderable
* array inside any optional preprocess or process functions. Cannot be used
* with the "variables" item; only one or the other, not both, can be present
* in a hook's info array.
* - file: The file the implementation resides in. This file will be included
* prior to the theme being rendered, to make sure that the function or
* preprocess function (as needed) is actually loaded; this makes it possible
@ -929,16 +936,24 @@ function hook_permission() {
function hook_theme($existing, $type, $theme, $path) {
return array(
'forum_display' => array(
'arguments' => array('forums' => NULL, 'topics' => NULL, 'parents' => NULL, 'tid' => NULL, 'sortby' => NULL, 'forum_per_page' => NULL),
'variables' => array('forums' => NULL, 'topics' => NULL, 'parents' => NULL, 'tid' => NULL, 'sortby' => NULL, 'forum_per_page' => NULL),
),
'forum_list' => array(
'arguments' => array('forums' => NULL, 'parents' => NULL, 'tid' => NULL),
'variables' => array('forums' => NULL, 'parents' => NULL, 'tid' => NULL),
),
'forum_topic_list' => array(
'arguments' => array('tid' => NULL, 'topics' => NULL, 'sortby' => NULL, 'forum_per_page' => NULL),
'variables' => array('tid' => NULL, 'topics' => NULL, 'sortby' => NULL, 'forum_per_page' => NULL),
),
'forum_icon' => array(
'arguments' => array('new_posts' => NULL, 'num_posts' => 0, 'comment_mode' => 0, 'sticky' => 0),
'variables' => array('new_posts' => NULL, 'num_posts' => 0, 'comment_mode' => 0, 'sticky' => 0),
),
'status_report' => array(
'render element' => 'requirements',
'file' => 'system.admin.inc',
),
'system_date_time_settings' => array(
'render element' => 'form',
'file' => 'system.admin.inc',
),
);
}
@ -960,7 +975,7 @@ function hook_theme($existing, $type, $theme, $path) {
* For example:
* @code
* $theme_registry['user_profile'] = array(
* 'arguments' => array(
* 'variables' => array(
* 'account' => NULL,
* ),
* 'template' => 'modules/user/user-profile',

View File

@ -156,63 +156,65 @@ function system_help($path, $arg) {
function system_theme() {
return array_merge(drupal_common_theme(), array(
'system_themes_form' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
'file' => 'system.admin.inc',
),
'system_settings_form' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
'file' => 'system.admin.inc',
),
'confirm_form' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
),
'system_modules_fieldset' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
'file' => 'system.admin.inc',
),
'system_modules_incompatible' => array(
'arguments' => array('message' => NULL),
'variables' => array('message' => NULL),
'file' => 'system.admin.inc',
),
'system_modules_uninstall' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
'file' => 'system.admin.inc',
),
'status_report' => array(
'arguments' => array('requirements' => NULL),
'render element' => 'requirements',
'file' => 'system.admin.inc',
),
'admin_page' => array(
'arguments' => array('blocks' => NULL),
'variables' => array('blocks' => NULL),
'file' => 'system.admin.inc',
),
'admin_block' => array(
'arguments' => array('block' => NULL),
'variables' => array('block' => NULL),
'file' => 'system.admin.inc',
),
'admin_block_content' => array(
'arguments' => array('content' => NULL),
'variables' => array('content' => NULL),
'file' => 'system.admin.inc',
),
'system_admin_by_module' => array(
'arguments' => array('menu_items' => NULL),
'variables' => array('menu_items' => NULL),
'file' => 'system.admin.inc',
),
'system_powered_by' => array(
'arguments' => NULL,
'variables' => array(),
),
'meta_generator_html' => array(
'arguments' => array('version' => NULL),
'variables' => array('version' => NULL),
),
'meta_generator_header' => array(
'arguments' => array('version' => NULL),
'variables' => array('version' => NULL),
),
'system_compact_link' => array(
'variables' => array(),
),
'system_compact_link' => array(),
'system_run_cron_image' => array(
'arguments' => array('image_path' => NULL),
'variables' => array('image_path' => NULL),
),
'system_date_time_settings' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
'file' => 'system.admin.inc',
),
));
@ -3464,8 +3466,13 @@ function system_preprocess(&$variables, $hook) {
$variables['contextual_links'] = array();
// Determine the primary theme function argument.
$keys = array_keys($hooks[$hook]['arguments']);
$key = $keys[0];
if (isset($hooks[$hook]['variables'])) {
$keys = array_keys($hooks[$hook]['variables']);
$key = $keys[0];
}
else {
$key = $hooks[$hook]['render element'];
}
if (isset($variables[$key])) {
$element = $variables[$key];
}

View File

@ -152,13 +152,13 @@ function taxonomy_field_build_modes($obj_type) {
function taxonomy_theme() {
return array(
'taxonomy_overview_vocabularies' => array(
'arguments' => array('form' => array()),
'render element' => 'form',
),
'taxonomy_overview_terms' => array(
'arguments' => array('form' => array()),
'render element' => 'form',
),
'taxonomy_autocomplete' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
),
);
}

View File

@ -23,7 +23,7 @@ function toolbar_permission() {
*/
function toolbar_theme($existing, $type, $theme, $path) {
$items['toolbar'] = array(
'arguments' => array('toolbar' => array()),
'render element' => 'toolbar',
'template' => 'toolbar',
'path' => drupal_get_path('module', 'toolbar'),
);

View File

@ -183,7 +183,7 @@ function trigger_get_assigned_actions($hook) {
function trigger_theme() {
return array(
'trigger_display' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
'file' => 'trigger.admin.inc',
),
);

View File

@ -245,20 +245,20 @@ function update_manager_access() {
function update_theme() {
return array(
'update_manager_update_form' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
'file' => 'update.manager.inc',
),
'update_last_check' => array(
'arguments' => array('last' => NULL),
'variables' => array('last' => NULL),
),
'update_report' => array(
'arguments' => array('data' => NULL),
'variables' => array('data' => NULL),
),
'update_version' => array(
'arguments' => array('version' => NULL, 'tag' => NULL, 'class' => array()),
'variables' => array('version' => NULL, 'tag' => NULL, 'class' => array()),
),
'update_status_label' => array(
'arguments' => array('status' => NULL),
'variables' => array('status' => NULL),
),
);
}

View File

@ -199,7 +199,7 @@ function theme_update_report($variables) {
break;
default:
$base_themes[] = theme('placeholder', $base_theme);
$base_themes[] = theme('placeholder', array('text' => $base_theme));
}
}
$row .= t('Depends on: !basethemes', array('!basethemes' => implode(', ', $base_themes)));

View File

@ -28,13 +28,13 @@ function upload_help($path, $arg) {
function upload_theme() {
return array(
'upload_attachments' => array(
'arguments' => array('elements' => NULL),
'render element' => 'elements',
),
'upload_form_current' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
),
'upload_form_new' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
),
);
}

View File

@ -36,45 +36,45 @@ function user_module_invoke($type, &$edit, $account, $category = NULL) {
function user_theme() {
return array(
'user_picture' => array(
'arguments' => array('account' => NULL),
'variables' => array('account' => NULL),
'template' => 'user-picture',
),
'user_profile' => array(
'arguments' => array('elements' => NULL),
'render element' => 'elements',
'template' => 'user-profile',
'file' => 'user.pages.inc',
),
'user_profile_category' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
'template' => 'user-profile-category',
'file' => 'user.pages.inc',
),
'user_profile_item' => array(
'arguments' => array('element' => NULL),
'render element' => 'element',
'template' => 'user-profile-item',
'file' => 'user.pages.inc',
),
'user_list' => array(
'arguments' => array('users' => NULL, 'title' => NULL),
'variables' => array('users' => NULL, 'title' => NULL),
),
'user_admin_permissions' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
'file' => 'user.admin.inc',
),
'user_admin_new_role' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
'file' => 'user.admin.inc',
),
'user_filter_form' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
'file' => 'user.admin.inc',
),
'user_filters' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
'file' => 'user.admin.inc',
),
'user_signature' => array(
'arguments' => array('signature' => NULL),
'variables' => array('signature' => NULL),
),
);
}