Commit 684aaa5b authored by alexpott's avatar alexpott

Issue #1961870 by Cottser, foopang, kgoel, shanethehat, tlattimore, c4rl,...

Issue #1961870 by Cottser, foopang, kgoel, shanethehat, tlattimore, c4rl, joelpittet, thedavidmeister: Convert page.tpl.php to Twig.
parent 8ec70c2e
......@@ -1697,8 +1697,8 @@ function watchdog($type, $message, array $variables = NULL, $severity = WATCHDOG
/**
* Sets a message to display to the user.
*
* Messages are stored in a session variable and displayed in page.tpl.php via
* the $messages theme variable.
* Messages are stored in a session variable and displayed in the page template
* via the $messages theme variable.
*
* Example usage:
* @code
......
......@@ -5065,7 +5065,7 @@ function drupal_pre_render_dropbutton($element) {
* A string or array representing the content of a page. The array consists of
* the following keys:
* - #type: Value is always 'page'. This pushes the theming through
* page.tpl.php (required).
* the page template (required).
* - #show_messages: Suppress drupal_get_message() items. Used by Batch
* API (optional).
*
......
......@@ -2852,10 +2852,12 @@ function template_preprocess_html(&$variables) {
}
/**
* Preprocess variables for page.tpl.php
* Prepares variables for the page template.
*
* Most themes utilize their own copy of page.tpl.php. The default is located
* inside "modules/system/page.tpl.php". Look in there for the full list of
* Default template: page.html.twig.
*
* Most themes utilize their own copy of page.html.twig. The default is located
* inside "modules/system/page.html.twig". Look in there for the full list of
* variables.
*
* Uses the arg() function to generate a series of page template suggestions
......@@ -2866,7 +2868,6 @@ function template_preprocess_html(&$variables) {
*
* @see drupal_render_page()
* @see template_process_page()
* @see page.tpl.php
*/
function template_preprocess_page(&$variables) {
$language_interface = language(LANGUAGE_TYPE_INTERFACE);
......@@ -2903,6 +2904,36 @@ function template_preprocess_page(&$variables) {
$variables['site_slogan'] = (theme_get_setting('features.slogan') ? filter_xss_admin($site_config->get('slogan')) : '');
$variables['tabs'] = menu_local_tabs();
// Pass the main menu and secondary menu to the template as render arrays.
if (!empty($variables['main_menu'])) {
$variables['main_menu'] = array(
'#theme' =>'links__system_main_menu',
'#links' => $variables['main_menu'],
'#attributes' => array(
'id' => 'main-menu',
'class' => array('links', 'inline', 'clearfix'),
),
'#heading' => array(
'text' => t('Main menu'),
'class' => array('element-invisible'),
)
);
}
if (!empty($variables['secondary_menu'])) {
$variables['secondary_menu'] = array(
'#theme' =>'links__system_secondary_menu',
'#links' => $variables['secondary_menu'],
'#attributes' => array(
'id' => 'secondary-menu',
'class' => array('links', 'inline', 'clearfix'),
),
'#heading' => array(
'text' => t('Secondary menu'),
'class' => array('element-invisible'),
)
);
}
if ($node = menu_get_object()) {
$variables['node'] = $node;
}
......@@ -2914,13 +2945,12 @@ function template_preprocess_page(&$variables) {
}
/**
* Process variables for page.tpl.php
* Processes variables for page.html.twig.
*
* Perform final addition of variables before passing them into the template.
* To customize these variables, simply set them in an earlier step.
*
* @see template_preprocess_page()
* @see page.tpl.php
*/
function template_process_page(&$variables) {
if (!isset($variables['breadcrumb'])) {
......@@ -2928,7 +2958,10 @@ function template_process_page(&$variables) {
// re-use the cache of an already rendered menu containing the active link
// for the current page.
// @see menu_tree_page_data()
$variables['breadcrumb'] = theme('breadcrumb', array('breadcrumb' => drupal_get_breadcrumb()));
$variables['breadcrumb'] = array(
'#theme' => 'breadcrumb',
'#breadcrumb' => drupal_get_breadcrumb(),
);
}
if (!isset($variables['title'])) {
$variables['title'] = drupal_get_title();
......@@ -2937,7 +2970,7 @@ function template_process_page(&$variables) {
// Generate messages last in order to capture as many as possible for the
// current page.
if (!isset($variables['messages'])) {
$variables['messages'] = $variables['show_messages'] ? theme('status_messages') : '';
$variables['messages'] = $variables['show_messages'] ? array('#theme' => 'status_messages') : '';
}
}
......
<?php
/**
* @file
* Custom theme implementation to display a single Drupal page without
* sidebars. The sidebars are hidden by regions_hidden for this theme, so
* the default page.tpl.php will not work without throwing exceptions.
*/
?>
<div id="page-wrapper"><div id="page">
<div id="header"><div class="section clearfix">
<?php if ($logo): ?>
<a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>" rel="home" id="logo">
<img src="<?php print $logo; ?>" alt="<?php print t('Home'); ?>" />
</a>
<?php endif; ?>
<?php if ($site_name || $site_slogan): ?>
<div id="name-and-slogan">
<?php if ($site_name): ?>
<?php if ($title): ?>
<div id="site-name"><strong>
<a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>" rel="home"><span><?php print $site_name; ?></span></a>
</strong></div>
<?php else: /* Use h1 when the content title is empty */ ?>
<h1 id="site-name">
<a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>" rel="home"><span><?php print $site_name; ?></span></a>
</h1>
<?php endif; ?>
<?php endif; ?>
<?php if ($site_slogan): ?>
<div id="site-slogan"><?php print $site_slogan; ?></div>
<?php endif; ?>
</div> <!-- /#name-and-slogan -->
<?php endif; ?>
<?php print render($page['header']); ?>
</div></div> <!-- /.section, /#header -->
<?php if ($main_menu || $secondary_menu): ?>
<div id="navigation"><div class="section">
<?php print theme('links__system_main_menu', array('links' => $main_menu, 'attributes' => array('id' => 'main-menu', 'class' => array('links', 'inline', 'clearfix')), 'heading' => t('Main menu'))); ?>
<?php print theme('links__system_secondary_menu', array('links' => $secondary_menu, 'attributes' => array('id' => 'secondary-menu', 'class' => array('links', 'inline', 'clearfix')), 'heading' => t('Secondary menu'))); ?>
</div></div> <!-- /.section, /#navigation -->
<?php endif; ?>
<?php if ($breadcrumb): ?>
<div id="breadcrumb"><?php print $breadcrumb; ?></div>
<?php endif; ?>
<?php print $messages; ?>
<div id="main-wrapper"><div id="main" class="clearfix">
<div id="content" class="column"><div class="section">
<?php if ($page['highlighted']): ?><div id="highlighted"><?php print render($page['highlighted']); ?></div><?php endif; ?>
<a id="main-content"></a>
<?php print render($title_prefix); ?>
<?php if ($title): ?><h1 class="title" id="page-title"><?php print $title; ?></h1><?php endif; ?>
<?php print render($title_suffix); ?>
<?php if ($tabs = render($tabs)): ?><div class="tabs"><?php print $tabs; ?></div><?php endif; ?>
<?php print render($page['help']); ?>
<?php if ($action_links): ?><ul class="action-links"><?php print render($action_links); ?></ul><?php endif; ?>
<?php print render($page['content']); ?>
<?php print $feed_icons; ?>
</div></div> <!-- /.section, /#content -->
</div></div> <!-- /#main, /#main-wrapper -->
<div id="footer"><div class="section">
<?php print render($page['footer']); ?>
</div></div> <!-- /.section, /#footer -->
</div></div> <!-- /#page, /#page-wrapper -->
{#
/**
* @file
* Default theme implementation to display a single page.
*
* The doctype, html, head and body tags are not in this template. Instead they
* can be found in the html.html.twig template in this directory.
*
* Available variables:
*
* General utility variables:
* - base_path: The base URL path of the Drupal installation. Will usually be
* "/" unless you have installed Drupal in a sub-directory.
* - is_front: A flag indicating if the current page is the front page.
* - logged_in: A flag indicating if the user is registered and signed in.
* - is_admin: A flag indicating if the user has permission to access
* administration pages.
*
* Site identity:
* - front_page: The URL of the front page. Use this instead of base_path when
* linking to the front page. This includes the language domain or prefix.
* - logo: The url of the logo image, as defined in theme settings.
* - site_name: The name of the site. This is empty when displaying the site
* name has been disabled in the theme settings.
* - site_slogan: The slogan of the site. This is empty when displaying the site
* slogan has been disabled in theme settings.
*
* Navigation:
* - main_menu: The Main menu links for the site, if they have been configured.
* - secondary_menu: The Secondary menu links for the site, if they have been
* configured.
* - breadcrumb: The breadcrumb trail for the current page.
*
* Page content (in order of occurrence in the default page.html.twig):
* - title_prefix: Additional output populated by modules, intended to be
* displayed in front of the main title tag that appears in the template.
* - title: The page title, for use in the actual content.
* - title_suffix: Additional output populated by modules, intended to be
* displayed after the main title tag that appears in the template.
* - messages: Status and error messages. Should be displayed prominently.
* - tabs: Tabs linking to any sub-pages beneath the current page (e.g., the
* view and edit tabs when displaying a node).
* - action_links: Actions local to the page, such as "Add menu" on the menu
* administration interface.
* - feed_icons: All feed icons for the current page.
* - node: Fully loaded node, if there is an automatically-loaded node
* associated with the page and the node ID is the second argument in the
* page's path (e.g. node/12345 and node/12345/revisions, but not
* comment/reply/12345).
*
* Regions:
* - page.header: Items for the header region.
* - page.highlighted: Items for the highlighted content region.
* - page.help: Dynamic help text, mostly for admin pages.
* - page.content: The main content of the current page.
* - page.sidebar_first: Items for the first sidebar.
* - page.sidebar_second: Items for the second sidebar.
* - page.footer: Items for the footer region.
*
* @see template_preprocess()
* @see template_preprocess_page()
* @see template_process()
* @see template_process_page()
* @see html.html.twig
*
* @ingroup themeable
*/
#}
<div id="page">
<header id="header" role="banner" class="clearfix">
{% if logo %}
<a href="{{ front_page }}" title="{{ 'Home'|t }}" rel="home" id="logo">
<img src="{{ logo }}" alt="{{ 'Home'|t }}"/>
</a>
{% endif %}
{% if site_name or site_slogan %}
<div id="name-and-slogan">
{% if site_name %}
{% if title %}
<p id="site-name"><strong>
<a href="{{ front_page }}" title="{{ 'Home'|t }}" rel="home">{{ site_name }}</a>
</strong></p>
{# Use h1 when the content title is empty #}
{% else %}
<h1 id="site-name">
<a href="{{ front_page }}" title="{{ 'Home'|t }}" rel="home">{{ site_name }}</a>
</h1>
{% endif %}
{% endif %}
{% if site_slogan %}
<p id="site-slogan">{{ site_slogan }}</p>
{% endif %}
</div><!-- /#name-and-slogan -->
{% endif %}
{{ page.header }}
</header>
{% if main_menu or secondary_menu %}
<nav role="navigation">
{{ main_menu }}
{{ secondary_menu }}
</nav>
{% endif %}
{{ breadcrumb }}
{% if messages %}
<div id="messages">{{ messages }}</div>
{% endif %}
<div id="main" role="main" class="clearfix">
<a id="main-content"></a>
<div id="content" class="column">
{% if page.highlighted %}<div id="highlighted">{{ page.highlighted }}</div>{% endif %}
{{ title_prefix }}
{% if title %}<h1 class="title" id="page-title">{{ title }}</h1>{% endif %}
{{ title_suffix }}
{% if tabs %}<div class="tabs">{{ tabs }}</div>{% endif %}
{{ page.help }}
{% if action_links %}<ul class="action-links">{{ action_links }}</ul>{% endif %}
{{ page.content }}
{{ feed_icons }}
</div><!-- /#content -->
{% if page.sidebar_first %}
<div id="sidebar-first" class="column sidebar">
{{ page.sidebar_first }}
</div><!-- /#sidebar-first -->
{% endif %}
{% if page.sidebar_second %}
<div id="sidebar-second" class="column sidebar">
{{ page.sidebar_second }}
</div><!-- /#sidebar-second -->
{% endif %}
</div><!-- /#main -->
<footer id="footer" role="contentinfo">
{{ page.footer }}
</footer>
</div><!-- /#page -->
<?php
/**
* @file
* Default theme implementation to display a single Drupal page.
*
* The doctype, html, head and body tags are not in this template. Instead they
* can be found in the html.tpl.php template in this directory.
*
* Available variables:
*
* General utility variables:
* - $base_path: The base URL path of the Drupal installation. At the very
* least, this will always default to /.
* - $directory: The directory the template is located in, e.g. modules/system
* or themes/bartik.
* - $is_front: TRUE if the current page is the front page.
* - $logged_in: TRUE if the user is registered and signed in.
* - $is_admin: TRUE if the user has permission to access administration pages.
*
* Site identity:
* - $front_page: The URL of the front page. Use this instead of $base_path,
* when linking to the front page. This includes the language domain or
* prefix.
* - $logo: The path to the logo image, as defined in theme configuration.
* - $site_name: The name of the site, empty when display has been disabled
* in theme settings.
* - $site_slogan: The slogan of the site, empty when display has been disabled
* in theme settings.
*
* Navigation:
* - $main_menu (array): An array containing the Main menu links for the
* site, if they have been configured.
* - $secondary_menu (array): An array containing the Secondary menu links for
* the site, if they have been configured.
* - $breadcrumb: The breadcrumb trail for the current page.
*
* Page content (in order of occurrence in the default page.tpl.php):
* - $title_prefix (array): An array containing additional output populated by
* modules, intended to be displayed in front of the main title tag that
* appears in the template.
* - $title: The page title, for use in the actual HTML content.
* - $title_suffix (array): An array containing additional output populated by
* modules, intended to be displayed after the main title tag that appears in
* the template.
* - $messages: HTML for status and error messages. Should be displayed
* prominently.
* - $tabs (array): Tabs linking to any sub-pages beneath the current page
* (e.g., the view and edit tabs when displaying a node).
* - $action_links (array): Actions local to the page, such as 'Add menu' on the
* menu administration interface.
* - $feed_icons: A string of all feed icons for the current page.
* - $node: The node entity, if there is an automatically-loaded node
* associated with the page, and the node ID is the second argument
* in the page's path (e.g. node/12345 and node/12345/revisions, but not
* comment/reply/12345).
*
* Regions:
* - $page['help']: Dynamic help text, mostly for admin pages.
* - $page['highlighted']: Items for the highlighted content region.
* - $page['content']: The main content of the current page.
* - $page['sidebar_first']: Items for the first sidebar.
* - $page['sidebar_second']: Items for the second sidebar.
* - $page['header']: Items for the header region.
* - $page['footer']: Items for the footer region.
*
* @see template_preprocess()
* @see template_preprocess_page()
* @see template_process()
* @see html.tpl.php
*
* @ingroup themeable
*/
?>
<div id="page">
<header id="header" role="banner" class="clearfix">
<?php if ($logo): ?>
<a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>" rel="home" id="logo">
<img src="<?php print $logo; ?>" alt="<?php print t('Home'); ?>" />
</a>
<?php endif; ?>
<?php if ($site_name || $site_slogan): ?>
<div id="name-and-slogan">
<?php if ($site_name): ?>
<?php if ($title): ?>
<p id="site-name"><strong>
<a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>" rel="home"><?php print $site_name; ?></a>
</strong></p>
<?php else: /* Use h1 when the content title is empty */ ?>
<h1 id="site-name">
<a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>" rel="home"><?php print $site_name; ?></a>
</h1>
<?php endif; ?>
<?php endif; ?>
<?php if ($site_slogan): ?>
<p id="site-slogan"><?php print $site_slogan; ?></p>
<?php endif; ?>
</div><!-- #name-and-slogan -->
<?php endif; ?>
<?php print render($page['header']); ?>
</header>
<?php if ($main_menu || $secondary_menu): ?>
<nav role="navigation">
<?php print theme('links__system_main_menu', array('links' => $main_menu, 'attributes' => array('id' => 'main-menu', 'class' => array('links', 'inline', 'clearfix')), 'heading' => array('text' => t('Main menu'), 'class' => array('element-invisible')))); ?>
<?php print theme('links__system_secondary_menu', array('links' => $secondary_menu, 'attributes' => array('id' => 'secondary-menu', 'class' => array('links', 'inline', 'clearfix')), 'heading' => array('text' => t('Secondary menu'), 'class' => array('element-invisible')))); ?>
</nav>
<?php endif; ?>
<?php print $breadcrumb; ?>
<?php if ($messages): ?>
<div id="messages"><?php print $messages; ?></div>
<?php endif; ?>
<div id="main" role="main" class="clearfix">
<a id="main-content"></a>
<div id="content" class="column">
<?php if ($page['highlighted']): ?><div id="highlighted"><?php print render($page['highlighted']); ?></div><?php endif; ?>
<?php print render($title_prefix); ?>
<?php if ($title): ?><h1 class="title" id="page-title"><?php print $title; ?></h1><?php endif; ?>
<?php print render($title_suffix); ?>
<?php if ($tabs): ?><div class="tabs"><?php print render($tabs); ?></div><?php endif; ?>
<?php print render($page['help']); ?>
<?php if ($action_links): ?><ul class="action-links"><?php print render($action_links); ?></ul><?php endif; ?>
<?php print render($page['content']); ?>
<?php print $feed_icons; ?>
</div>
<?php if ($page['sidebar_first']): ?>
<div id="sidebar-first" class="column sidebar">
<?php print render($page['sidebar_first']); ?>
</div><!-- #sidebar-first -->
<?php endif; ?>
<?php if ($page['sidebar_second']): ?>
<div id="sidebar-second" class="column sidebar">
<?php print render($page['sidebar_second']); ?>
</div><!-- #sidebar-second -->
<?php endif; ?>
</div><!-- #main -->
<footer id="footer" role="contentinfo">
<?php print render($page['footer']); ?>
</footer>
</div><!-- #page -->
......@@ -40,7 +40,21 @@ function bartik_process_html(&$variables) {
}
/**
* Implements hook_process_HOOK() for page.tpl.php.
* Implements hook_preprocess_HOOK() for page.html.twig.
*/
function bartik_preprocess_page(&$variables) {
// Pass the main menu and secondary menu to the template as render arrays.
if (!empty($variables['main_menu'])) {
$variables['main_menu']['#attributes']['id'] = 'main-menu-links';
$variables['main_menu']['#attributes']['class'] = array('links', 'clearfix');
}
if (!empty($variables['secondary_menu'])) {
$variables['secondary_menu']['#attributes']['id'] = 'secondary-menu-links';
}
}
/**
* Implements hook_process_HOOK() for page.html.twig.
*/
function bartik_process_page(&$variables) {
$site_config = config('system.site');
......
{#
/**
* @file
* Bartik's theme implementation to display a single page.
*
* The doctype, html, head and body tags are not in this template. Instead they
* can be found in the html.html.twig template normally located in the
* core/modules/system directory.
*
* Available variables:
*
* General utility variables:
* - base_path: The base URL path of the Drupal installation. Will usually be
* "/" unless you have installed Drupal in a sub-directory.
* - is_front: A flag indicating if the current page is the front page.
* - logged_in: A flag indicating if the user is registered and signed in.
* - is_admin: A flag indicating if the user has permission to access
* administration pages.
*
* Site identity:
* - front_page: The URL of the front page. Use this instead of base_path when
* linking to the front page. This includes the language domain or prefix.
* - logo: The url of the logo image, as defined in theme settings.
* - site_name: The name of the site. This is empty when displaying the site
* name has been disabled in the theme settings.
* - site_slogan: The slogan of the site. This is empty when displaying the site
* slogan has been disabled in theme settings.
* - hide_site_name: A flag indicating if the site name has been toggled off on
* the theme settings page. If hidden, the "element-invisible" class is added
* to make the site name visually hidden, but still accessible.
* - hide_site_slogan: A flag indicating if the site slogan has been toggled off
* on the theme settings page. If hidden, the "element-invisible" class is
* added to make the site slogan visually hidden, but still accessible.
*
* Navigation:
* - main_menu: The Main menu links for the site, if they have been configured.
* - secondary_menu: The Secondary menu links for the site, if they have been
* configured.
* - breadcrumb: The breadcrumb trail for the current page.
*
* Page content (in order of occurrence in the default page.html.twig):
* - title_prefix: Additional output populated by modules, intended to be
* displayed in front of the main title tag that appears in the template.
* - title: The page title, for use in the actual content.
* - title_suffix: Additional output populated by modules, intended to be
* displayed after the main title tag that appears in the template.
* - messages: Status and error messages. Should be displayed prominently.
* - tabs: Tabs linking to any sub-pages beneath the current page (e.g., the
* view and edit tabs when displaying a node).
* - action_links: Actions local to the page, such as "Add menu" on the menu
* administration interface.
* - feed_icons: All feed icons for the current page.
* - node: Fully loaded node, if there is an automatically-loaded node
* associated with the page and the node ID is the second argument in the
* page's path (e.g. node/12345 and node/12345/revisions, but not
* comment/reply/12345).
*
* Regions:
* - page.header: Items for the header region.
* - page.featured: Items for the featured region.
* - page.highlighted: Items for the highlighted content region.
* - page.help: Dynamic help text, mostly for admin pages.
* - page.content: The main content of the current page.
* - page.sidebar_first: Items for the first sidebar.
* - page.sidebar_second: Items for the second sidebar.
* - page.triptych_first: Items for the first triptych.
* - page.triptych_middle: Items for the middle triptych.
* - page.triptych_last: Items for the last triptych.
* - page.footer_firstcolumn: Items for the first footer column.
* - page.footer_secondcolumn: Items for the second footer column.
* - page.footer_thirdcolumn: Items for the third footer column.
* - page.footer_fourthcolumn: Items for the fourth footer column.
* - page.footer: Items for the footer region.
*
* @see template_preprocess()
* @see template_preprocess_page()
* @see bartik_preprocess_page()
* @see template_process()
* @see template_process_page()
* @see bartik_process_page()
* @see html.html.twig
*
* @ingroup themeable
*/
#}
<div id="page-wrapper"><div id="page">
<header id="header" class="{{ secondary_menu ? 'with-secondary-menu' : 'without-secondary-menu' }}" role="banner"><div class="section clearfix">
{% if secondary_menu %}
<nav id="secondary-menu" class="navigation" role="navigation">
{{ secondary_menu }}
</nav> <!-- /#secondary-menu -->
{% endif %}
{% if logo %}
<a href="{{ front_page }}" title="{{ 'Home'|t }}" rel="home" id="logo">
<img src="{{ logo }}" alt="{{ 'Home'|t }}" />
</a>
{% endif %}
{% if site_name or site_slogan %}
<div id="name-and-slogan"{% if hide_site_name and hide_site_slogan %} class="element-invisible"{% endif %}>
{% if site_name %}
{% if title %}
<div id="site-name"{% if hide_site_name %} class="element-invisible"{% endif %}>
<strong>
<a href="{{ front_page }}" title="{{ 'Home'|t }}" rel="home"><span>{{ site_name }}</span></a>
</strong>
</div>
{# Use h1 when the content title is empty #}
{% else %}
<h1 id="site-name"{% if hide_site_name %} class="element-invisible" {% endif %}>
<a href="{{ front_page }}" title="{{ 'Home'|t }}" rel="home"><span>{{ site_name }}</span></a>
</h1>
{% endif %}
{% endif %}
{% if site_slogan %}
<div id="site-slogan"{% if hide_site_slogan %} class="element-invisible"{% endif %}>
{{ site_slogan }}
</div>
{% endif %}
</div><!-- /#name-and-slogan -->
{% endif %}
{{ page.header }}
{% if main_menu %}
<nav id ="main-menu" class="navigation" role="navigation">
{{ main_menu }}
</nav> <!-- /#main-menu -->
{% endif %}
</div></header> <!-- /.section, /#header-->
{% if messages %}
<div id="messages"><div class="section clearfix">
{{ messages }}
</div></div> <!-- /.section, /#messages -->
{% endif %}
{% if page.featured %}
<aside id="featured"><div class="section clearfix">