moodleAPI翻译~$output

p.s.找隔壁外语院翻译的,也没仔细校对,留着到八月用的时候再认真改去吧。。。

在Moodle的先前版本上使用输出原件查看早先信息的输出内容。这个页面是一个新的尝试,来解释渲染器、可渲染对象、主题和模板是如何共同促进moodle2.9运行的。

让我们开始构建一个管理工具的网页。

例如/ admin /工具/演示/ index . php

为了一步一步展现这个演示,我们首先进行标准配置,包括要求登陆命令和对管理页面实行准入检查的外部网页管理设置(“工具演示”)。

接下来我们从朗字符串加载页面的标题(见String_API)。我们使用这个字符串来设置一些$页面属性(URL标题)。

 

什么是$page?它从何而来?

$页面是一个全局变量用于追踪被返回的页面的状态。这是moodle页面类的在lib / pagelib.个人网页上的定义的一个实例。有关更多信息,请参见Page_API $页面变量。存储在$页面中最重要的属性是页面内容,, url,布局,标题和H标签。$页面也接触其他重要分类例如$PAGE->requires,这是一个网页需求管理者的实例(lib/outputrequirementslib.php)。网页需求管理分类是我们对像JavaScrip以及在页面正确插入的CSS等产生依赖(插入网页的指令对展现是非常重要的)。

 

AGE也让我们加载特定的渲染器插件,或者插件目录和子型别。接下来我们将详细介绍渲染器。

$output = $PAGE->get_renderer('tool_demo');

这是PRB类的一个实例,我们用来创建所有的输出页面。Themers把这种渲染器归为亚纲类以此来覆盖特定的渲染方法是为了定制Moodle的输出。详情请见Output_renderers。Overriding_a_renderer themers查看主题设计如何定制渲染器。

 

注:一些页面使用全局变量$输出来生成输出。这是一个用于核心页面等的通用渲染器,但插件应该使用更具体的插件渲染器。

cho $output->header();
echo $output->heading($pagetitle);

这段代码打印页面的标题以及添加一个标题页顶部的内容区域。对于Moodle页面标题非常重要应该一致应用。详情请见HTML_Guidelines怎样以及在何处使用标题。

$renderable = new \tool_demo\output\index_page('Some text');
echo $output->render($renderable);

这是我们的页面最有趣的部分。我们正在创建一个可渲染属性并且用渲染器呈现出来。可渲染属性通常要比这复杂得多为了展示页面它应该保存所有渲染器所需的数据。这意味着我们应该执行所有逻辑运算如数据库查询,页面参数和提前访问检查,并且结果应作为数据传递给渲染器然后渲染器只需采用数据并用HTML页面展现出来。

echo $output->footer();

这个打印HTML页面底部。它非常重要,因为它打印出被添加到PRM的内容并且需要印在页脚。这些内容诸如javascript,它包括导航树的设置,关闭开放容器标签等所有javascript添加到页面的页脚是为了展示。如果javascript添加到页面顶部,添加内联,在页面呈现出来前浏览器必须停下来执行JavaScript详情请见https:/ /developers.google.com/speed/docs/insights/BlockingJS

上面的代码中,我们创建了一个渲染。你必须在此分类中增加你的插件。它拥有所有需要呈现在页面的数据。以下是渲染器属性的例子:

/admin/tool/demo/classes/output/index_page.php

// Standard GPL and phpdocs
namespace tool_demo\output;                                                                                                         
 
use renderable;                                                                                                                     
use renderer_base;                                                                                                                  
use templatable;                                                                                                                    
use stdClass;                                                                                                                       
 
class index_page implements renderable, templatable {                                                                               
    /** @var string $sometext Some text to show how to pass data to a template. */                                                  
    var $sometext = null;                                                                                                           
 
    public function __construct($sometext) {                                                                                        
        $this->sometext = $sometext;                                                                                                
    }
 
    /**                                                                                                                             
     * Export this data so it can be used as the context for a mustache template.                                                   
     *                                                                                                                              
     * @return stdClass                                                                                                             
     */                                                                                                                             
    public function export_for_template(renderer_base $output) {                                                                    
        $data = new stdClass();                                                                                                     
        $data->sometext = $this->sometext;                                                                                          
        return $data;                                                                                                               
    }
}

这类展现了没有方法和模板化界面可渲染接口, ,这意味着这个类可以呈现一个模板,所以它必须实现EFT方法。所以在本例中,这一分类通过它的构造函数接受数据并将这些数据存储在类变量这个例子中没有其他特别的数据(但是可以呈现)。注意EFT函数应该只反馈简单类型(数组、标准类、布尔型、整型、浮点数、字符串)

现在让我们看看这个插件的渲染器。

工具管理 /演示//输出/渲染器.php

 

// Standard GPL and phpdocs
namespace tool_demo\output;                                                                                                         
 
defined('MOODLE_INTERNAL') || die;                                                                                                  
 
use plugin_renderer_base;  
 
class renderer extends plugin_renderer_base {
    /**                                                                                                                             
     * Defer to template.                                                                                                           
     *                                                                                                                              
     * @param index_page $page                                                                                                      
     *                                                                                                                              
     * @return string html for the page                                                                                             
     */                                                                                                                             
    public function render_index_page($page) {                                                                                      
        $data = $page->export_for_template($this);                                                                                  
        return parent::render_from_template('tool_demo/index_page', $data);                                                         
    }           
}

这个渲染器提供render_x方法用于插件中所有的可渲染性能一个主题设计人员可以提供一个此渲染器的定制版本,它通过改变任何的渲染方法由此来定制他们的主题。在这个例子中,索引页面的渲染方法(render_index_page)实行了两项功能。它要求渲染器输出数据以便传递模板内容,然后依此内容绘制特定的模板主题设计者可以渲染方法操作数据 (例如删除菜单项),或改变模板(修改生成的html)以此来定制输出。

 

这个插件使用的模板位于插件模板文件夹。模板也可以被主题覆盖。

 

管理/工具/演示/模板/索引页

 

<div class="hero-unit">                                                                                                             
  <h1>Heading</h1>                                                                                                                  
  <p>{{sometext}}</p>                                                                                                               
</div>

这是mustache演示模板。它使用一些引导程序分类直接定位设计页面内容。模板:当该模板呈现时,sometext被替换为文本变量。详情请见Templates.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值