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.