v9定时发布的简单实现方法[支持静态生成]

将以下代码放到 api/count.php 文件最后 的 ?>之前

//add 定时发布审核功能
$modelid = $modelid ? $modelid : intval($_GET[‘modelid‘]);
$content_db = $content_db ? $content_db : pc_base::load_model(‘content_model‘);
$content_db->set_model($modelid);
$where = ‘ status = 1 and inputtime <= ‘.SYS_TIME;
$r = $content_db->count($where);
if( !empty($r) ){ //执行update操作
  $content_db->update( array(‘status‘=>99),$where );
}

这样就行了.
然后记得修改文字发布需要审核才能通过,不然发出去直接就通过了.
另外就是发布时间要设置为未来的时间,这样才能定时.

不是严格意义上的定时发布,当有用户访问你的内容页时,触发了内容页的

<script language="JavaScript" src="{APP_PATH}api.php?op=count&id={$id}&modelid={$modelid}"></script>

  js,就会执行上面的通过审核代码.

注意,仅适用于伪静态.生成静态的需要额外的静态化操作.可跟帖说明是否需要,需求大可以提供代码.

静态方法:

//add 定时发布审核功能
$urlobj = pc_base::load_app_class(‘url‘, ‘content‘);
$html = pc_base::load_app_class(‘html‘, ‘content‘);

$modelid = $modelid ? $modelid : intval($_GET[‘modelid‘]);
$content_db = $content_db ? $content_db : pc_base::load_model(‘content_model‘);
$content_db->set_model($modelid);
$where = ‘ status = 1 and inputtime <= ‘.SYS_TIME;
$r = $content_db->count($where);
        if( !empty($r) ){ //执行update操作
        $ids = $content_db->select($where, ‘id,catid‘, $r, ‘‘, ‘‘, ‘id‘);
        foreach($ids AS $kid=>$v){
                $catid = $v[‘catid‘];
                $id = $kid;
                $r = $content_db->get_content($catid,$id);
                $urls = $urlobj->show($id, 0, $catid, $r[‘inputtime‘], $r[‘prefix‘],$r,‘add‘);
                if($urls[‘content_ishtml‘]) $html->show($urls[1],$urls[‘data‘],0);
                $html->index();
                $html->create_relation_html($catid);
        }
        $content_db->update( array(‘status‘=>99),$where );
        }

修改过的count.php文件已经提供:

<?php
defined(‘IN_PHPCMS‘) or exit(‘No permission resources.‘);
/**
 * 点击统计
 */
$db = ‘‘;
$db = pc_base::load_model(‘hits_model‘);
if($_GET[‘modelid‘] && $_GET[‘id‘]) {
	$model_arr = array();
	$model_arr = getcache(‘model‘,‘commons‘);
	$modelid = intval($_GET[‘modelid‘]);
	$hitsid = ‘c-‘.$modelid.‘-‘.intval($_GET[‘id‘]);
	$r = get_count($hitsid);
	if(!$r) exit;
    extract($r);
    hits($hitsid);
    echo "\$(‘#todaydowns‘).html(‘$dayviews‘);";
    echo "\$(‘#weekdowns‘).html(‘$weekviews‘);";
    echo "\$(‘#monthdowns‘).html(‘$monthviews‘);";
} elseif($_GET[‘module‘] && $_GET[‘id‘]) {
	$module = $_GET[‘module‘];
	if((preg_match(‘/([^a-z0-9_\-]+)/i‘,$module))) exit(‘1‘);
	$hitsid = $module.‘-‘.intval($_GET[‘id‘]);
	$r = get_count($hitsid);
	if(!$r) exit;
    extract($r);
    hits($hitsid);
}

/**
 * 获取点击数量
 * @param $hitsid
 */
function get_count($hitsid) {
	global $db;
    $r = $db->get_one(array(‘hitsid‘=>$hitsid));
    if(!$r) return false;
	return $r;
}

/**
 * 点击次数统计
 * @param $contentid
 */
