' . t('You are here') . ''; return $heading . ''; } } // Otherwise, return an empty string. return ''; } /** * Duplicate of theme_menu_local_tasks() but adds clearfix to tabs. */ function zen_menu_local_tasks(&$variables) { $output = ''; if (!empty($variables['primary'])) { $variables['primary']['#prefix'] = '

' . t('Primary tabs') . '

'; $variables['primary']['#prefix'] .= ''; $output .= drupal_render($variables['primary']); } if (!empty($variables['secondary'])) { $variables['secondary']['#prefix'] = '

' . t('Secondary tabs') . '

'; $variables['secondary']['#prefix'] .= ''; $output .= drupal_render($variables['secondary']); } return $output; } /** * Override or insert variables into theme_menu_local_task(). */ function zen_preprocess_menu_local_task(&$variables) { $link =& $variables['element']['#link']; // If the link does not contain HTML already, check_plain() it now. // After we set 'html'=TRUE the link will not be sanitized by l(). if (empty($link['localized_options']['html'])) { $link['title'] = check_plain($link['title']); } $link['localized_options']['html'] = TRUE; $link['title'] = '' . $link['title'] . ''; } /** * Adds conditional CSS from the .info file. * * Copy of conditional_styles_preprocess_html(). */ function zen_add_conditional_styles() { // Make a list of base themes and the current theme. $themes = $GLOBALS['base_theme_info']; $themes[] = $GLOBALS['theme_info']; foreach (array_keys($themes) as $key) { $theme_path = dirname($themes[$key]->filename) . '/'; if (isset($themes[$key]->info['stylesheets-conditional'])) { foreach (array_keys($themes[$key]->info['stylesheets-conditional']) as $condition) { foreach (array_keys($themes[$key]->info['stylesheets-conditional'][$condition]) as $media) { foreach ($themes[$key]->info['stylesheets-conditional'][$condition][$media] as $stylesheet) { // Add each conditional stylesheet. drupal_add_css( $theme_path . $stylesheet, array( 'group' => CSS_THEME, 'browsers' => array( 'IE' => $condition, '!IE' => FALSE, ), 'every_page' => TRUE, ) ); } } } } } } /** * Override or insert variables into the html template. * * @param $vars * An array of variables to pass to the theme template. * @param $hook * The name of the template being rendered ("html" in this case.) */ function zen_preprocess_html(&$vars, $hook) { // If the user is silly and enables Zen as the theme, add some styles. if ($GLOBALS['theme'] == 'zen') { include_once './' . drupal_get_path('theme', 'zen') . '/zen-internals/template.zen.inc'; _zen_preprocess_html($vars, $hook); } elseif (!module_exists('conditional_styles')) { zen_add_conditional_styles(); } // Classes for body element. Allows advanced theming based on context // (home page, node of certain type, etc.) if (!$vars['is_front']) { // Add unique class for each page. $path = drupal_get_path_alias($_GET['q']); // Add unique class for each website section. list($section, ) = explode('/', $path, 2); if (arg(0) == 'node') { if (arg(1) == 'add') { $section = 'node-add'; } elseif (is_numeric(arg(1)) && (arg(2) == 'edit' || arg(2) == 'delete')) { $section = 'node-' . arg(2); } } $vars['classes_array'][] = drupal_html_class('section-' . $section); } if (theme_get_setting('zen_wireframes')) { $vars['classes_array'][] = 'with-wireframes'; // Optionally add the wireframes style. } // Store the menu item since it has some useful information. $vars['menu_item'] = menu_get_item(); switch ($vars['menu_item']['page_callback']) { case 'views_page': // Is this a Views page? $vars['classes_array'][] = 'page-views'; break; case 'page_manager_page_execute': case 'page_manager_node_view': case 'page_manager_contact_site': // Is this a Panels page? $vars['classes_array'][] = 'page-panels'; break; } } /** * Override or insert variables into the maintenance page template. * * @param $vars * An array of variables to pass to the theme template. * @param $hook * The name of the template being rendered ("maintenance_page" in this case.) */ function zen_preprocess_maintenance_page(&$vars, $hook) { // If Zen is the maintenance theme, add some styles. if ($GLOBALS['theme'] == 'zen') { include_once './' . drupal_get_path('theme', 'zen') . '/zen-internals/template.zen.inc'; _zen_preprocess_html($vars, $hook); } elseif (!module_exists('conditional_styles')) { zen_add_conditional_styles(); } } /** * Override or insert variables into the node templates. * * @param $vars * An array of variables to pass to the theme template. * @param $hook * The name of the template being rendered ("node" in this case.) */ function zen_preprocess_node(&$vars, $hook) { if (isset($vars['node_title'])) { // $node_title is idiotic. Fixed in Alpha 4. $vars['title'] = $vars['node_title']; } // Special classes for nodes. // Class for node type: "node-type-page", "node-type-story", "node-type-my-custom-type", etc. $vars['classes_array'][] = drupal_html_class('node-type-' . $vars['type']); if ($vars['promote']) { $vars['classes_array'][] = 'node-promoted'; } if ($vars['sticky']) { $vars['classes_array'][] = 'node-sticky'; } if (!$vars['status']) { $vars['classes_array'][] = 'node-unpublished'; $vars['unpublished'] = TRUE; } else { $vars['unpublished'] = FALSE; } if ($vars['uid'] && $vars['uid'] == $GLOBALS['user']->uid) { $vars['classes_array'][] = 'node-by-viewer'; // Node is authored by current user. } if ($vars['teaser']) { $vars['classes_array'][] = 'node-teaser'; // Node is displayed as teaser. } if (isset($vars['preview'])) { $vars['classes_array'][] = 'node-preview'; } $vars['title_attributes_array']['class'][] = 'node-title'; } /** * Override or insert variables into the comment templates. * * @param $vars * An array of variables to pass to the theme template. * @param $hook * The name of the template being rendered ("comment" in this case.) */ function zen_preprocess_comment(&$vars, $hook) { // If comment subjects are disabled, don't display them. if (variable_get('comment_subject_field_' . $vars['node']->type, 1) == 0) { $vars['title'] = ''; } // Zebra striping. if ($vars['id'] == 1) { $vars['classes_array'][] = 'first'; } if ($vars['id'] == $vars['node']->comment_count) { $vars['classes_array'][] = 'last'; } $vars['classes_array'][] = $vars['zebra']; $vars['title_attributes_array']['class'][] = 'comment-title'; } /** * Preprocess variables for region.tpl.php * * Prepare the values passed to the theme_region function to be passed into a * pluggable template engine. Uses the region name to generate a template file * suggestions. If none are found, the default region.tpl.php is used. * * @see region.tpl.php */ function zen_preprocess_region(&$vars, $hook) { // Sidebar regions get some extra classes and a common template suggestion. if (strpos($vars['region'], 'sidebar_') === 0) { $vars['classes_array'][] = 'column'; $vars['classes_array'][] = 'sidebar'; $vars['theme_hook_suggestions'][] = 'region__sidebar'; // Allow a region-specific template to override Zen's region--sidebar. $vars['theme_hook_suggestions'][] = 'region__' . $vars['region']; } } /** * Override or insert variables into the block templates. * * @param $vars * An array of variables to pass to the theme template. * @param $hook * The name of the template being rendered ("block" in this case.) */ function zen_preprocess_block(&$vars, $hook) { // Special classes for blocks. $vars['classes_array'][] = 'region-' . $vars['block_zebra']; $vars['classes_array'][] = 'region-count-' . $vars['block_id']; $vars['title_attributes_array']['class'][] = 'block-title'; } /** * Override or insert variables into the block templates. * * @param $vars * An array of variables to pass to the theme template. * @param $hook * The name of the template being rendered ("block" in this case.) */ function zen_process_block(&$vars, $hook) { // Drupal 7 should use a $title variable instead of $block->subject. $vars['title'] = $vars['block']->subject; }