CMS made simple录入文章时“别名只能包含字母和数字”错误的一点改进

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');

再保存汉字内容,就不再提示错误了。

原文地址:https://www.cnblogs.com/anjo/p/2476118.html