function hits($hitsid) {
	global $db;
	$r = $db->get_one(array(‘hitsid‘=>$hitsid));
	if(!$r) return false;
	$views = $r[‘views‘] + 1;
	$yesterdayviews = (date(‘Ymd‘, $r[‘updatetime‘]) == date(‘Ymd‘, strtotime(‘-1 day‘))) ? $r[‘dayviews‘] : $r[‘yesterdayviews‘];
	$dayviews = (date(‘Ymd‘, $r[‘updatetime‘]) == date(‘Ymd‘, SYS_TIME)) ? ($r[‘dayviews‘] + 1) : 1;
	$weekviews = (date(‘YW‘, $r[‘updatetime‘]) == date(‘YW‘, SYS_TIME)) ? ($r[‘weekviews‘] + 1) : 1;
	$monthviews = (date(‘Ym‘, $r[‘updatetime‘]) == date(‘Ym‘, SYS_TIME)) ? ($r[‘monthviews‘] + 1) : 1;
	$sql = array(‘views‘=>$views,‘yesterdayviews‘=>$yesterdayviews,‘dayviews‘=>$dayviews,‘weekviews‘=>$weekviews,‘monthviews‘=>$monthviews,‘updatetime‘=>SYS_TIME);
    return $db->update($sql, array(‘hitsid‘=>$hitsid));
}

//add 定时发布审核功能
$urlobj = pc_base::load_app_class(‘url‘, ‘content‘);
$html = pc_base::load_app_class(‘html‘, ‘content‘);

$modelid = $modelid ? $modelid : intval($_GET[‘modelid‘]);
$content_db = $content_db ? $content_db : pc_base::load_model(‘content_model‘);
$content_db->set_model($modelid);
$where = ‘ status = 1 and inputtime <= ‘.SYS_TIME;
$r = $content_db->count($where);
	if( !empty($r) ){ //执行update操作
	$ids = $content_db->select($where, ‘id,catid‘, $r, ‘‘, ‘‘, ‘id‘);
	foreach($ids AS $kid=>$v){
                $catid = $v[‘catid‘];
                $id = $kid;
                $r = $content_db->get_content($catid,$id);
                $urls = $urlobj->show($id, 0, $catid, $r[‘inputtime‘], $r[‘prefix‘],$r,‘add‘);
                if($urls[‘content_ishtml‘]) $html->show($urls[1],$urls[‘data‘],0);
                $html->index();
                $html->create_relation_html($catid);
	}
  $content_db->update( array(‘status‘=>99),$where );
}

