我最近写了我的第一个WP插件,它添加了一个将自定义jquery图像库嵌入帖子的短代码。它主要只是将大量HTML以及初始化所需的javascript转储到帖子中。
然而,我必须按程序构建HTML输出,在PHP中作为字符串。这种标签汤总是让我抓狂,我习惯于使用MVC框架,它提供帮助函数和生成HTML的部分模板。
对于需要管理大量动态构建的HTML或JS的插件作者来说,一般的方法是什么?
我最近写了我的第一个WP插件,它添加了一个将自定义jquery图像库嵌入帖子的短代码。它主要只是将大量HTML以及初始化所需的javascript转储到帖子中。
然而,我必须按程序构建HTML输出,在PHP中作为字符串。这种标签汤总是让我抓狂,我习惯于使用MVC框架,它提供帮助函数和生成HTML的部分模板。
对于需要管理大量动态构建的HTML或JS的插件作者来说,一般的方法是什么?
@Byran M.我倾向于使用其他WordPress开发人员不经常使用的两种结构,这让我感到惊讶,但我非常喜欢它们。
$html=<<<HTML
<input type="{$type}" size="{$size}" id="{$id}" class="{$class}" value="{$value}" />
HTML;
请注意,变量可以作为数组传递给函数,然后extract()
或者你可以用其他方式分配它们。还要注意,我使用大括号并不是因为它们总是必需的,而是因为它们使代码更易于阅读。(当然可以使用以下功能:the_content()
与…有实质性的不同get_the_content()
WordPress并不总是让这种编码方式变得容易。)更重要的是,虽然它可能与您无关,但如果我使用诸如HTML、SQL等heredoc名称,那么我的IDEPhpStorm 执行语法注入,并在heredoc中为我提供自动完成和语法着色。
implode()
阵列。虽然我从未对此进行过基准测试,因此它可能没有我假设的那么有用,但我确实知道,随着字符串变大,重复的字符串串联是一个杀手锏(如果有人知道为什么这种方法没有更好,或者如果你知道更好的方法,我很乐意听取反馈):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);
}
为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();
然后,您可以在需要的地方返回$includedhtml,这样就可以将html内容与php字符串中的所有内容分离开来。我实际上没有使用这个框架,但它提供的模板模型可能会很有吸引力。你可能想看看作者是如何设置的。
https://github.com/Emerson/Sanity-Wordpress-Plugin-Framework
模板========只要可能,我们应该将PHP与HTML分开。在Wordpress中,你会看到二者毫无顾虑地混合在一起。虽然这通常是一种“简单的方式”,但它几乎从来都不是“正确的方式”相反,我们应该将两者分开,从而保持我们的逻辑纯粹,保持我们的观点沉默。为此,我们使用了$this->render(\'my-template\')方法。举几个例子: // 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>
这取决于HTML和JS的类型。
echo $firstblock;
echo $shortcodecontent;
echo $lastblock;
与其尝试按程序构建,不如构建一个包含所有不同HTML块的对象(是的,PHP支持对象),然后指示它使用哪些块以及要传回哪些数据。这将为你节省大量时间。我想在我的WordPress主题中使用HTML5,如何关闭wptexturize 我不介意增加休息时间,但我想让他们休息一下<br> 而不是<br />. 我如何控制这些中断在代码中的显示方式 EDIT: 我只在乎<br> 标签问题,我不介意它对排版的改变 EDIT2: 事实上,我想<img> 标签也很重要。任何自动关闭的独立标签在这里都很重要。所以<hr> 也可能是个问题。更不用说这些了wp_head() 项目作为<link> 各种