本文作者:心月

phpcmsv9中tags标签页面纯静态化的实现方法和步骤

心月IT博客 07-27
phpcmsv9中tags标签页面纯静态化的实现方法和步骤摘要:虽然在phpcmsv9中可以通过规则实现tags标签页面的伪静态化,但相比伪静态,纯静态页面的访问速度更快,而且使用纯静态页面还可以减少服务器的压力,降低资源的消耗,尤其对访问量较大的网站来说,页面纯静态化尤为重要。因此,如果可以实现纯静态化就尽可能的生成纯静态页面。

    虽然在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;
    }

添加tags列表页生成方法

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);
    }

生成tag页面方法

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页的功能了,这个功能可以同时生成新的tags页面

4.jpg

生成后的效果

tag静态页面生成效果

当然了,生成的tag页面也可以用英文,在phpcms的公共函数库iconv.func.php文件中就有一个函数函数是中文转英文的,如果不找不到也没关系,因为在phpcmsv9在将新的tag标签存入数据表时将tag转成了拼音存入数据库,也就是说tag数据表中不仅保存了tag的原来的名字,还保存了拼音。

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

文章版权及转载声明:

本文由 心月IT技术博客 博主整理于 07-27
若转载请注明原文及出处:https://www.xinyueseo.com/cms/291.html

分享到:
赞(
发表评论
快捷输入:

验证码

    评论列表 (有 4 条评论,人围观)参与讨论
    网友昵称:心月IT博客网友
    心月IT博客网友游客01-16回复
    这个TAG列表没有生成静态对吗?只是关键词生成了静态文件
    网友昵称:心月IT博客
    心月IT博客博主2020-01-16回复
    心月IT博客网友这里确实只是关键词生成静态文件,tag列表的静态文件可以参考这篇文章:http://www.xinyueseo.com/cms/570.html(tags标签页面纯静态化分页实现步骤),这里的关键词生成静态文件的一些小问题,在静态化分页实现步骤种都处理好了
    网友昵称:心月IT博客网友
    心月IT博客网友游客11-10回复
    b博主你这个评论功能有点不好用,打不了字。你用PHPCMS做的二开把。我也是pc粉丝
    网友昵称:心月IT博客
    心月IT博客博主2019-11-11回复
    心月IT博客网友多谢提醒,鼠标事件冲突的问题,已经修复了