Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to implement hook_theme in drupal 7?

I created a new drupal 7 theme and trying to implement hook_theme at template.php like this:

function mytheme_theme($existing, $type, $theme, $path){
    return array(
        'mytheme_header'=>array(
            'template'=>'header',
            'path'=>$path.'/templates',
            'type'=>'theme',
        ),
    );
}

then I placed header.tpl.php into templates directory and cleared all caches, and call theme function:

theme('mytheme_header', $vars);

and header.tpl.php likes this:

<?php
fb('calling header template');//the function of FirePHP to output debug info
print '<div>Header</div>';
//...

I check Firebug and it get the info 'calling header template', it mean it had called header.tpl.php, but it didn't print the html code. What's wrong with my code?

like image 761
solomon_wzs Avatar asked Oct 20 '12 05:10

solomon_wzs


1 Answers

Try to add the variables array in hook_theme

function mytheme_theme($existing, $type, $theme, $path){
    return array(
        'mytheme_header' => array(
            'template' => 'header',
            'path' => $path . '/templates',
            'type' => 'theme',
            'variables' => array(
                'title' => NULL,
                'some_text' => NULL,
            ),
        ),
    );
}

In your header.tpl.php file:

<h1><?php print $title; ?></h1>
<p><?php print $some_text; ?></p>

Then, print it out like this:

$vars = array();
$vars['title'] = "This is a title";
$vars['some_text'] = "Some text...";
print theme('mytheme_header', $vars);
like image 52
Muhammad Reda Avatar answered Oct 27 '22 00:10

Muhammad Reda