问题描述

我最近写了我的第一个 WP 插件,添加了一个用于将自定义 jquery 图像库嵌入到帖子中的短代码。它主要是转发一个很好的 HTML 块,以及初始化所需的 javascript 。

但是,我不得不在 PHP 中构建 HTML 输出,作为一个字符串。这种标签汤总是让我坚强,我习惯于使用 MVC 框架,它提供了帮助函数和部分模板来生成 HTML 。

需要管理大量动态构建的 HTML 或 JS 的插件作者的一般方法是什么?

最佳解决方案

@Byran M. 我倾向于使用我经常看不到其他 WordPress 开发人员使用的两个构造,这让我很惊讶,但是我很喜欢他们。

Heredocs

您可以将大块文本存储为 heredocs 字符串,可能看起来像这样,所以我可以存储担心混合单引号和双引号:

   $html=<<<HTML
<input type="{$type}" size="{$size}" id="{$id}" class="{$class}" value="{$value}" />
HTML;

请注意,变量可以作为数组传递给函数,然后可以以其他方式分配给 extract()。另请注意,我使用的大括号不是因为它们总是需要但它们使代码更容易阅读。 (当然,像 the_content()这样的功能与 get_the_content()有很大的不同,WordPress 并不总是使这种编码方式变得容易)

更重要的是,尽管可能与您无关,但如果我使用 hred,sql 等等,那么我的 IDE PhpStorm 会执行语法注入,并且会给我自动填充和语法着色。

2.) 使用数组的字符串连接

我喜欢使用的其他成语是将内容收集到数组中,然后将数组中的 implode()。虽然我从来没有对这个做过基准测试,但是它比我假设我知道重复的字符串连接是一个杀手,因为字符串越来越大 (如果有人知道为什么这种方法不是更好,或者你知道一个更好的方法, ‘d 爱听到反馈):

function my_get_form_and_fields($input_items) {
    $html = array();
    $html[] = '<form name="my_form" method="get">';
    foreach($input_items as $input_item) {
        extract($input_item);
        $html=<<<HTML
<input type="{$type}" size="{$size}" id="{$id}" class="{$class}" value="{$value}" />
HTML;
    $html[] = '</form>';
    return implode("n",$html);
}

次佳解决方案

我没有实际使用这个框架,但它提供的模板模型可能会吸引人。你可能想看看作者是如何设置的。

https://github.com/Emerson/Sanity-Wordpress-Plugin-Framework

Templates ========= Whenever possible, we should separate PHP from HTML. Within WordPress, you’ll see the two mixed together without apprehension. While this is often an “easy way” of doing things, it is almost never the “right way.” Instead, we should segregate the two, thus keeping our logic pure and our views dumb. For this purpose we have the $this->render(‘my-template’) method. A few examples:

    // From within a method in our controller
    $this->data['message'] = 'Pass this on to the template please';
    $this->render('my-template');

    // Meanwhile, in the /plugin/views/my-template.php file
    <h2>The Separation of Logic and Views</h2>
    <p><?php echo $this->data['message'];?></p>

第三种解决方案

检查 PHP 的这个功能:

http://php.net/manual/en/function.ob-start.php

您可以将包含其中的 HTML 代码的文件缓冲到 php 变量中。这将使其更加清洁维护。

所以你最终得到这样的东西:

ob_start();
   include('path/to/my/html/file.php');
   $includedhtml = ob_get_contents();
ob_end_clean();

然后你可以只返回 $ includehtml 你需要它,它保持你的 html 内容不必在 php 字符串内部全部回显。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。