我同意OP的观点,Wordpress插件作者传统上在很大程度上混合了业务逻辑和视图标记,我认为尽管PHP框架取得了长足的进步,但仍将继续这样做。我对WP开发相对较新,但作为一名程序员,我认为应该对此进行简单的修复。因此,我希望在这里提到我一直在努力TemplateSystem, 轻量级模板系统,可与WP插件配合使用。
正如墨菲定律所说,我发布了这段代码,然后发现有几个库可以进行WP插件模板制作——我的建议是尝试几个,看看你能使用哪个。我的是非常轻的,有些人会使用它或拒绝它的基础上!
下面是我目前正在开发的插件的入口点示例,该插件使用此模板系统:
# plugin/main.php
$root = dirname(__FILE__);
require_once $root . \'/vendor/TemplateSystem/ControllerBase.php\';
require_once $root . \'/controllers/VersionedCommentsController.php\';
$controller = new VersionedCommentsController( $root );
$controller->runAll();
以下是一些控制器代码:
<?php
# plugin/controllers/VersionedCommentsController.php
// Import this class as a unique name
use TemplateSystem\\Change2\\ControllerBase as VersionedCommentsControllerBase;
class VersionedCommentsController extends VersionedCommentsControllerBase
{
/**
* Main controller entry point (initialisation here)
*/
public function execute()
{
$this->initCss();
$this->initEditCommentHandler();
$this->initAppendCommentNote();
add_action(\'add_meta_boxes_comment\', array($this, \'editCommentDialogue\'));
}
/**
* This is a WP action handler
*/
public function editCommentDialogue(stdClass $comment)
{
// Snipped detail, the important thing here is the rendering
$this->renderTemplate(
\'version-history\',
array(\'commentVersions\' => array_reverse($commentVersions), )
);
}
// Lots of other methods here, usually protected
}
模板层的一个片段(为简洁起见缩短):
<!-- plugin/templates/version-history.php -->
<div class="comment-items">
<span class="comment-item">
Name: <?php echo $commentVersion[\'comment_author\'] ?>
</span>
<span class="comment-item">
E-mail:
<?php
echo $commentVersion[\'comment_author_email\'] ?
$commentVersion[\'comment_author_email\'] :
\'(empty)\'
?>
</span>
<span class="comment-item">
URL:
<?php
echo $commentVersion[\'comment_author_url\'] ?
$commentVersion[\'comment_author_url\'] :
\'(empty)\'
?>
</span>
</div>
还有部分和组件支持;如果您想了解更多,请参阅自述。