用于定制插件的WordPress模板系统

时间:2012-11-06 作者:Aram Boyajyan

我正在创建一个自定义插件,它需要显示带有动态更新值的HTML。

下面是我想要实现的目标:

<h1><?php print $title; ?></h1>
<h3><?php print $subtitle; ?></h3>
<div class="description"><?php print $content; ?></div>
我如何定义一个模板,传递一些变量,并从我的自定义插件中获得输出?我不想把所有东西都作为变量名嵌入,因为它很凌乱;在函数的中间返回PHP和HTML似乎也不干净。

WP的做法是什么?

谢谢

2 个回复
最合适的回答,由SO网友:Steve 整理而成

混合和匹配HTML和PHP的各种风格一直是一个难题。环境有时会决定您使用的方法,但许多开发人员更喜欢这种或那种样式,WordPress倾向于在您的示例中使用这种样式。

另一种选择,在我看来更简洁一些,就是在PHP中使用herdeoc语法,它允许简单的变量替换。http://php.net/manual/en/language.types.string.php

$Output = <<< EOF
<h1>$title</h1>
<h3>$subtitle</h3>
<div class="description">$content</div>
EOF;

return $Output;
您不能完全删除PHP变量,但可以使其更易于编写、读取和维护。

SO网友:halfer

我同意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>
还有部分和组件支持;如果您想了解更多,请参阅自述。

结束

相关推荐