虽然在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页面纯静态功能就实现了,如果在操作过程中有什么不明白的可以评论留言或者邮件留言,我收到后会在第一时间解答。
