Back to ModuleRenderer class

Method render

public string
render
(mixed $module, mixed $attribs = array(), mixed $content = null)
Renders a module script and returns the results as a string
Parameters
  • string $module The name of the module to render
  • array $attribs Associative array of values
  • string $content If present, module information from the buffer will be used
Returns
  • string The output of the script
Since
  • 3.5

Method render - Source code

/**
 * Renders a module script and returns the results as a string
 *
 * @param   string  $module   The name of the module to render
 * @param   array   $attribs  Associative array of values
 * @param   string  $content  If present, module information from the buffer will be used
 *
 * @return  string  The output of the script
 *
 * @since   3.5
 */
public function render($module, $attribs = array(), $content = null)
{
    if (!\is_object($module)) {
        $title = $attribs['title'] ?? null;
        $module = ModuleHelper::getModule($module, $title);
        if (!\is_object($module)) {
            if (\is_null($content)) {
                return '';
            }
            /**
             * If module isn't found in the database but data has been pushed in the buffer
             * we want to render it
             */
            $tmp = $module;
            $module = new \stdClass();
            $module->params = null;
            $module->module = $tmp;
            $module->id = 0;
            $module->user = 0;
        }
    }
    // Set the module content
    if (!\is_null($content)) {
        $module->content = $content;
    }
    // Get module parameters
    $params = new Registry($module->params);
    // Use parameters from template
    if (isset($attribs['params'])) {
        $template_params = new Registry(html_entity_decode($attribs['params'], ENT_COMPAT, 'UTF-8'));
        $params->merge($template_params);
        $module = clone $module;
        $module->params = (string) $params;
    }
    // Set cachemode parameter or use JModuleHelper::moduleCache from within the module instead
    $cachemode = $params->get('cachemode', 'static');
    if ($params->get('cache', 0) == 1 && Factory::getApplication()->get('caching') >= 1 && $cachemode !== 'id' && $cachemode !== 'safeuri') {
        // Default to itemid creating method and workarounds on
        $cacheparams = new \stdClass();
        $cacheparams->cachemode = $cachemode;
        $cacheparams->class = ModuleHelper::class;
        $cacheparams->method = 'renderModule';
        $cacheparams->methodparams = array($module, $attribs);
        $cacheparams->cachesuffix = $attribs['contentOnly'] ?? false;
        // It need to be done here because the cache controller does not keep reference to the module object
        $module->content = ModuleHelper::moduleCache($module, $params, $cacheparams);
        $module->contentRendered = true;
        return $module->content;
    }
    return ModuleHelper::renderModule($module, $attribs);
}