PHPCMS是怎么更新容页URL的

来源:互联网 发布:网页优化怎么做 编辑:程序博客网 时间:2024/05/28 09:31

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


比如我现在想知道我选中其中一个栏目的时候,pc是怎么去更新这个栏目下面的文章内容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("找到了"),然后刷新刚才这个页面看下是不是只显示这几个字,如果是,那就找到了。

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

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

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

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;}
好嘛,貌似还要深入研究,我尝试把$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

0 0
原创粉丝点击