Overriding Drupal 7 Theme functions

903 views Asked by At

I am new to Drupal as well as Drupal theme development. After learning how to override drupal template, I wanted to know how to override drupal 7 theme function. From the node Using the theme layer, the following things I have learned :

  1. For every hook in a module, we need to register a hook function
  2. Im plementation is 'template' file if it is defined in return array of the function. Otherwiaw implementation is through function.

Now following the book A definative guide to Drupal 7, to override a theme function 1. Copy - paste the theme function to my theme's template.php file 2. Change the beginning of filename from theme_ to yourtheme_ 3. Save To give example, it overrides the following function :

function theme_more_link($variables) {
  return '<div class="more-link">' . l(t('More'), $variables['url'], array('attributes' => array('title' => $variables['title']))) . '</div>';
}

Now if I want to override the theme function comment_help() in comment.module:

function comment_help($path, $arg) {
  switch ($path) {
    case 'admin/help#comment':
      $output = '<h3>' . t('About') . '</h3>';
      $output .= '<p>' . t('The Comment module allows users to comment on site content, set commenting defaults and permissions, and moderate comments. For more information, see the online handbook entry for <a href="@comment">Comment module</a>.', array('@comment' => 'http://drupal.org/documentation/modules/comment/')) . '</p>';
      $output .= '<h3>' . t('Uses') . '</h3>';
      $output .= '<dl>';
      $output .= '<dt>' . t('Default and custom settings') . '</dt>';
      $output .= '<dd>' . t("Each <a href='@content-type'>content type</a> can have its own default comment settings configured as: <em>Open</em> to allow new comments, <em>Hidden</em> to hide existing comments and prevent new comments, or <em>Closed</em> to view existing comments, but prevent new comments. These defaults will apply to all new content created (changes to the settings on existing content must be done manually). Other comment settings can also be customized per content type, and can be overridden for any given item of content. When a comment has no replies, it remains editable by its author, as long as the author has a user account and is logged in.", array('@content-type' => url('admin/structure/types'))) . '</dd>';
      $output .= '<dt>' . t('Comment approval') . '</dt>';
      $output .= '<dd>' . t("Comments from users who have the <em>Skip comment approval</em> permission are published immediately. All other comments are placed in the <a href='@comment-approval'>Unapproved comments</a> queue, until a user who has permission to <em>Administer comments</em> publishes or deletes them. Published comments can be bulk managed on the <a href='@admin-comment'>Published comments</a> administration page.", array('@comment-approval' => url('admin/content/comment/approval'), '@admin-comment' => url('admin/content/comment'))) . '</dd>';
      $output .= '</dl>';
      return $output;
  }
}

How can I do it? Its name does not starts from theme_.

1

There are 1 answers

1
TheodorosPloumis On BEST ANSWER

The core comment module is uging hook_help function. You have to use the same function in your custom module. Notice that you should first clean any $output data using $output = "";