来自 编程 2019-06-21 18:13 的文章
当前位置: 365bet手机版网址 > 编程 > 正文

本着PHPCMS绑定二级域名地址不科学难题浅析,P

就目前phpcms2008下PHPCMS绑定二级域名地址不正确问题分析,在生成栏目的url时有bug,如下所示:

最近在做一个phpcms的模版,自己在后台设置了半天的URL规则,老是不变,所以没办法,只得来看看phpcms是怎么更新内容页url的。很多时候,当我们在网上找不到相关的文章时,那就得自己去研究源代码了,当然要是能搜到文章的话我个人是比较懒,难得去研究代码,嘿嘿,好了,方便大家,所以就在这里简单的记录一下了。

一、在PHPcms V9管理后台设置手机门户

比如当栏目wfuyu 绑定二级域名为 parentdir='ja/ywja/ydzd/', catdir ='wfuyu'的时候

比如我现在想知道我选中其中一个栏目的时候,pc是怎么去更新这个栏目下面的文章内容url的呢?看下我是怎么找代码的吧。

1.1、开启手机网站。位置:模块 》手机门户 》 添加手机站点,具体设置可参照截图:

生成栏目的url为 

首先进入后台,找到“内容--发布管理--批量更新URL”,我是用的火狐浏览器,所以在页面中点击“右键--此框架--在新标签中打开框架”,这样就把这个更新内容页url的页面给单独开个一个火狐标签页,方便刷新和die的操作,新开的标签页大概是:域名/index.php?m=content&c=create_html&a=update_urls&pc_hash=xxx。根据这个地址,只要对pc稍微熟悉点(这个是基础了,不知道的话就全站搜"update_urls()")的就会找到这个文件所在的地方:phpcms/modules/content/create_html.php,中update_urls()方法了,当然,你可在这个方法中写一个die("找到了"),然后刷新刚才这个页面看下是不是只显示这几个字,如果是,那就找到了。

图片 1

原因是php代码里面有一行代码替换出错

那么接下来就应该是操作这个文件中的update_urls()方法了,在这个文件中一搜就能定位:public function update_urls():

填写站点名和LOGO文件相对位置,绑定用于手机网站的二级域名m.cmsyou.com,域名以

找到phpcms/url.class.php,大概第79行位置

