There's already a number of answers for this question but I have tried to provide a very simplistic approach. Hopefully identifying to devs the array structure expected by Drupal when returning your block content. To do this I have broken the question down into separate code examples as such, /** * Implements hook_theme(). */ function examplemodule_theme() { return array( 'examplemodule_output' => array( 'variables' => array( 'title' => NULL, 'content' => NULL, 'popular_content' => NULL, ), 'template' => 'templates/examplemodule-sweet--block', ), ); } Please see a full explanation here [drupal 7 creating theming custom blocks][1] [1]: http://legomenon.io/article/drupal-7-creating-theming-custom-block-content