您的位置:首页 > 编程语言 > PHP开发

【phpcms-v9】怎样在<script src="xxx.php"></script>标记中引入php文件

2012-11-30 15:17 489 查看
1.文章详情页统计点击数量时:<scriptlanguage="JavaScript"src="http://www.hebei800.cn/api.php?op=count&id=41&modelid=1"></script>

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

/*
*如果在php标记中,必须使用echo输出javascript代码到网页中,相当于直接在网页中写javascript代码
*/
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));
}

?>
//如果没有在php标记中,则可直接写javascript代码,会将下面一行代码直接当做javascript代码载入网页
$('#hits').html('<?php echo $views?>');//php代码本身就是一种内潜入式代码,可以将php脚本潜入到html代码中,只不过这个文件中的html代码几乎为零而已


2.使用场合:需要在静态的html文件中实时的显示一些动态数据时使用

3.数据源的调用代码:<scripttype="text/javascript"src="http://www.hebei800.cn/index.php?m=dbsource&c=call&a=get&id=2"></script>

/*
* 数据源的调用:<script type="text/javascript" src="http://www.hebei800.cn/index.php?m=dbsource&c=call&a=get&id=2"></script>
*/
public function get() {
//数据源id:即zp_datacall数据表中自增id
$id = isset($_GET['id']) && intval($_GET['id']) ? intval($_GET['id']) : exit();
//获取当前数据源记录
if ($data = $this->db->get_one(array('id'=>$id))) {
//运算符的优先级搞清楚,1-先赋值  2-再进行非逻辑
if (!$str = tpl_cache('dbsource_'.$id,$data['cache'])) {//如果没有生成缓存
if ($data['type'] == 1) { //自定义SQL调用
$get_db = pc_base::load_model("get_model");//不设置要查询的数据表,只执行查询操作
//拼接sql语句
$sql = $data['data'].(!empty($data['num']) ? " LIMIT $data[num]" : '');
$r= $get_db->query($sql);//执行查询sql语句,注意:sql语句中已经有表名
while(($s = $get_db->fetch_next()) != false) {//查询sql语句中的数据表
$str[] = $s;//将查询到的表记录置入$str[]二维数组
}
} else {//非自定义sql调用情况
//寻找对应模块下的xxx_tag.class.php文件
$filepath = PC_PATH.'modules'.DIRECTORY_SEPARATOR.$data['module'].DIRECTORY_SEPARATOR.'classes'.DIRECTORY_SEPARATOR.$data['module'].'_tag.class.php';
if (file_exists($filepath)) {
//如果存在,则引入pc标签类库文件
$pc_tag = pc_base::load_app_class($data['module'].'_tag', $data['module']);
//调用方法
if (!method_exists($pc_tag, $data['action'])) {
exit();
}
$sql = string2array($data['data']);//sql语句,如:select * from zp_block
$sql['action'] = $data['action'];//方法
$sql['limit'] = $data['num'];//数量
unset($data['num']);
$str  = $pc_tag->$data['action']($sql);

} else {
exit();
}
}
//如果缓存时间不为空,则缓存到caches/caches_template/dbsource/$id.php文件中
//缓存的是编译后的文件
if ($data['cache']) setcache('dbsource_'.$id, $str, 'tpl_data');
}//没生成缓存的情况
echo $this->_format($data['id'], $str, $data['dis_type']);//参数3-输出方法(1-json 2-xml 3-js)
}
}

private function _format($id, $data, $type) {
switch($type) {
case '1'://json
if (CHARSET == 'gbk') {
$data = array_iconv($data, 'gbk', 'utf-8');
}
return json_encode($data);//将数据json化,再输出
break;

case '2'://xml
$xml = pc_base::load_sys_class('xml');
return $xml->xml_serialize($data);//将数据xml化,再输出
break;

case '3'://js      js的情况没有使用到$data参数数据
pc_base::load_app_func('global');//引入global.func.php公共函数库文件
ob_start();//开启缓冲区
include template_url($id);//生成缓存文件,应引入缓存文件中内容(编译后的内容),此函数主要用来编译template字段到缓存文件
$html = ob_get_contents();//获取缓冲区中内容
ob_clean();//清空缓存区
return format_js($html);//将文本格式成适合js输出的字符串,注意:此函数主要通过 通过document.write()动态将编译后的代码输出到网页中
break;
}
}


/**
* 将文本格式成适合js输出的字符串;输出javascript代码
* @param string $string 需要处理的字符串
* @param intval $isjs 是否执行字符串格式化,默认为执行
* @return string 处理后的字符串
*/
function format_js($string, $isjs = 1) {
$string = addslashes(str_replace(array("\r", "\n", "\t"), array('', '', ''), $string));
return $isjs ? 'document.write("'.$string.'");' : $string;
}


案例:test6.html

<html>
<head>
</head>
<body>
<script src="test5.php" type="text/javascript"></script>
</body>
</html>


test5.php

<?php
header("content-type:text/html;charset=utf-8");
echo "document.write('你好');";
?>
//你好
document.write("你好");


结果:你好你好
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