public function update_urls() {   if(isset($_POST['dosubmit'])) {    extract($_POST,EXTR_SKIP);    $this->url = pc_base::load_app_class('url');     $modelid = intval($_POST['modelid']);    if($modelid) {     //设置模型数据表名     $this->db->set_model($modelid);     $table_name = $this->db->table_name;      if($type == 'lastinput') {      $offset = 0;     } else {      $page = max(intval($page), 1);      $offset = $pagesize*($page-1);     }     $where = ' WHERE status=99 ';     $order = 'ASC';          if(!isset($first) && is_array($catids) && $catids[0] > 0)  {      setcache('url_show_'.$_SESSION['userid'], $catids,'content');      $catids = implode(',',$catids);      $where .= " AND catid IN($catids) ";      $first = 1;     } elseif($first) {      $catids = getcache('url_show_'.$_SESSION['userid'],'content');      $catids = implode(',',$catids);      $where .= " AND catid IN($catids) ";     } else {      $first = 0;     }      if($type == 'lastinput' && $number) {      $offset = 0;      $pagesize = $number;      $order = 'DESC';     } elseif($type == 'date') {      if($fromdate) {       $fromtime = strtotime($fromdate.' 00:00:00');       $where .= " AND `inputtime`>=$fromtime ";      }      if($todate) {       $totime = strtotime($todate.' 23:59:59');       $where .= " AND `inputtime`<=$totime ";      }     } elseif($type == 'id') {      $fromid = intval($fromid);      $toid = intval($toid);      if($fromid) $where .= " AND `id`>=$fromid ";      if($toid) $where .= " AND `id`<=$toid ";     }          if(!isset($total) && $type != 'lastinput') {      $rs = $this->db->query("SELECT COUNT(*) AS `count` FROM `$table_name` $where");      $result = $this->db->fetch_array($rs);            $total = $result[0]['count'];       $pages = ceil($total/$pagesize);      $start = 1;     }          $rs = $this->db->query("SELECT * FROM `$table_name` $where ORDER BY `id` $order LIMIT $offset,$pagesize");     $data = $this->db->fetch_array($rs);     foreach($data as $r) {      if($r['islink'] || $r['upgrade']) continue;      //更新URL链接      $this->urls($r['id'], $r['catid'], $r['inputtime'], $r['prefix']);      }      if($pages > $page) {      $page  ;      $http_url = get_url();      $creatednum = $offset   count($data);      $percent = round($creatednum/$total, 2)*100;       $message = L('need_update_items',array('total'=>$total,'creatednum'=>$creatednum,'percent'=>$percent));      $forward = $start ? "?m=content&c=create_html&a=update_urls&type=$type&dosubmit=1&first=$first&fromid=$fromid&toid=$toid&fromdate=$fromdate&todate=$todate&pagesize=$pagesize&page=$page&pages=$pages&total=$total&modelid=$modelid" : preg_replace("/&page=([0-9] )&pages=([0-9] )&total=([0-9] )/", "&page=$page&pages=$pages&total=$total", $http_url);     } else {      delcache('url_show_'.$_SESSION['userid'],'content');      $message = L('create_update_success');      $forward = '?m=content&c=create_html&a=update_urls';     }     showmessage($message,$forward,200);    } else {     //当没有选择模型时,需要按照栏目来更新     if(!isset($set_catid)) {      if($catids[0] != 0) {       $update_url_catids = $catids;      } else {       foreach($this->categorys as $catid=>$cat) {        if($cat['child'] || $cat['siteid'] != $this->siteid || $cat['type']!=0) continue;        $update_url_catids[] = $catid;       }      }      setcache('update_url_catid'.'-'.$this->siteid.'-'.$_SESSION['userid'],$update_url_catids,'content');      $message = L('start_update_urls');      $forward = "?m=content&c=create_html&a=update_urls&set_catid=1&pagesize=$pagesize&dosubmit=1";      showmessage($message,$forward,200);     }     $catid_arr = getcache('update_url_catid'.'-'.$this->siteid.'-'.$_SESSION['userid'],'content');     $autoid = $autoid ? intval($autoid) : 0;     if(!isset($catid_arr[$autoid])) showmessage(L('create_update_success'),'?m=content&c=create_html&a=update_urls',200);     $catid = $catid_arr[$autoid];      $modelid = $this->categorys[$catid]['modelid'];     //设置模型数据表名     $this->db->set_model($modelid);     $table_name = $this->db->table_name;      $page = max(intval($page), 1);     $offset = $pagesize*($page-1);     $where = " WHERE status=99 AND catid='$catid'";     $order = 'ASC';          if(!isset($total)) {      $rs = $this->db->query("SELECT COUNT(*) AS `count` FROM `$table_name` $where");      $result = $this->db->fetch_array($rs);      $total = $result[0]['count'];       $pages = ceil($total/$pagesize);      $start = 1;     }     $rs = $this->db->query("SELECT * FROM `$table_name` $where ORDER BY `id` $order LIMIT $offset,$pagesize");     $data = $this->db->fetch_array($rs);          foreach($data as $r) {      if($r['islink'] || $r['upgrade']) continue;      //更新URL链接      //print_r($data);die;      $this->urls($r['id'], $r['catid'], $r['inputtime'], $r['prefix']);     }     if($pages > $page) {      $page  ;      $http_url = get_url();      $creatednum = $offset   count($data);      $percent = round($creatednum/$total, 2)*100;      $message = '【'.$this->categorys[$catid]['catname'].'】 '.L('have_update_items',array('total'=>$total,'creatednum'=>$creatednum,'percent'=>$percent));      $forward = $start ? "?m=content&c=create_html&a=update_urls&type=$type&dosubmit=1&first=$first&fromid=$fromid&toid=$toid&fromdate=$fromdate&todate=$todate&pagesize=$pagesize&page=$page&pages=$pages&total=$total&autoid=$autoid&set_catid=1" : preg_replace("/&page=([0-9] )&pages=([0-9] )&total=([0-9] )/", "&page=$page&pages=$pages&total=$total", $http_url);     } else {      $autoid  ;      $message = L('updating').$this->categorys[$catid]['catname']." ...";      $forward = "?m=content&c=create_html&a=update_urls&set_catid=1&pagesize=$pagesize&dosubmit=1&autoid=$autoid";     }     showmessage($message,$forward,200);    }    } else {    $show_header = $show_dialog  = '';    $admin_username = param::get_cookie('admin_username');    $modelid = isset($_GET['modelid']) ? intval($_GET['modelid']) : 0;        $tree = pc_base::load_sys_class('tree');    $tree->icon = array('   │ ','   ├─ ','   └─ ');    $tree->nbsp = '   ';    $categorys = array();    if(!empty($this->categorys)) {     foreach($this->categorys as $catid=>$r) {      if($this->siteid != $r['siteid'] || ($r['type']!=0 && $r['child']==0)) continue;      if($modelid && $modelid != $r['modelid']) continue;      $r['disabled'] = $r['child'] ? 'disabled' : '';      $categorys[$catid] = $r;     }    }    $str  = "<option value='$catid' $selected $disabled>$spacer $catname</option>";     $tree->init($categorys);    $string .= $tree->get_tree(0, $str);    include $this->admin_tpl('update_urls');   }  }

 

 $url_a[1] = str_replace($domain_dir, $domain_url.'/', $url_a[0]); 

然后在“选择栏目范围”中我就随便选中一个栏目,点击“开始更新”。不过记得随便找几个判断的地方die掉,这样你就能找到到底是那句话起到更新url作用了。经过本人多次的die,最后终于找到这个方法中最关键的一句话:$this->urls($r['id'], $r['catid'], $r['inputtime'], $r['prefix']);

1.2、创建栏目分类,位置:模块 》手机门户 》 分类管理,具体设置可参照截图:

这样应该改成下面

这句话就是更新栏目内容url的代码了,当然我们又得去看下这个方法是怎么执行的。就在本文件中,找到了:

 

$url_a[1] = $domain_url.'/'.substr($url_a[0],strpos($url_a[0],$domain_dir) strlen($domain_dir)); 
private function urls($id, $catid= 0, $inputtime = 0, $prefix = ''){   $urls = $this->url->show($id, 0, $catid, $inputtime, $prefix,'','edit');   //更新到数据库   $url = $urls[0];   $this->db->update(array('url'=>$url),array('id'=>$id));   //echo $id; echo "|";   return $urls;  }

图片 2

针对目前的v9版本不知道有没有出现这样的问题,没测试过

好嘛,貌似还要深入研究,我尝试把$url给打印出来,结果发现就是最后存在模型表中url的字段(假设刚选的是新闻模型,那对应的就是v9_news表中的url字段了),那继续追下去,从update_urls()的第三行看到“$this->url

pc_base::load_app_class('url');”这句话,根据pc的pc_base::load_app_class可以知道这个又是包含的同模块下面的url类,便是:phpcms/modules/content/class/url.class.php

打开这个文件找到show方法,我们不难发现最关键的是这:

if($content_ishtml && $url) {     if ($domain_dir && $category['isdomain']) {      $url_arr[1] = $html_root.'/'.$domain_dir.$urls;      $url_arr[0] = $url.$urls;     } else {      $url_arr[1] = $html_root.'/'.$urls;      $url_arr[0] = WEB_PATH == '/' ? $match_url.$html_root.'/'.$urls : $match_url.rtrim(WEB_PATH,'/').$html_root.'/'.$urls;     }    } elseif($content_ishtml) {     $url_arr[0] = WEB_PATH == '/' ? $html_root.'/'.$urls : rtrim(WEB_PATH,'/').$html_root.'/'.$urls;     $url_arr[1] = $html_root.'/'.$urls;    } else {     $url_arr[0] = $url_arr[1] = APP_PATH.$urls;    }

我没有特别去解释代码,因为这个解释起来的话蛮多的,可谓牵一发而动全身,我只是带大家一起去找相应操作的代码,那么接下来你想怎么改就看你自己的了。最后,有兴趣交流欢的朋友可以加php群:624849700

版权声明:本文为博主原创文章,未经博主允许不得转载。


创建好分类,绑定相应的栏目。

程序员人生 www.wfuyu.com 提供Php教程,php开源,web前端

这样,手机网站在管理后台的配置基本上完成。

 

二、域名解析、手机域名绑定

版权声明:本文为博主原创文章,未经博主允许不得转载。

2.1、到域名管理中心,解析二级域名m.cmsyou.com到PC网站所在的IP,同时在主机控制面板,添加绑定m.cmsyou.com这个域名。


2.2、修改配置文件caches/configs/route.php,在'default'=>array('m'=>'content', 'c'=>'index', 'a'=>'init'),后面添加一行,修改为:

 

return array(  
'default'=>array('m'=>'content', 'c'=>'index', 'a'=>'init'),  
'm.cmsyou.com'=>array('m'=>'wap', 'c'=>'index', 'a'=>'init','data'=>array('GET'=>array('siteid'=>1))),  
);  

 

2.3、在管理后台刷新缓存,等域名解析生效后,访问m.cmsyou.com试试。由于手机网站需要用index.php作为引导,可以在主机控制面板里边设置index索引次序,index.php调整先后次序高于index.html。

如果主机控制面板里边没有这个设置项,那么就需要手机模板(index.html或者header.html)里边加入一段js:

 

<script>  
try {if( self.location == "http://wap.domain.com/" ) {   
top.location.href = "http://wap.domain.com/index.php";   
}   
}   
catch(e) {}  
</script>  

  

三、修改自定义手机网站模板,开始制作自适应网站吧!

域名解析生效后,通过m.cmsyou.com就能访问到手机网站了,那么怎么控制手机网站显示的样式呢,自然是修改定制手机模板。

具体位置:/phpcms/templates/default/wap/或者自定义模板目录。

由于手机网站的分类只能绑定实际的文章、产品等模型的栏目,不能绑定单页,那么大家可以通过if做到栏目内容显示的多样化。具体用怎么样的方法,大家可以关注CMSYOU微信公众号:CMSYOU,通过提问或者互动。

 

转自:

本文由365bet手机版网址发布于编程,转载请注明出处:本着PHPCMS绑定二级域名地址不科学难题浅析,P

关键词: