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

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

  • 相关阅读:
    用JAVA自己画一张二维码
    20.custom自定义线程池
    19.线程池的使用
    7.volatile关键字
    8.volatile原子性
    10.线程通信CountDownLatch
    9.线程通信wait、notify
    11.线程通信CountDownLatch
    14.ThreadLocal
    13.FutureTask异步计算
  • 原文地址:https://www.cnblogs.com/anjo/p/2476118.html
Copyright © 2020-2023  润新知