Moodle开发笔记3-Filter开发
来源:互联网 发布:新手单反相机推荐知乎 编辑:程序博客网 时间:2024/06/05 05:51
Moodle filters是对修改来自database的content进行过滤修改后再输出显示。
一个例子是moodle自带的multimedia filter,它能够detect references to video and audio files,然后replace them with a"mini-player" embedded in the content。
Filter的工作原理
Moodle里所有要输出到screen的text都要经过format_textfunction的处理,该函数会使其safe to be displayed (there are no security issues andthat any HTML used contains only allowed tags)。
而且,text还会经过filter_textfunction的处理,该函数会apply all enabled filters to 传过来的text。该函数返回的是the result of all of these filters。
下面讲解如何开发一个简单的filter,该filter会对所有” Learning is Fun”的字眼,都把它转化成带指向” http://2fun2learn.org”的link。
1. create “learningisfunlink” folder (目录名是你的filtername) in ”moodle/filter” folder
2. create “filter.php” under ”learningisfunlink”folder
该filter.php只需要添加一个函数”learningisfunlink_filter” (格式为[filter_name]_filter),该函数带有2个参数:course ID and 要过滤的text。下面的例子是最简单的filter,就是把text原样输出。
<?php
function learningisfunlink_filter($courseid, $text) {
return$text;
}
?>
3. (Optional) add language file (language file详见block开发)
如果不使用languagefile,那么在filter manage page里显示该filter的name就是”learningisfunlink”,但如果我们的lang/en_utf8/filter_learningisfunlink.php里添加下列的code
$string['filtername'] ="Main website link";
那么在filtermanage page里该filter name为"Main website link"
4. 修改步骤2的filter.php的learningisfunlink_filter函数,使得碰到” Learning is Fun”的字眼就转成link。
会用到/lib/filterlib.phpfile里的filterobject class andthe filter_phrases function.
filterobject class定义了一个object来包含所有filter_phrases function所要的info:
· 要filter的string
· the tag to start thereplacement with
· the tag to end thereplacement with
· whether to match case(optional)
· whether a full match isrequired (optional)
· any replacement textfor the match
filter_phrases($text, $filterobjects)函数是根据参数$filterobjects(it is an array)来处理第一个参数的text,然后返回处理后的string。
修改后的learningisfunlink_filter函数代码为
function learningisfunlink_filter($courseid, $text) {
//create filterobjectsobj
$searchphrase= "learning is fun";
$starttag= "<a href=/"http://2fun2learn.org/">";
$endtag ="</a>";
$filterobjects= array();
$filterobjects[]= new filterobject($searchphrase, $starttag, $endtag);
// change any occurrence of the phrase "learning is fun"to a hyperlinked phrase
return filter_phrases($text,$filterobjects);
}
注意:filter要先在”Site Administration Block ->Modules -> Filters -> Manage filters”里activate才可使用。
5. add configuration settings。我们希望能够动态的设置要添加link的字串,而不是设死是” Learning is Fun”。同时能够动态设置link的url。因此我们就要使filter具有configuration的功能(这样在filter manage page里该filter就会多一个”setting” link)。
1) 添加一个filtersettings.php under ”learningisfunlink”folder。当你创建了该文件后,该filter在manage page里马上就会出现”setting” link
filtersettings.php会用到$settings variable and admin_settingpage class
$settings变量是由moodle帮我们创建的(在/admin/settings/plugins.php里创建),该变量是一个数组类型,它包含class admin_settingpage的对象元素。
那么我们的filter configuration设置的东东,就会被wrap into a admin_settingpage object,然后添加到变量$settings里
admin_setting_configtext的构造方法为
admin_setting_configtext($name, $visiblename, $description,$defaultsetting,
$paramtype=PARAM_RAW,$size=null)
第一个参数最为关键,它相当于key,必须在$settings里是唯一的。它的格式应该为[module_type]_[module_name]_key。例如该例中的filter_learningisfunlink_phrase
因此修改后的filtersettings.php为:
<?php
$settings->add(newadmin_setting_configtext('filter_learningisfunlink_phrase',
'Phrase','Phraseto hyperlink', 'learning is fun'));
$settings->add(newadmin_setting_configtext('filter_learningisfunlink_link',
'url','URLto link phrase to', 'http://2fun.org'));
?>
对于上面的代码,当你进入该filter的configuration page时,就会有2个textbox,它们的name分别为“filter_learningisfunlink_phrase”and“filter_learningisfunlink_link”,当你submit时,这2个text box的值就会自动付给“filter_learningisfunlink_phrase”and“filter_learningisfunlink_link”的admin_setting_configtext变量,并把这2个变量添加到$CFG变量里(见下面的代码就清楚).
注意:使用admin_setting_configtext,对应的就会在configurationpage里出现text box供你设置。如果你希望使用其他类型的设置,可以使用下列class
· admin_setting_configselect 用于list box设置
· admin_setting_configtextarea 用于text area设置
等。
2) 在上面的步骤的configuration设置好之后,设置的变量被存到$CFG里了。我们应该修改filter.php来使用它们。
global $CFG;
if (!isset($CFG->filter_learningisfunlink_phrase)) {
set_config( 'filter_learningisfunlink_phrase',
get_string('phrasedefault','filter_learningisfunlink'));
}
if(!isset($CFG->filter_learningisfunlink_link)) {
set_config('filter_learningisfunlink_link',
get_string('linkdefault','filter_learningisfunlink'));
}
$searchphrase = $CFG->filter_learningisfunlink_phrase;
$starttag = "<ahref=/"{$CFG->filter_learningisfunlink_link}/">";
$endtag ="</a>";
$filterobjects = array();
$filterobjects[] = new filterobject($searchphrase,$starttag, $endtag);
return filter_phrases($text, $filterobjects);
注意:上面的代码会先check $CFG里是否存在我们想要的设置的key,如果不存在,就通过set_config函数往$CFG里添加该key with default value。
- Moodle开发笔记3-Filter开发
- Moodle开发笔记1
- Moodle插件开发笔记
- Moodle开发笔记1-基础知识
- moodle的开发笔记2
- Moodle开发笔记2-Block开发
- Moodle开发笔记4-Theme开发
- Moodle开发笔记5-Course Format开发
- Moodle开发笔记7-Activity module开发
- Moodle开发笔记6-Database操作
- IIS Filter开发笔记
- moodle开发——1开发总览
- moodle 板块(block)开发流程小记
- Moodle笔记
- Filter开发
- 开发Filter
- 过滤器Filter的开发(笔记)
- Servlet2.3 filter 开发(z)
- Java代码块和构造方法执行顺序问题
- Moodle开发笔记2-Block开发
- T-SQL入门攻略之4
- google提供的几种读取feed的API
- T-SQL入门攻略之5
- Moodle开发笔记3-Filter开发
- sql 触发器
- T-SQL入门攻略之6
- 转换文本框字符串为数字
- Moodle开发笔记4-Theme开发
- T-SQL入门攻略之7
- Tomcat 系统架构与设计模式
- 汇编学习(2)
- 从TechNet抄下来的