现在只是支持UTF-8。我想把它做成通用的,但这就需要和Martin商量怎么能对glossary动手术。目前的方法仅支持mysql,且必须是4.0以上版本。
如果moodle将来会强迫用户升级数据库,那么这种实现(利用sql嵌套查询)可以做得更漂亮。如果moodle不想这样,就还得再多动点儿小手术。
不管怎样,都得先是我的方法行得通才行。大家帮忙测试一下吧,尤其是词汇多的,更能测测性能。
这个附件是mod/glossary/sql.php的diff,针对的是cvs的当前版本
这个是需要的数据库,内容是汉字和字母对照表,用
shell$ mysql moodle < add_utf8_index_db.sql
倒入到mysql中
shell$ mysql moodle < add_utf8_index_db.sql
倒入到mysql中
新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附件建一个数据库
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附件建一个数据库