【问题标题】:Laravel 5 replace [string] with (php) code / includeLaravel 5 将 [string] 替换为 (php) 代码/包含
【发布时间】:2015-03-09 14:21:55
【问题描述】:

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

让我举个例子:

用户在 CMS 中维护一个页面。在每个页面上,可以在该页面的“图库”字段中选择多个图像。这些不会添加到文本中,图像字段与内容是分开的。此文本字段包含一个数组(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)等。只需在插件目录中创建一个具有相同功能的脚本名称作为文本中的插件占位符。

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

Laravel 5 的起点

我想在我的 Laravel 5 项目中再次添加这个功能,但这次我想以正确的方式来做。有什么首选的方法可以体面地做到这一点吗?

【问题讨论】:

  • 这个问题在我看来过于本土化了。
  • “有什么首选的方法可以体面地做到这一点吗?”会让你的问题关闭/搁置

标签: php html laravel laravel-5


【解决方案1】:

与模板或视图相关的所有内容都应使用刀片模板/部分。您可以从任何您想要的数据库/文件中提取模板。

在渲染视图之前,在构建过程中,您应该选择具有内部功能的模板和/或向其发送参数,在您的示例中为图像数组,然后在 CMS 帖子/页面中替换您自己的语法刀片的内容或任何内容包括语法。最后,Blade 将解析整个模板并添加插件。

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

我认为您的问题是一个大问题,因为它不仅与功能有关,还与架构和功能有关,换句话说,与实施有关,这就是您计划事物的方式以及在构建过程中遇到的问题。

希望这会有所帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多