\n") { $vars['help'] = ''; } // Classes for body element. Allows advanced theming based on context // (home page, node of certain type, etc.) $body_classes = array($vars['body_classes']); if (user_access('administer blocks')) { $body_classes[] = 'admin'; } if (theme_get_setting('basic_wireframe')) { $body_classes[] = 'with-wireframes'; // Optionally add the wireframes style. } if (!empty($vars['primary_links']) or !empty($vars['secondary_links'])) { $body_classes[] = 'with-navigation'; } if (!empty($vars['secondary_links'])) { $body_classes[] = 'with-secondary'; } if (module_exists('taxonomy') && $vars['node']->nid) { foreach (taxonomy_node_get_terms($vars['node']) as $term) { $body_classes[] = 'tax-' . eregi_replace('[^a-z0-9]', '-', $term->name); } } if (!$vars['is_front']) { // Add unique classes for each page and website section $path = drupal_get_path_alias($_GET['q']); list($section, ) = explode('/', $path, 2); $body_classes[] = basic_id_safe('page-'. $path); $body_classes[] = basic_id_safe('section-'. $section); if (arg(0) == 'node') { if (arg(1) == 'add') { if ($section == 'node') { array_pop($body_classes); // Remove 'section-node' } $body_classes[] = 'section-node-add'; // Add 'section-node-add' } elseif (is_numeric(arg(1)) && (arg(2) == 'edit' || arg(2) == 'delete')) { if ($section == 'node') { array_pop($body_classes); // Remove 'section-node' } $body_classes[] = 'section-node-'. arg(2); // Add 'section-node-edit' or 'section-node-delete' } } } /* // Check what the user's browser is and add it as a body class // DEACTIVATED - Only works if page cache is deactivated $user_agent = $_SERVER['HTTP_USER_AGENT']; if($user_agent) { if (strpos($user_agent, 'MSIE')) { $body_classes[] = 'browser-ie'; } else if (strpos($user_agent, 'MSIE 6.0')) { $body_classes[] = 'browser-ie6'; } else if (strpos($user_agent, 'MSIE 7.0')) { $body_classes[] = 'browser-ie7'; } else if (strpos($user_agent, 'MSIE 8.0')) { $body_classes[] = 'browser-ie8'; } else if (strpos($user_agent, 'Firefox/2')) { $body_classes[] = 'browser-firefox2'; } else if (strpos($user_agent, 'Firefox/3')) { $body_classes[] = 'browser-firefox3'; }else if (strpos($user_agent, 'Safari')) { $body_classes[] = 'browser-safari'; } else if (strpos($user_agent, 'Opera')) { $body_classes[] = 'browser-opera'; } } /* Add template suggestions based on content type * You can use a different page template depending on the * content type or the node ID * For example, if you wish to have a different page template * for the story content type, just create a page template called * page-type-story.tpl.php * For a specific node, use the node ID in the name of the page template * like this : page-node-22.tpl.php (if the node ID is 22) */ if ($vars['node']->type != "") { $vars['template_files'][] = "page-type-" . $vars['node']->type; } if ($vars['node']->nid != "") { $vars['template_files'][] = "page-node-" . $vars['node']->nid; } $vars['body_classes'] = implode(' ', $body_classes); // Concatenate with spaces } /* * This function creates the NODES classes, like 'node-unpublished' for nodes * that are not published, or 'node-mine' for node posted by the connected user... * * @param $vars * A sequential array of variables to pass to the theme template. * @param $hook * The name of the theme function being called ("node" in this case.) */ function basic_preprocess_node(&$vars, $hook) { // Special classes for nodes $classes = array('node'); if ($vars['sticky']) { $classes[] = 'sticky'; } // support for Skinr Module if (module_exists('skinr')) { $classes[] = $vars['skinr']; } if (!$vars['status']) { $classes[] = 'node-unpublished'; $vars['unpublished'] = TRUE; } else { $vars['unpublished'] = FALSE; } if ($vars['uid'] && $vars['uid'] == $GLOBALS['user']->uid) { $classes[] = 'node-mine'; // Node is authored by current user. } if ($vars['teaser']) { $classes[] = 'node-teaser'; // Node is displayed as teaser. } $classes[] = 'clearfix'; // Class for node type: "node-type-page", "node-type-story", "node-type-my-custom-type", etc. $classes[] = basic_id_safe('node-type-' . $vars['type']); $vars['classes'] = implode(' ', $classes); // Concatenate with spaces } function basic_preprocess_comment_wrapper(&$vars) { $classes = array(); $classes[] = 'comment-wrapper'; // Provide skinr support. if (module_exists('skinr')) { $classes[] = $vars['skinr']; } $vars['classes'] = implode(' ', $classes); } /* * This function create the EDIT LINKS for blocks and menus blocks. * When overing a block (except in IE6), some links appear to edit * or configure the block. You can then edit the block, and once you are * done, brought back to the first page. * * @param $vars * A sequential array of variables to pass to the theme template. * @param $hook * The name of the theme function being called ("block" in this case.) */ function basic_preprocess_block(&$vars, $hook) { $block = $vars['block']; // special block classes $classes = array('block'); $classes[] = basic_id_safe('block-' . $vars['block']->module); $classes[] = basic_id_safe('block-' . $vars['block']->region); $classes[] = basic_id_safe('block-id-' . $vars['block']->bid); $classes[] = 'clearfix'; // support for Skinr Module if (module_exists('skinr')) { $classes[] = $vars['skinr']; } $vars['block_classes'] = implode(' ', $classes); // Concatenate with spaces if (theme_get_setting('basic_block_editing') && user_access('administer blocks')) { // Display 'edit block' for custom blocks. if ($block->module == 'block') { $edit_links[] = l('' . t('edit block') . '', 'admin/build/block/configure/' . $block->module . '/' . $block->delta, array( 'attributes' => array( 'title' => t('edit the content of this block'), 'class' => 'block-edit', ), 'query' => drupal_get_destination(), 'html' => TRUE, ) ); } // Display 'configure' for other blocks. else { $edit_links[] = l('' . t('configure') . '', 'admin/build/block/configure/' . $block->module . '/' . $block->delta, array( 'attributes' => array( 'title' => t('configure this block'), 'class' => 'block-config', ), 'query' => drupal_get_destination(), 'html' => TRUE, ) ); } // Display 'edit menu' for Menu blocks. if (($block->module == 'menu' || ($block->module == 'user' && $block->delta == 1)) && user_access('administer menu')) { $menu_name = ($block->module == 'user') ? 'navigation' : $block->delta; $edit_links[] = l('' . t('edit menu') . '', 'admin/build/menu-customize/' . $menu_name, array( 'attributes' => array( 'title' => t('edit the menu that defines this block'), 'class' => 'block-edit-menu', ), 'query' => drupal_get_destination(), 'html' => TRUE, ) ); } // Display 'edit menu' for Menu block blocks. elseif ($block->module == 'menu_block' && user_access('administer menu')) { list($menu_name, ) = split(':', variable_get("menu_block_{$block->delta}_parent", 'navigation:0')); $edit_links[] = l('' . t('edit menu') . '', 'admin/build/menu-customize/' . $menu_name, array( 'attributes' => array( 'title' => t('edit the menu that defines this block'), 'class' => 'block-edit-menu', ), 'query' => drupal_get_destination(), 'html' => TRUE, ) ); } $vars['edit_links_array'] = $edit_links; $vars['edit_links'] = '
' . implode(' ', $edit_links) . '
'; } } /* * Override or insert PHPTemplate 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 ("comment" in this case.) */ function basic_preprocess_comment(&$vars, $hook) { // Add an "unpublished" flag. $vars['unpublished'] = ($vars['comment']->status == COMMENT_NOT_PUBLISHED); // If comment subjects are disabled, don't display them. if (variable_get('comment_subject_field_' . $vars['node']->type, 1) == 0) { $vars['title'] = ''; } // Special classes for comments. $classes = array('comment'); if ($vars['comment']->new) { $classes[] = 'comment-new'; } $classes[] = $vars['status']; $classes[] = $vars['zebra']; if ($vars['id'] == 1) { $classes[] = 'first'; } if ($vars['id'] == $vars['node']->comment_count) { $classes[] = 'last'; } if ($vars['comment']->uid == 0) { // Comment is by an anonymous user. $classes[] = 'comment-by-anon'; } else { if ($vars['comment']->uid == $vars['node']->uid) { // Comment is by the node author. $classes[] = 'comment-by-author'; } if ($vars['comment']->uid == $GLOBALS['user']->uid) { // Comment was posted by current user. $classes[] = 'comment-mine'; } } $vars['classes'] = implode(' ', $classes); } /* * Customize the PRIMARY and SECONDARY LINKS, to allow the admin tabs to work on all browsers * An implementation of theme_menu_item_link() * * @param $link * array The menu item to render. * @return * string The rendered menu item. */ function basic_menu_item_link($link) { if (empty($link['localized_options'])) { $link['localized_options'] = array(); } // If an item is a LOCAL TASK, render it as a tab if ($link['type'] & MENU_IS_LOCAL_TASK) { $link['title'] = '' . check_plain($link['title']) . ''; $link['localized_options']['html'] = TRUE; } return l($link['title'], $link['href'], $link['localized_options']); } /* * Duplicate of theme_menu_local_tasks() but adds clear-block to tabs. */ function basic_menu_local_tasks() { $output = ''; if ($primary = menu_primary_local_tasks()) { if(menu_secondary_local_tasks()) { $output .= ''; } else { $output .= ''; } } if ($secondary = menu_secondary_local_tasks()) { $output .= ''; } return $output; } /* * Add custom classes to menu item */ function basic_menu_item($link, $has_children, $menu = '', $in_active_trail = FALSE, $extra_class = NULL) { $class = ($menu ? 'expanded' : ($has_children ? 'collapsed' : 'leaf')); if (!empty($extra_class)) { $class .= ' '. $extra_class; } if ($in_active_trail) { $class .= ' active-trail'; } #New line added to get unique classes for each menu item $css_class = basic_id_safe(str_replace(' ', '_', strip_tags($link))); return '
  • ' . $link . $menu ."
  • \n"; } /* * Converts a string to a suitable html ID attribute. * * http://www.w3.org/TR/html4/struct/global.html#h-7.5.2 specifies what makes a * valid ID attribute in HTML. This function: * * - Ensure an ID starts with an alpha character by optionally adding an 'n'. * - Replaces any character except A-Z, numbers, and underscores with dashes. * - Converts entire string to lowercase. * * @param $string * The string * @return * The converted string */ function basic_id_safe($string) { // Replace with dashes anything that isn't A-Z, numbers, dashes, or underscores. $string = strtolower(preg_replace('/[^a-zA-Z0-9_-]+/', '-', $string)); // If the first character is not a-z, add 'n' in front. if (!ctype_lower($string{0})) { // Don't use ctype_alpha since its locale aware. $string = 'id'. $string; } return $string; } /** * Return a themed breadcrumb trail. * * @param $breadcrumb * An array containing the breadcrumb links. * @return * A string containing the breadcrumb output. */ function basic_breadcrumb($breadcrumb) { // Determine if we are to display the breadcrumb. $show_breadcrumb = theme_get_setting('basic_breadcrumb'); if ($show_breadcrumb == 'yes' || $show_breadcrumb == 'admin' && arg(0) == 'admin') { // Optionally get rid of the homepage link. $show_breadcrumb_home = theme_get_setting('basic_breadcrumb_home'); if (!$show_breadcrumb_home) { array_shift($breadcrumb); } // Return the breadcrumb with separators. if (!empty($breadcrumb)) { $breadcrumb_separator = theme_get_setting('basic_breadcrumb_separator'); $trailing_separator = $title = ''; if (theme_get_setting('basic_breadcrumb_title')) { if ($title = drupal_get_title()) { $trailing_separator = $breadcrumb_separator; } } elseif (theme_get_setting('basic_breadcrumb_trailing')) { $trailing_separator = $breadcrumb_separator; } return '"; } } // Otherwise, return an empty string. return ''; }