Quantcast
Channel: 影视爱好者 - 优化推广
Viewing all articles
Browse latest Browse all 10

phpcms中文路径URL怎么实现?

$
0
0

     最近我看了一些网站,搜索关键词时发现一些运用中文路径的网站排名都挺不错,个人感觉中文url对于网站优化来说确实比英文或者数字更有优势,搜索匹配值较高,目前很多门户网站也在运用中文路径。我本人不懂什么代码,找了一篇关于phpcms中文URL要怎样设置的文章,给大家分享一下。

首先,在 phpcms的include目录下,有global.func.php 文件。

找到 function createhtml($file) 这个函数。

说明下,这个函数是用来生成html静态文件的。

我们只需要修改下这个函数即可。

修改后如下:

 function createhtml($file) { //scofield 2011-5-12 //for create file as chinses name $file = iconv('UTF-8', 'GBK', $file); $data = ob_get_contents(); ob_clean(); dir_create(dirname($file)); $strlen = file_put_contents($file, $data); @chmod($file,0777); return $strlen; }

$file = iconv(‘UTF-8′, ‘GBK’, $file); 主要增加了这一句。该句实现了 编码转换。这样生成的 html 文件或者路径 都可以带有中文。

 其次,在include目录下还有 include/url.class.php 这个文件。

打开后找到 function show($contentid, $page = 0, $catid = 0, $time = 0, $prefix = ”) 这个函数。

添加 如下语句

 //scofield 2011-5-12 //get root category name $catetemp = $this->db->get_one("SELECT * FROM `".DB_PRE."category` WHERE catid = $catid LIMIT 1"); $arrparentidarr = explode(',',$catetemp['arrparentid']); $rootidtemp = $arrparentidarr[count($arrparentidarr)-1]; $rootcatetemp = $this->db->get_one("SELECT * FROM `".DB_PRE."category` WHERE catid = $rootidtemp LIMIT 1"); $rootcatename = $rootcatetemp['catname']; //for url roles add content title and category name $showtitle = strip_tags($r['title']); $catdirname = $C['catname'];

 完整的函数如下:

 function show($contentid, $page = 0, $catid = 0, $time = 0, $prefix = '') { global $PHPCMS; if($catid == 0 || $time == 0 || $prefix == '') { $r = $this->db->get_one("SELECT * FROM `".DB_PRE."content` WHERE `contentid`='$contentid'"); if($r['isupgrade'] && !empty($r['url'])) { if($page>1) { $base_name = basename($r['url']); $fileext = fileext($base_name); $url_a[0] = $url_a[1] = preg_replace('/.'.$fileext.'$/','_'.$page.'.'.$fileext,$r['url']); return $url_a; } else { $url_a[0] = $url_a[1] = $r['url']; return $url_a; } } $catid = $r['catid']; $time = $r['inputtime']; if(!$prefix) $prefix = $r['prefix']; } if(!isset($this->CATEGORY[$catid])) return false; $C = cache_read('category_'.$catid.'.php', '', 1); $tag = 0; if(preg_match('/:\\/\\//',$C['url'])) { $tag = 1; $arr_url = preg_split('/\\//', $C['url']); $domain = 'http://'.$arr_url[2]; $domain1 = 'http://'.$arr_url[2].'/'; $info = $this->db->get_one("SELECT * FROM `".DB_PRE."category` WHERE `url` IN ('$domain', '$domain1') LIMIT 1"); $crootdir = $info['parentdir'].$info['catdir'].'/'; } $categorydir = $C['parentdir'].$C['catdir']; $catdir = $C['catdir']; //scofield 2011-5-12 //for url roles add content title and category name $showtitle = strip_tags($r['title']); $catdirname = $C['catname']; //scofield 2011-5-12 //get root category name $catetemp = $this->db->get_one("SELECT * FROM `".DB_PRE."category` WHERE catid = $catid LIMIT 1"); $arrparentidarr = explode(',',$catetemp['arrparentid']); $rootidtemp = $arrparentidarr[count($arrparentidarr)-1]; if($rootidtemp) { $rootcatetemp = $this->db->get_one("SELECT * FROM `".DB_PRE."category` WHERE catid = $rootidtemp LIMIT 1"); $rootcatename = $rootcatetemp['catname']; }else { $rootcatename = $catdirname ; } $fileext = $this->PHPCMS['fileext']; $year = date('Y', $time); $month = date('m', $time); $day = date('d', $time); $modelid = $C['modelid']; $urlruleid = $this->MODEL[$modelid]['show_urlruleid']; $urlrules = explode('|', $this->URLRULE[$urlruleid]); $urlrule = $page < 2 ? $urlrules[0] : $urlrules[1]; if($this->MODEL[$modelid]['ishtml']) { if($prefix) { $contentid = $prefix; } elseif($PHPCMS['enable_urlencode']) { $contentid = hash_string($contentid); } } eval("\\$url = \\"$urlrule\\";"); if($tag) { if(!(strpos($url, $crootdir)===0)) { $url = $crootdir.$url; } $url_a[0] = $url; $url_a[1] = $domain1.str_replace($crootdir, '', $url); } else { $url_a[0] = $url_a[1] = $url; } return $url_a; }

 说明下,这个函数是生成 文章内容页要用到的函数。

 同样,在这个文件中还有 个 function category($catid, $page = 0, $isurls = 0, $type = 3) 这个函数

也需要修改。添加如下代码

 //scofield 2011-5-12 add $catdirname = $C['catname']; //scofield 2011-5-12 //get root category name $parentidtemp = $C['parentid']; $catetemp = $this->db->get_one("SELECT * FROM `".DB_PRE."category` WHERE catid = $parentidtemp LIMIT 1"); $parentcatename = $catetemp['catname'].'/'.$catdirname;

 完整的函数代码如下:

 function category($catid, $page = 0, $isurls = 0, $type = 3) { if(!isset($this->CATEGORY[$catid])) return false; $C = cache_read('category_'.$catid.'.php', '', 1); if($C['type'] == 0) { $modelid = $C['modelid']; $urlruleid = $this->MODEL[$modelid]['category_urlruleid']; } elseif($C['type'] == 1) { $urlruleid = $C['category_urlruleid']; } elseif($C['type'] == 2) { return $C['url']; } if(is_numeric($page)) $page = intval($page); $arrparentids = explode(',',$C['arrparentid']); $domain_dir = $domain_url = ''; if(preg_match('/:\\/\\//', $C['url']) && (substr_count($C['url'], '/')<4)) { $url_a[0] = $C['parentdir'].$C['catdir'].'/index.'.$this->PHPCMS['fileext']; $url_a[1] = $C['url']; return $type<3 ? $url_a[$type] : $url_a; } else { $count = count($arrparentids)-1; for($i=$count; $i>=0; $i--) { if(preg_match('/:\\/\\//', $this->CATEGORY[$arrparentids[$i]]['url']) && (substr_count($this->CATEGORY[$arrparentids[$i]]['url'], '/')<4)) { $domain_dir = $this->CATEGORY[$arrparentids[$i]]['parentdir'].$this->CATEGORY[$arrparentids[$i]]['catdir'].'/'; $domain_url = $this->CATEGORY[$arrparentids[$i]]['url']; break; } } } $categorydir = $C['parentdir'].$C['catdir']; $catdir = $C['catdir']; //scofield 2011-5-12 add $catdirname = $C['catname']; //scofield 2011-5-12 //get root category name $parentidtemp = $C['parentid']; $catetemp = $this->db->get_one("SELECT * FROM `".DB_PRE."category` WHERE catid = $parentidtemp LIMIT 1"); $parentcatename = $catetemp['catname'].'/'.$catdirname; $fileext = $this->PHPCMS['fileext']; $urlrules = explode('|', $this->URLRULE[$urlruleid]); $urlrule = $page === 0 ? $urlrules[0] : $urlrules[1]; eval("\\$url = \\"$urlrule\\";"); if($C['type']==0 && $this->MODEL[$modelid]['ishtml'] && $domain_dir) { if(strpos($url, $domain_dir)===false) { $url_a[0] = $domain_dir.$url; } else { $url_a[0] = $url; } $url_a[1] = str_replace($domain_dir, $domain_url.'/', $url_a[0]); } else { $url_a[0] = $url_a[1] = $url; } return $type<3 ? $url_a[$type] : $url_a; }

 注意,在 show方法中,多了 $showtitle , $catdirname ,$rootcatename 这三个变量。 第一个是内容的标题,第二个是当前分类的名称,第三个是某分类的父分类的名称。

这样就可以生成 类似 http://www.aa.com/分类1/标题_1.html 这样的路径。

当然,我们还需要在phpcms后台更改下 URL规则,以使得phpcms支持中文路径。这个下面我们再说。

我们再来看 category 方法。 也多了几个要用的 变量。 $catdirname , $parentcatename  第一个是 当前分类的名称,第二个是某分类的父分类的名称。

 这几个变量,我们需要来更改phpcms的URL规则。

在phpcms后台->系统管理->其他设置->URL规则管理->管理URL规则。

我们找到 

Phpcms   category  √   {$categorydir}/index.{$fileext}|{$categorydir}/{$page}.{$fileext}   it/product/2.html    修 改 | 删除

这行,修改为

Phpcms  category   √   {$parentcatename}/index.{$fileext}|{$parentcatename}/{$page}.{$fileext} it/product/2.html    修 改 | 删除

 再将

Phpcms   category   √ 
{$catdir}/index.{$fileext}|{$catdir}/{$page}.{$fileext} news/2_1.html    修 改 | 删除

修改为

Phpcms   category   √   {$parentcatename}/index.{$fileext}|{$parentcatename}/{$page}.{$fileext} news/2_1.html  修 改 | 删除

 再将

Phpcms  show   √   {$year}/{$month}{$day}/{$contentid}.{$fileext}|{$year}/{$month}{$day}/{$contentid}_{$page}.{$fileext} 2006/1010/1_2.html  修 改 | 删除

修改为

Phpcms show   √ 
{$rootcatename}/{$showtitle}_{$contentid}.{$fileext}|{$rootcatename}/{$showtitle}_{$contentid}_{$page}.{$fileext} product/1_2.html 修 改 | 删除

 修改后的 URL规则就可以支持中文路径了。

 经过以上设置和修改,我们使得PHPCMS支持了中文路径,支持了中文URL。


Viewing all articles
Browse latest Browse all 10

Latest Images

Trending Articles





Latest Images