Answers:
@Byran M.我倾向于使用两种构造,我很少看到其他WordPress开发人员经常使用的构造,这让我感到惊讶,但是我非常喜欢它们。
您可以将大块的文本存储为heredocs字符串(可能看起来像这样),因此我可以担心混合单引号和双引号:
$html=<<<HTML
<input type="{$type}" size="{$size}" id="{$id}" class="{$class}" value="{$value}" />
HTML;
请注意,变量可以作为数组传递给函数,然后由extract()
ed或您可以通过其他方式分配。还要注意,我使用花括号并不是因为总是需要花括号,而是因为它们使代码更易于阅读。(当然,与WordPress the_content()
实质不同的功能get_the_content()
并不总是使这种编码风格容易。)
而且,尽管可能与您无关,但是如果我使用HTML,SQL等Heredoc名称,那么我的IDE PhpStorm会进行语法注入,并在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/zh/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的类型。
首先,尽可能将动态部分与静态部分分开。然后在运行时加载所需的任何动态变量,并将静态脚本排入页眉(或页脚,无论如何)。但是这样一来,您的大多数JS就与PHP分离了。
这是在PHP中干净地构建代码的问题。如果您有大量要重用的HTML,我会将它们存储为单独的变量。然后在调用短代码时将事情拼凑起来很简单:
echo $firstblock;
echo $shortcodecontent;
echo $lastblock;
与其尝试按程序进行构建,不如构建一个包含所有不同HTML块的对象(是,PHP支持对象),然后指示它使用哪些块以及将哪些数据传回。这将为您节省大量时间。