?>
$(‘#hits‘).html(‘<?php echo $views?>‘);

注意:生成静态的网站请看14楼代码或者上面的附件, 需要访问了待定时发布的文章所在模型的任意一篇可正常浏览的文章即可,主要是为了触发上面的js,搜索引擎访问的无效,必须是人为访问,js能得以执行.

时间: 2024-11-26 03:27:27

v9定时发布的简单实现方法[支持静态生成]的相关文章

[转]mysql自动定时备份数据库的最佳方法-支持windows系统

网上有很多关于window下Mysql自动备份的方法,可是真的能用的也没有几个,有些说的还非常的复杂,难以操作. 我们都知道mssql本身就自带了计划任务可以用来自动备份,可是mysql咱们要怎么样自动有备份呢? 这个方法是用bat批处理来完成的. 假想环境:MySQL 安装位置:D:\Program Files\MySQL\MySQL Server 5.0\data 如图: 数据库名称为:952game数据库备份目的地:d:\db_bak\ (你想把数据库备份到哪个盘的路径)我想备到D盘的db

简单工厂方法,工厂模式,抽象工厂模式

简要对比 简单工厂方法是一种编程习惯,不是设计模式:一个电脑工厂,负责生产不同的电脑. 工厂模式:联想工厂负责生产联想电脑,戴尔工厂负责生产戴尔电脑(实际的工厂类),它们都有生产电脑的方法(实现公共接口). 抽象工厂:联想工厂既要生产电脑,又要生产鼠标:戴尔工厂既要生产电脑,又要生产鼠标(实际的工厂类).他们都有生产电脑和鼠标的方法(实现公共接口).其中生产鼠标和电脑都是用工厂模式实现(包含多个工厂模式). 抽象工厂模式的优点是可以保证同一个工厂返回的同一个产品族,比如使用罗技的工厂就只会生产罗

有什么简单的方法能够检测电脑是否支持U盘启动

基本上现在的电脑都是支持U盘启动的,但有一些用户的电脑比较老式,不确定是否支持U盘启动.那么有没有什么比较简单的方法能够检测电脑是否支持U盘启动呢?小编这就告诉你. 当前大部分的U盘启动制作工具把U盘制作成USB-HDD启动模式的,根据现在的主板情况来看,主板基本上都支持USB-HDD启动了.具体检测方法如下: 将你制作好的U盘启动盘插入主板USB接口(最好将其他无关的USB设备暂时拔掉),重启电脑,在系统自检的界面时根据提示不停地按U盘快速启动热键,会出现Boot Menu菜单,同时还有几种选

wordpress定时发布失败Missed Schedule解决方法

今天一位客户的网站设置了文章定时发布但却没有发布成功,提示Missed Schedule错误,把所有的插件都暂停了再设置定时发布也不行,那就只能寻找其他的解决方案了.ytkah查看一下有没相关修复插件找到了Scheduled Post Trigger,如下图所示,点击安装,然后启用, 插件不用其他的设置,重新测试一下文章定时发布功能,发布时间设为提前一两分钟,几分钟后再来看效果,这下没问题了 当然还有其他的解决方法,首先要排除wp-config.php文件里面的define(‘DISABLE_W

iframe子页面调用父页面javascript函数的方法(支持chrome和IE的通用方法)

iframe子页面调用父页面javascript函数的方法 今天遇到一个iframe子页面调用父页面js函数的需求,解决起来很简单,但是在chrome浏览器遇到一点小问题.顺便写一下iframe的父页面调用子页面javascript函数的方法吧,备用! 1.iframe子页面调用 父页面js函数 子页面调用父页面函数只需要写上window.praent就可以了.比如调用a()函数,就写成: window.praent.a(); 但是我在chrome浏览器下却发现此方法无效了!查了半天才了解,在c

phpcms v9 中 PHPSSO无法通讯解决方法(PHPSSO无法通讯间接影响phpcms v9注册会员无法通过“重名无法通过”)

问题的由来 怎么样使用 Cocos2d-x 快速开发游戏,方法很简单,你可以看看其自带的例程,或者从网上搜索教程,运行起第一个HelloWorld,然后在 HelloWorld 里面写相关逻辑代码,添加我们的层.精灵等 ~ 我们并不一定需要知道 Cocos2d-x 是如何运行或者在各种平台之上运行,也不用知道 Cocos2d-x 的游戏是如何运行起来的,它又是如何渲染界面的 ~~~ 两个入口 程序入口的概念是相对的,AppDelegate 作为跨平台程序入口,在这之上做了另一层的封装,封装了不同

Android中定时执行任务的3种实现方法

在Android开发中,定时执行任务的3种实现方法: 一.采用Handler与线程的sleep(long)方法(不建议使用,java的实现方式)二.采用Handler的postDelayed(Runnable, long)方法(最简单的android实现)三.采用Handler与timer及TimerTask结合的方法(比较多的任务时建议使用) 下面逐一介绍: 一.采用Handle与线程的sleep(long)方法 Handler主要用来处理接受到的消息.这只是最主要的方法,当然Handler里

IBM X3650M4简单排错方法

如果出问题了,首先看开机的那个地方的灯是否显示正常,有黄色的灯亮一般都不正常: 这种服务器带有一个错误指示板,只需要在电源开关那,如上图,把那个蓝色的按钮往里面按,就能把里面的一个板子抽出来,可以看到上面有相应的文字,正常的显示如下: 如果有异常,异常在不同的地方会有不同的灯亮,如下图,就有二个灯亮了: 不同的灯亮有不同的意思,代表不同的问题,具体可以参见这篇文章:http://baike.baidu.com/view/5648797.htm?fr=aladdin 一般简单的错误就可以通过这种方

java操作xml超简单的方法

用dom4j?SAX?no,no,no,光看api和帮助文档就烦,有没有更简单的方法呢?答案是有的. 那就是默默无名的:JAXB jaxb是啥? 摘抄一段度娘百科的介绍: JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标志可以转换为JSON对象的JAVA类.JAXB允许JAVA人员将JAVA类映射为XML表示方式,常用的注解包括:@XmlRootElement,@X