Laravel 5用(php)代码/ include替换[string]

时间:2015-03-09 14:21:56

标签: php html laravel laravel-5

在Laravel(5)之前的日子里,我有一个系统用一个与占位符同名的PHP脚本替换占位符。这些“插件”旨在通过在文本中添加插件代码(使用我自己的CMS编辑)来添加功能。

让我举个例子:

用户在CMS中维护一个页面。在每个页面上都可以在该页面的“图库”字段中选择多个图像。这些不会添加到文本中,images字段与内容分开。此文本字段包含一个数组(json对象),其中包含保存后的图像。

如果他想使用网页中的图片,他必须添加一个“插件”,通过在他希望的位置添加[gallery]来显示图像。

当显示页面时[gallery]被替换为PHP脚本(gallery.plugin.php),该脚本获取图像数组并显示格式良好并配置了灯箱库脚本以更大的尺寸查看它们。

用户不必担心图库的布局和功能,可以将它们放在他们喜欢的内容中。

我用旧方式做的方式: (旧的,从未更新的代码,完美无缺地工作)

public function decorateContent($content)
{
    if ($_parts = preg_split('/(\[.*?\])/', $content, 0, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY))
    {
        foreach ($_parts as $key => $value)
        {
            if (strstr($value, "[") and strstr($value, "]"))
            {
                $_plugin = explode(":", str_replace(array("[", "]"), "", $value));
                if (file_exists("templates/plugins/" . str_replace("_", "/", trim($_plugin[0])) . ".plugin.php"))
                {
                    $cntnt .= $this->get_include_content("templates/plugins/" . str_replace("_", "/", trim($_plugin[0])) . ".plugin.php", $_plugin);
                }

            }
            else
                $cntnt .= trim($value);
        }
    }
    else
    {
        $cntnt = trim($cntnt);
    }
    return $cntnt;
}



function get_include_content($filename, $_plugin)
{
    global $db, $Website, $parameter;

    if (is_file($filename))
    {
        ob_start();
        include($filename);
        $contents = ob_get_contents();
        ob_end_clean();
        return $contents;
    }
    return false;
}

有了这个,我可以轻松添加我想要的所有功能,[gallery],[form_contact](_转换为路径的斜杠:form / contact.php)等。只需在插件目录中创建一个脚本将name命名为文本中的插件占位符。

除了下划线用于路径转换之外,一些插件可以通过使用以下内容来提供变量:在插件名称中,例如。 [intro:3]在这个例子中,3是这个特定脚本中显示的内部块(带有内容的div)的数量。

从Laravel 5开始

我想在我的Laravel 5项目中再次添加此功能,但我喜欢这次正确的方式。有没有更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:0)

与模板或视图相关的所有内容都应使用刀片模板/部分。您可以从想要的db / file的任何位置提取模板。

在渲染视图之前,在构建过程中,您应该选择具有内部功能的模板和/或向其发送params,在您的示例中为images阵列,然后在CMS post / page中替换您自己的语法内容或任何与刀片包括语法。最后,Blade会在添加插件的情况下解析整个模板。

如果你有一个好的架构,你应该能够将特定的js / css添加到主模板以及你需要的片段,并将这些资源放入任何模板。

我认为你的问题很重要,因为它不只是一个功能,而是关于架构和功能,换句话说,就是实现,这就是你计划事情的方式以及你在构建过程中遇到的问题。 / p>

希望这会有所帮助:)