最近一个资讯网站项目中,客户发现Phpcms v9发布文章后栏目为什么只更新了前面几页、后面的都没自动更新,于是找来问为什么、问这是不是PC V9的Bug,实际上这算不上Bug,试想下:栏目页HTML静态化后,如果有1000页,每次修改添加文章就全部更新一遍,岂不是要很多时间?今天CMSYOU在这里与大家探讨下这个问题,分享Phpcms v9发布文章后栏目只更新前面5页的修改自定义方法。
熟悉Phpcms的朋友一般知道,HTML静态化设置后,添加或者修改文章后,会自动更新文章内容页本身、对应栏目列表、以及首页的HTML静态文件index.html。
如果Phpcms v9默认修改添加文章后,在提交页面就更新生成该栏目列表的所有翻页HTML,这样会比较长时间停留在提交后的提示页面,反而会让用户感觉:Phpcms v9怎么这么卡?添加一篇文章提交后都卡半天?!岂不是反而造成不好的体验呢?
本着研究的态度,我们找到了添加修改文章的方法文件:phpcms/model/content_model.class.php,其中有关更新对应栏目页的方法是在223行、325行左右:
//生成静态
if(!$isimport && $data['status']==99) {
//在添加和修改内容处定义了 INDEX_HTML
if(defined('INDEX_HTML')) $html->index();
if(defined('RELATION_HTML')) $html->create_relation_html($catid);
}
从这里可以看出编辑修改文章后,会自动create_relation_html更新相关的html。从而找到对应的函数文件phpcms/modules/content/classes/html.class.php的390行左右:
/**
* 生成相关栏目列表、只生成前5页
* @param $catid
*/
public function create_relation_html($catid) {
for($page = 1; $page < 6; $page++) {
$this->category($catid,$page);
}
//检查当前栏目的父栏目,如果存在则生成
$arrparentid = $this->categorys[$catid]['arrparentid'];
if($arrparentid) {
$arrparentid = explode(',', $arrparentid);
foreach ($arrparentid as $catid) {
if($catid) $this->category($catid,1);
}
}
}
修改上面的代码中的数字6,可以适当改大一些,比如改成101,则是更新生成列表页的前100页,生成HTML的时间上不会太久,这样就可以实现自动更新栏目页的页数了。
今天的分享就到这里,欢迎大家抱着研究的心态自定义Phpcms,多多分享,如果有好的文章也欢迎投稿,投稿email:info@cmsyou.com。
同时欢迎大家收听CMSYOU官方微博,相互探讨Phpcms!
点击加载更多