Theme call for block returning as an empty string I have a call for a block generating that is returning an empty string when it should be returning with generated content. I have cleared out the theme cache and the results remain the same. I've gone through most of the documented steps on the official docs and am pretty baffled as to why it isn't working as intended. 

Here is the code from generic.module

/**
 * Implements hook_block_info()
 */
function generic_block_info() {
  $blocks['gen_1'] = array(
    'info' =&gt; t('Project Information'),
  );
  return $blocks;
}

/**
 * Implements hook_theme()
 */
function generic_theme() {
  return array(
    'block_projectinfo' =&gt; array(
        'variables' =&gt; array(
            'completionPct' =&gt; NULL,
        ),
        'file' =&gt; 'theme/block-projectinfo'
    )
  );
}

/**
 * Implements hook_block_view()
 */
function generic_block_view($delta = '') {
    global $conf;

    switch ($delta) {
        case 'gen_1':
            $block['subject'] = t('Project Status');

                 $variables = array(
                  'completionPercentage' =&gt; 45
                     );


            $block['content'] = theme('block_projectinfo',$variables);
            break;
    }
    return $block;
}


Theme

&lt;?php

/**
 * @file
 * Provides rendered output of the Project
 */

?&gt;


&lt;div class='invest-wrap'&gt;
    &lt;table class='total-stat cont2'&gt;
        &lt;tr&gt;
            &lt;td class='funded'&gt;Percent Complete&lt;/td&gt;
            &lt;td class='percentage'&gt;&lt;?php print $completionPct; ?&gt;%&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;
&lt;/div&gt;
Assuming your template file can be found at theme/block-projectinfo.tpl.php, you just need to change the file property to template in hook_theme():

function generic_theme() {
  return array(
    'block_projectinfo' =&gt; array(
        'variables' =&gt; array(
            'completionPct' =&gt; NULL,
        ),
        'template' =&gt; 'theme/block-projectinfo'
    )
  );
}


file is


  The file the implementation resides in. This file will be included prior to the theme being rendered, to make sure that the function or preprocess function (as needed) is actually loaded; this makes it possible to split theme functions out into separate files quite easily.


And refers to situations where you implement a theme_foo() function, rather than a template file.