虽然在phpcmsv9中可以通过规则实现tags标签页面的伪静态化,但相比伪静态,纯静态页面的访问速度更快,而且使用纯静态页面还可以减少服务器的压力,降低资源的消耗,尤其对访问量较大的网站来说,页面纯静态化尤为重要。因此,如果可以实现纯静态化就尽可能的生成纯静态页面。
在phpcmsv9中,栏目页、内容页都可以通过框架自身的规则实现纯静态化,在不修改程序的话,tags标签页面最多只能实现伪静态化。那如果想要实现tags页面的纯静态页面该怎么做呢?
既然内容页、列表页已经实现了纯静态化,何不参照它们来实现呢?不错,今天要跟大家分享的tags页面纯静态化的实现方法就是参考列表页、内容页的纯静态化实现的。至于具体如何参照这里就不详述了,下面直接上tags页面纯静态化的实现方法步骤。
1、添加tags页面生成方法
找到根目录下 phpcms/modules/content 下面的 create_html.php 文件,在这个类文件里面添加下面两个类方法:(添加到 batch_show() 方法后面吧,看下面的截图)
/** * 批量生成标签页 */ public function tag() { //获取所有tag $this->html = pc_base::load_app_class('html'); $keyword_db = pc_base::load_model('keyword_model'); $t = $keyword_db->select(); foreach ($t as $tags){ $tag = $tags['keyword']; $datas = $this->getTagList($tag); //$tag = iconv('utf-8', 'gbk', $tag);//如果用的是gbk格式的phpcmsv9这句不用加,若果用的是utf-8版本的,在本地测试需要加,线上不用加,否则会出现页面404错误。 $this->html->tag('tag', $tag, $datas); } showmessage(L('operation_success'),HTTP_REFERER); } /** * 获取关键词关联文章数据 * @param $tagName * @return mixed */ public function getTagList($tagName) { $tag = $tagName; $keyword_db = pc_base::load_model('keyword_model'); $keyword_data_db = pc_base::load_model('keyword_data_model'); //获取标签id $r = $keyword_db->get_one(array('keyword'=>$tag, 'siteid'=>$this->siteid), 'id'); if (!$r['id']) showmessage('不存在此关键字!'); $tagid = intval($r['id']); $page = max($_GET['page'], 1); $pagesize = 20; $where = '`tagid`=\''.$tagid.'\' AND `siteid`='.$this->siteid; $infos = $keyword_data_db->listinfo($where, '`id` DESC', $page, $pagesize); $pages = $keyword_data_db->pages; $total = $keyword_data_db->number; $arrRes['pages'] = $pages; $arrRes['total'] = $total; if (is_array($infos)) { $datas = array(); foreach ($infos as $info) { list($contentid, $modelid) = explode('-', $info['contentid']); $this->db->set_model($modelid); $res = $this->db->get_one(array('id'=>$contentid), 'title, description, url, inputtime, style'); $res['title'] = str_replace($tag, '<font color="#f00">'.$tag.'</font>', $res['title']); $res['description'] = str_replace($tag, '<font color="#f00">'.$tag.'</font>', $res['description']); $datas[] = $res; } } $arrRes['info'] = $datas; return $arrRes; }
2、修改 html.class.php 文件
找到根目录下 phpcms/modules/content/classes 下面的 html.class.php 文件,然后在文件中添加如下代码:
/** * 生成tag页面 * @param $file * @param $tagName * @param string $data * @return bool|int|void */ public function tag($file, $tagName, $data='') { $file = PHPCMS_PATH.safe_replace($file).'/'.$tagName.'.html';//这是tags页面url规则,即,你想把生成的tags放在哪,怎么命名 $datas = $data['info']; $total = $data['total']; $pages = $data['pages']; $siteid = $this->siteid; $style = $this->sitelist[$siteid]['default_style']; if (!$total || !trim($tagName)) { return false; } ob_start(); include template('content','tag_list',$style); return $this->createhtml($file); }
3、添加模板文件
在你使用的模板文件里的content文件夹下添加tag_list.html模板文件,因为在上面第二步中生成tags页面使用的是模板里面的tag_list.html文件。(如果你用的是系统默认模板,这步就不需要做了)
4、tag_list.html页面的具体使用
在 tag_list.html 页面我们无需在查数据库,可以直接使用的变量有:
{$tag}:当前标签名称 {$total}:当前标签下关联的文章数 $datas:当前标签关联的文章的相关数据,可以直接loop循环输出文章列表,就像在列表页循环输出文章列表一样 {loop $datas $r} <li> <div><img src="{$r[thumb]}" alt="{$[tiltle]}"/><a href="{$r[url]}">{$r[title]}</a><span>{date('Y-m-d',$r[inputtime])}</span></div> <div>{$r[description]}</div> </li> {/loop}
5、在后台添加生成tags页面的功能菜单
扩展——菜单管理——内容——发布管理——添加子菜单
然后在后台下就可以看到批量更新tags页的功能了,这个功能可以同时生成新的tags页面
生成后的效果
当然了,生成的tag页面也可以用英文,在phpcms的公共函数库iconv.func.php文件中就有一个函数函数是中文转英文的,如果不找不到也没关系,因为在phpcmsv9在将新的tag标签存入数据表时将tag转成了拼音存入数据库,也就是说tag数据表中不仅保存了tag的原来的名字,还保存了拼音。
好了,tag页面纯静态功能就实现了,如果在操作过程中有什么不明白的可以评论留言或者邮件留言,我收到后会在第一时间解答。