public function render($direct_output = true)
    {
        // controlla che il file esista
        if($this->exists() == false)
            return false;

        // Carica il contenuto e imposta i parametri settati
        // come variabili di contesto
        extract($this->params);
        ob_start();
        include($this->filename);
        $content = ob_get_contents();
        ob_end_clean();    

        // view engines
        foreach($this->engines as $key => $engine)
        {
            $content = $engine->map($content, $this->params);
        }

        // pulisci l'output di eventuali sezioni non sovrascritte
        if($this->can_clear)
        {
            foreach (ViewUtility::find_rules($content, '@section', ')') as $rule) {
                $content = str_replace($rule, '', $content);
            }
        }

        // controlla se occorre produrre a schermo
        // o semplicemente ritornare il contenuto
        if($direct_output)
        {
            echo $content;
            return true;
        }
        else return $content;
    }