Laravel 5动态包含刀片模板(替换div)

时间:2015-04-27 12:20:39

标签: php dom laravel-5 blade

我有一个CMS,用户可以在其网站中创建和编辑自己的内容。我还可以通过简单地替换其内容中的特定Div来包括表单和画廊。

在过去,我只是将这些Div上的内容分解为一个数组,用所需的html代码替换整个Div(使用PHP的包含)以显示表格或画廊在那个确切的位置,再次将整个阵列破碎成一个字符串(html)并在网站中使用。

现在我试图在Laravel 5中实现相同目标:

// example plugins div in HTML
// ******************************
<div class="plugin form"></div>

// PageController.php
// ******************************
$page = Page::where(('url', '=', "home")->first();
$page->text = Helpers::getPlugins($page->text);


// Helpers.php (a non default custom class with functions)
// ******************************
public static function getPlugins($page)
{
    $dom = new DOMDocument();
    $dom->loadHTML($page, LIBXML_HTML_NOIMPLIED);
    $x = $dom->getElementsByTagName("div");
    foreach ($x as $node)
    {
        if (strstr($node->getAttribute('class'), "plugin"))
        {
            $plugin = explode(" ",$node->getAttribute('class'));
            $filename = base_path() . "/resources/views/plugins/" . trim($plugin[1]) . ".blade.php";
            if (is_file($filename))
            {
                ob_start();
                include($filename);
                ob_get_contents();
                $node->nodeValue = ob_get_clean();
            }
            else
            {
                $node->nodeValue = "Plugin <strong>".$node->getAttribute('class')."</strong> Not found</div>";
            }
        }
    }
    return $dom->saveHTML();
}

Sofar非常好,内容已经返回,但我得到的是所有纯文本刀片标记,而不是我想要使用的Laravel生成的html。

我认为有一种方法可行,但我无法想到它。

1 个答案:

答案 0 :(得分:0)

尝试使用方法BladeCompiler->compile()read more here

手动构建模板

修改:我认为外观Blade::compile()也可以让您访问此功能,只需在文件顶部添加use Blade即可。