让glossary(词汇)支持UTF-8的汉语拼音索引

让glossary(词汇)支持UTF-8的汉语拼音索引

Zhigang Sun發表於
Number of replies: 3
现在只是支持UTF-8。我想把它做成通用的,但这就需要和Martin商量怎么能对glossary动手术。目前的方法仅支持mysql,且必须是4.0以上版本。

如果moodle将来会强迫用户升级数据库,那么这种实现(利用sql嵌套查询)可以做得更漂亮。如果moodle不想这样,就还得再多动点儿小手术。

不管怎样,都得先是我的方法行得通才行。大家帮忙测试一下吧,尤其是词汇多的,更能测测性能。

这个附件是mod/glossary/sql.php的diff,针对的是cvs的当前版本
評比平均分數: -
In reply to Zhigang Sun

回复: 让glossary(词汇)支持UTF-8的汉语拼音索引

Ling Li發表於
不错,用这个功能不需要什么额外的数据吗?
In reply to Ling Li

回复: 让glossary(词汇)支持UTF-8的汉语拼音索引

Zhigang Sun發表於
新diff。做了一点儿小优化

Index: mod/glossary/sql.php
===================================================================
RCS file: /cvsroot/moodle/moodle/mod/glossary/sql.php,v
retrieving revision 1.23
diff -r1.23 sql.php
276c276,277
<                     $where = 'AND left(ucase(concept),' .  strlen($hook) . ") = '" . strtoupper($hook) . "'";
---
>                     //$where = 'AND left(ucase(concept),' .  strlen($hook) . ") = '" . strtoupper($hook) . "'";
>                     $where = 'AND EXISTS (SELECT * FROM `mdl_glossary_letter_map` WHERE letter = \'' .strtoupper($hook) . "' AND strcmp(ucase(left(concept, length(`character`))), `character`) = 0)";
295c296,298
<                     $where = 'AND left(ucase(concept),1) NOT IN (' . strtoupper($sqlalphabet) . ')';
---
>                     //$where = 'AND left(ucase(concept),1) NOT IN (' . strtoupper($sqlalphabet) . ')';
>                     $where = 'AND NOT EXISTS (SELECT * FROM `mdl_glossary_letter_map` WHERE strcmp(ucase(left(concept, length(`character`))), `character`)=0 )';
>

需要用第二个rar附件建一个数据库