【发布时间】: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