如何在页面或博客中实现短代码?

时间:2017-01-19 21:06:47

标签: php laravel

我正在使用php框架laravel,我想实现短代码。

是否有人建议如何实施可由用户插入页面或博客帖子的短代码。

示例,假设我想要一个包含某些图像的库的短代码,例如

  

[画廊= ID]

然后会显示该特定的图库。当然我有画廊模型和画廊&图像表。

我的第一个想法是,我必须扫描页面/帖子的内容并查找短代码,当我找到特定的短代码时,那又是什么?我应该插入什么而不是它?

我无法插入遍历库的PHP代码并生成输出。我想最好的方法是运行一个函数来返回我插入的完整的html代码,而不是短代码。

是否可以从函数返回视图并将结果插入到页面/帖子中?

2 个答案:

答案 0 :(得分:1)

要明确的是,我假设您要将其插入存储在数据库或其他内容中的内容块中,而不是在现有的视图文件中。

假设您希望将文本注入视图以供显示,您可以允许内容创建者使用模板格式(如胡须(https://en.wikipedia.org/wiki/Mustache_%28template_system%29)与服务器端回调/帮助/部分(在视​​图中)填充您的拥有动态内容的自定义标签(在这种情况下为图库链接)。

要点

  1. 我坚持使用基本的知名模板格式 胡子为此。在laravel中,允许使用Blade模板符号,听起来您希望在这种情况下注册Blade::directivehttps://www.laravel.com/docs/5.3/blade#service-injection
  2. 我尝试使用现有的库,如果之前存在这样的库 试图创建自己的短标记标记解析/ 回调范式。 Blade具有处理此类回调的功能和方法。
  3. #2没有必要,但强烈推荐,但#1应该被视为接近宗教。

      

    更新:正如其他答案所指出的,Laravels内置模板Blade,具有此功能,因此坚持其格式和功能。

    这是我的建议(伪laravel / php):

    • 假设从拉入控制器的模型中标记的内容在$content['blade_markedup_content' => 'here is my new gallery: @gallery(1)']中传递给视图。
    • 将Blade指令@preprocess()添加到模板/视图中,并使用<p>@preprocess($blade_markedup_content)</p>代替原始<p>{{$blade_markedup_content}}</p>
    • @preprocess()指令的相应回调函数中
      • 实例化新的$my_compiler = new BladeCompiler();
      • 注册此新的刀片编译器指令,以处理@gallery(1)
      • 中的blade_markedup_content
      • 使用@preprocess();
      • $my_compiler->compileString($blade_markedup_content)返回
    • Viola ......理论上,这应该会导致原始模板中@preprocess($blade_markedup_content)的解析和替换字符串。

答案 1 :(得分:1)

根据您想要的“短代码”类型,这里有很多选项:

  1. Blade Directives
  2. Blade Layouts
  3. Blade Sub-Views
  4. Blade Stacks