phpcms v9 欄目偽靜態完全自定義為欄目英文目錄名

viqecel發表於2017-12-01
1,後臺增加url規則,增加後.導航上,或分頁號上,會自動替換為靜態的樣式.類似www.abc.com/news/2/ 2表示頁碼
phpcms v9 的後臺擴充套件,url規則,新增兩個規則,

一個是名稱為category的規則,規則的前面的斜線可以去掉,不過可能影響分頁問題 
/{$catdir}/|/{$catdir}/{$page}/
url示例為 www.abc.com/news/
一個是名稱為show規則
{$catdir}/{$id}.html|{$catdir}/{$id}_{$page}.html
示例為www.abc.com/news/99.html



然後,找到想偽靜態的欄目,修改.生成html設定,生成Html全設定為否,url規則選擇自己剛才設定的.儲存,

最後更新欄目快取及批量更新url,不更新無效

2,如果為apache的伺服器空間,偽靜態規則如下,注意,要儲存在.htaccess 檔案中,並上傳到網站根目錄中,其它規則自己轉換


RewriteEngine on
#靜態檔案以及API目錄不需要偽靜態
RewriteRule ^(statics|api|uploadfile)(.*) - [L]
#欄目頁
RewriteRule ^([0-9A-Za-z_]*)$ index.php?m=content&c=index&a=lists&catdir=$1
RewriteRule ^([0-9A-Za-z_]*)/$ index.php?m=content&c=index&a=lists&catdir=$1
RewriteRule ^([0-9A-Za-z_]*)/([0-9]+)$ index.php?m=content&c=index&a=lists&catdir=$1&page=$2
RewriteRule ^([0-9A-Za-z_]*)/([0-9]+)/$ index.php?m=content&c=index&a=lists&catdir=$1&page=$2
#上面欄目分頁,是完全的字母加數字的形式,如www.abc.com/news/2 ,後面不帶其它字元,或加一個/字元,如果伺服器偽靜態匹配到了"域名/字母/數字/"的組合,則會自動跳轉到index.php?m=content&c=index&a=lists&catdir=$1&page=$2這個頁面中.所以.前面的規則不可重複,否則會錯亂.

#內容頁
RewriteRule ^([0-9A-Za-z_]*)/([0-9]+)\.html$ index.php?m=content&c=index&a=show&catdir=$1&id=$2


3,檔案,phpcms\phpcms\modules\content\index.php中
搜尋
$catid = intval($_GET['catid']);
一共兩處,修改為

 if(isset ($_GET['catid'])){   
                    $catid = intval($_GET['catid']);   
                }else{   
                    $catdir=$_GET['catdir'];   
                    $s=$this->_getCategoryId($catdir);   
                    $catid=$s[0][catid];                      
                } 
				
				
然後,在最下面
} 這個 大括號的前面增加一個函式,如下


 protected  function _getCategoryId($catdir){   
           $this->category_db = pc_base::load_model('category_model');   
           $result = $this->category_db->select(array('catdir'=>$catdir));   
           // print_r($result);   
            return $result;   
         } 

		 
		 
		 
4, 開啟phpcms\modules\content\classes\url.class.php,找到
  if (!$setting['ishtml']) { //如果不生成靜態
  將下面的:


$url = str_replace(array('{$catid}', '{$page}'), array($catid, $page), $urlrule);   
            if (strpos($urls, '\\')!==false) {  
                    $url = APP_PATH.str_replace('\\', '/', $urls);   
            }  
			
			
			
			整體替換為
			
			$domain_dir = '';   
            if (strpos($category['url'], '://')!==false && strpos($category['url'], '?')===false) {   
                if (preg_match('/^((http|https):\/\/)?([^\/]+)/i', $category['url'], $matches)) {   
                    $match_url = $matches[0];   
                    $url = $match_url.'/';   
                }   
                $db = pc_base::load_model('category_model');   
                $r = $db->get_one(array('url'=>$url), '`catid`');   
  
                if($r) $domain_dir = $this->get_categorydir($r['catid']).$this->categorys[$r['catid']]['catdir'].'/';   
            }   
            $categorydir = $this->get_categorydir($catid);   
            $catdir = $category['catdir'];   
            $year = date('Y',$time);   
            $month = date('m',$time);   
            $day = date('d',$time);   
            //echo $catdir;   
            $urls = str_replace(array('{$categorydir}','{$catdir}','{$year}','{$month}','{$day}','{$catid}','{$id}','{$prefix}','{$page}'),array($categorydir,$catdir,$year,$month,$day,$catid,$id,$prefix,$page),$urlrule);   
                       // echo $urls."<br>";   
                        if (strpos($urls, '\\')!==false) {  
                    $urls = APP_PATH.str_replace('\\', '/', $urls);   
            }   
                        $url = $domain_dir.$urls;






						

參考源 http://blog.ganhui0818.cn/article/335.htm

相關文章