CMS made simple又称CMSMS,是一款备受好评的轻量级CMS系统。在使用过程中,我发现它有一点点不方便的是,在后台录入文章过程中,“菜单标题”一栏不可以是中文,否则会提示:“别名只能包含字母和数字”。所以只能先录入几个英文字母,保存后,再次进入编辑,再改为中文。虽然是个小问题,但还是比较不方便,影响使用的流畅感。
根据错误提示,找到它位于D:\www\cmsms\admin\lang\ext\zh_CN\admin.inc.php文件:
$lang['admin']['aliasmustbelettersandnumbers'] = '别名只能包含字母和数字';
再查'aliasmustbelettersandnumbers',找到D:\www\cmsms\lib\classes\class.contentoperations.inc.php文件,代码:
function CheckAliasError($alias, $content_id = -1) { $gCms = cmsms(); $db = $gCms->GetDb(); $error = FALSE; if (preg_match('/^\d+$/', $alias)) { $error = lang('aliasnotaninteger'); } else if (!preg_match('/^[\-\_\w]+$/', $alias)) { $error = lang('aliasmustbelettersandnumbers'); } else { $params = array($alias); $query = "SELECT content_id FROM ".cms_db_prefix()."content WHERE content_alias = ?"; if ($content_id > -1) { $query .= " AND content_id != ?"; $params[] = $content_id; } $row = $db->GetRow($query, $params); if ($row) { $error = lang('aliasalreadyused'); } } return $error; }
可是,调用CheckAliasError的地方有不少,在哪里修改呢?后来想到,可以修改D:\www\cmsms\lib\classes\class.ContentBase.php里的SetAlias()函数。原来,在设置Alias属性时,这里会进行判断,如果发现含有非法字符,则会出现上述提示,代码如下:
if ($alias == '' && $doAutoAliasIfEnabled && $config['auto_alias_content'] == true) { $alias = trim($this->mMenuText); if ($alias == '') { $alias = trim($this->mName); } $tolower = true; $alias = munge_string_to_url($alias, $tolower); // Make sure auto-generated new alias is not already in use on a different page, if it does, add "-2" to the alias $contentops = $gCms->GetContentOperations(); $error = $contentops->CheckAliasError($alias, $this->Id()); if ($error !== FALSE) 。。。。。。
这里的逻辑是,如果alias为空,且自动生成alias为真,则取mMenuText即菜单文字。所以症结已经完全找到。我把第三行改为
$alias = date('Ymd-his');
再保存汉字内容,就不再提示错误了。