【问题标题】:PHP | How would I create a "plugin system" to inject content/HTML onto my page?PHP |我将如何创建一个“插件系统”来将内容/HTML 注入我的页面?
【发布时间】:2021-02-28 03:23:55
【问题描述】:

我正在尝试创建一个可以使用 PHP 在某些 div 标签之间注入 HTML 的函数。

例如,假设我有具有以下参数的函数。 add_html('<div class = "greeting">', 'hello')

我将如何使文本 hello 像这样添加到 <div class = "greeting"> 内:<div class = "greeting">hello</div> 我的目标是为此使用 PHP。我将如何实施呢?实现此目的最简单的方法是什么?

【问题讨论】:

  • 您希望插件能够调用add_menu_option?为此,插件需要在某个时候获得对该过程的控制权。因此,您可以使用“插件挂钩”,以便 CMS 调用插件中的已知函数,然后该函数可以执行此类调用,或者您有一个“事件挂钩”,插件可以在其中注册多个不同的侦听器当它被加载时,然后您的 CMS 会在其进程的不同时间触发为特定事件注册的侦听器。这种情况有帮助吗?
  • 如果没有,那我不知道我们还能提供更多帮助。这是一个非常基础的问题,解决方案在很大程度上取决于您希望如何构建系统、您已经拥有什么代码等,可能比此处合理提供的信息更多。
  • @GregSchmidt 我已将我的问题编辑为更清晰的内容。
  • 我的回复是基于您希望拥有可以启用或禁用的 WordPress 样式插件的期望,如果启用它们,那么他们可以将自己的内容添加到页面,添加特定于他们的功能,诸如此类的东西。如果您正在寻找的只是将文本格式化为 HTML 或构建简单菜单的东西,那么“插件”这个词是不相关的。
  • @GregSchmidt 这就是我要找的。​​span>

标签: php html dom


【解决方案1】:

函数可能是这样的:

<?php

function add_div($class, $content) {
    return sprintf('<div class="%s">%s</div>', $class, $content);
}

echo add_div('foo', 'Hello Earth!');

输出:

<div class="foo">Hello Earth!</div>

但这并不能真正节省您的打字时间。

【讨论】:

  • 但也许这不是你的意思,你正试图操纵 DOM - 将内容插入现有的 HTML。
【解决方案2】:

您已经更改了它的细节,但根本问题仍然无法通过您似乎正在寻找的任何细节来回答。我什至很难表达你所问的变量有多少。我将其作为答案,不是因为它回答了您的问题,而是因为 cmets 不足以解决它。

您当前的示例是您想要一个“问候” div。好的。但是你想要它在哪里?在每一页上?在主页上?在顶部或底部还是介于两者之间?让我们假设您的 CMS 有办法知道将要使用的整体布局(页眉、页脚、菜单、侧边栏等),以及将使用什么特定模板来生成特定于页面的内容(文本和例如,博客文章的图片),并且您希望为您的插件提供一种将自己的内容注入到内容顶部(博客文本和图片上方)的布局的方法。现在这是一个很好的、具体的问题,StackOverflow 更擅长回答,而不是像您这样的一般开放式问题。

好的,让我们来解决这个特定的问题。理想情况下,您会显示用于生成页面的 CMS 代码。让我们假设它是这样的:

echo $this->layout->headers();
echo $this->layout->menu();
echo $this->template->content();
echo $this->layout->footers();

实际上可能比这更复杂,但这只是一个例子。现在,我们可以说,如果你想使用插件挂钩架构,你可以在 menu 调用之后添加类似这样的内容:

foreach ($this->plugins as $plugin) {
    if (method_exists($plugin, 'inject_pre_content')) {
        $plugin->inject_pre_content();
    }
}

然后你会在你的插件中添加一个inject_pre_content 函数来呼应你想要的HTML。

如果您想改用事件挂钩,那么您可以在同一个地方简单地添加:

$this->triggerEvent('inject_pre_content');

但这依赖于您还整合了一个事件处理框架。

IMO,插件钩子更容易构建,但没有那么强大。

希望这可以帮助您更好地了解您所面临的问题,并阐明两个主要选项的外观。

【讨论】:

  • 感谢您的回答,它确实帮助我决定了我将如何做到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-14
  • 1970-01-01
  • 2013-04-26
  • 1970-01-01
  • 1970-01-01
  • 2019-08-30
  • 1970-01-01
相关资源
最近更新 更多