试着自己写一个Drupal的Module,其实是一个filter,也就是前阵子讨论过的数学符号过滤器,用来显示数学表达式。看了一下Drupal的函数手册,帮助挺大的,基本上这个模块已经完成了,可以在 管理->模块 中显示,也可以在输入方式中显示,并且没有出错的提示,so far so good, 但是最重要的地方却是:这个过滤器不能过滤显示数学符号 !(peng,被一棒子打到)
不管怎样,先把这个失败的模块/过滤器贴在这里吧,和大家讨论一下,看看问题出在什么地方。
function math_help($section) {
//让模块显示在模块列表中。这部分没有问题。
switch($section) {
case "admin/modules#description":
return t("A filter module that converts ascii to math symbols");
break;
case "filter#long-tip":
return t("useful math filter");
break;
case "filter#short-tip":
return t("math filter");
}
}
function ASCIIMathCallback($mtch_arr){
//估计问题出在这里,我直接按照ascii to math的作者定义的函数超过来没有仔细研究它的引用的两个页面的函数。
$txt = trim($mtch_arr[1]);
include('modules/ASCIIMathPHP.cfg.php');
require_once('modules/ASCIIMathPHP.class.php');
static $asciimath;
if (!isset($asciimath)) {
$asciimath = new ASCIIMathPHP($symbol_arr);
}
$math_attr_arr = array( 'displaystyle' => 'true' );
$asciimath->setExpr($txt);
$asciimath->genMathML($math_attr_arr);
return($asciimath->getMathML());
}
function math_filter($op, $delta = 0, $format = -1, $text = '') {
//这部分也没有问题,可以在输入方式中正确显示。
switch($op) {
case "list":
return array(t("math"));
break;
case 'description':
return t('math symbols.');
break;
case "process":
return preg_replace_callback('/`(.*?)`/s', 'ASCIIMathCallback', $text);
break;
default:
return $text;
}
}
?>