我有一个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。
我认为有一种方法可行,但我无法想到它。
答案 0 :(得分:0)
尝试使用方法BladeCompiler->compile()
,read more here
修改:我认为外观Blade::compile()
也可以让您访问此功能,只需在文件顶部添加use Blade
即可。