tipask问题添加热门问答模块

 更新时间:2016年11月25日 17:25  点击:1495
tipask这款系统中虽然功能比较强大但是对于我来讲少了一个热门问题模块了,下面我就整理了一个站长的开发例子与各位分享。

有个网站是用tipask来搭建的问答系统,今天客户要求添加热门问题模块,之前都是用tipask的原生模块,比如说推荐问答、未解决问答等,看来只能自己二次开发了,上网找了下关于tipask的二次开发还真是少……于是简单翻了下tipask的代码,用我的方式增加了热门问题模块。

tipask的主要函数都在model文件夹下,找到系统核心文件base.class.php,里面有这样一个函数fromcache,用于生成函数下各种模块,例如悬赏问题、精彩推荐等,我们要做的就是在这里按照前后代码加上一条我们需要的热门问题模块。

例如在代码

 代码如下 复制代码

case 'notelist'://首页右侧公告列表

前加上我们的模块代码:

 代码如下 复制代码

case 'hotlist'://热门问题

$this->load('hot');//www.111cn.net

$cachedata = $_ENV['hot']->get_list();

break;

这里我是仿照recommend推荐模块,又新建的一个hot.class.php用于上面代码的调用,其实完全可以仿照上面的调用question.class.php文件里的list_by_condition函数,但是通过到question.class.php文件下查看list_by_condition函数只能够加入sql的where判断,而我需要的热门模块只需要改动一下order by,所以我只能新建一个hot.class.php文件自己写数据库调用了。

hot.class.php文件如下:

 代码如下 复制代码

base = $base;

$this->db = $base->db;

}

function get_list($start = 0, $limit = 7) {

$hotlist = array();

$query = $this->db->query("SELECT * FROM " . DB_TABLEPRE . "question ORDER BY views DESC LIMIT $start,$limit");//WWw.111Cn.net

while ($hot = $this->db->fetch_array($query)) {

$hot['category_name'] = $this->base->category[$hot['cid']]['name'];

$hot['format_time'] = tdate($hot['time']);

$hot['category_name'] = $this->base->category[$hot['cid']]['name'];

$hot['url'] = url('question/view/' . $hot['qid'], $hot['url']);

$hot['image'] =$hot['image']?$hot['image']:'css/default/recomend.jpg' ;

$hotlist[] = $hot;

}

return $hotlist;

}

}

?>

好了,tipask关于新建模块的二次开发就结束了,只要仿照这来就行了

 

如果客户端没有禁用 Cookie,则 Cookie 在启动 Session 会话的时候扮演的是存储 Session ID 和 Session 生存期的角色。我们来手动设置 Session 的生存期:

例子,利用cooikes

 代码如下 复制代码
<?php 
    session_start(); 
    // 保存一天 
    $lifeTime = 24 * 3600; 
    setcookie(session_name(), session_id(), time() + $lifeTime, "/"); 
?>

PHP5 Session还提供了一个函数 session_set_cookie_params(); 来设置PHP5 Session的生存期的,该函数必须在 session_start() 函数调用之前调用:

 代码如下 复制代码

<?php 
    // 保存一天  www.111cn.net
    $lifeTime = 24 * 3600; 
    session_set_cookie_params($lifeTime); 
    session_start(); 
?>

php中还有一个ini_set可以设置session.gc_maxlifetime来设定Session的生存周期。例如:

 代码如下 复制代码

<?php
ini_set('session.gc_maxlifetime', 3600); //设置时间
ini_get('session.gc_maxlifetime');//得到ini中设定值

?>

下面提供一个别人封装好的函数,但是我没有测试过,仅供参考:

 代码如下 复制代码

    <?php
    function start_session($expire = 0)
    {
    if ($expire == 0) {
    $expire = ini_get('session.gc_maxlifetime');
    } else {
    ini_set('session.gc_maxlifetime', $expire);
    }
    
    if (empty($_COOKIE['PHPSESSID'])) {
    session_set_cookie_params($expire);
    session_start();
    } else {
    session_start();
    setcookie('PHPSESSID', session_id(), time() + $expire);
    }
    }
    ?>

使用方法:

加入start_session(600);//600秒以后过期。

 

session是php中一个服务器端超级全局变量而memcache是缓存应用,下面我来把它们整合起来把session存放在memcache中,下面我们一起来看如何实现的吧。

1.首先安装memcached或者memcache软件
参考:wamp 安装 memcache/memcached详细说明
2.安装php_memcache.dll扩展
3.设置session保存在memcached

方法一:

修改php.ini文件

 代码如下 复制代码

session.save_handler = memcache
session.save_path = "tcp://127.0.0.1:11211"

方法二:

程序中动态设置

 代码如下 复制代码

ini_set("session.save_handler", "memcache");
ini_set("session.save_path", "tcp://127.0.0.1:11211");

测试程序

1.session.php

 代码如下 复制代码

<?php
ini_set("session.save_handler", "memcache");
ini_set("session.save_path", "tcp://127.0.0.1:11211");

session_start();
if (!isset($_SESSION['username'])) {
 $_SESSION['username'] = 'phpff.com';
}

print session_id();//5877fbfcaea379ada0cc0dbba80615a6

?>

2.test.php

 代码如下 复制代码

<?php
// memcache test code
$memcache = new Memcache; //创建一个memcache对象
$memcache->connect('127.0.0.1', 11211) or die ("Could not connect"); //连接Memcached服务器 

print_r($memcache->get('5d3d79d7500f5836033e9019b3eefc6f'));//username|s:9:"phpff.com";

?>

在php中原生态的生成html页面我们会用到三个函数:ob_start()、ob_get_contents()、ob_end_clean()了,然后再把获取的内容给fopen函数生成即可。

例子,利用三个函数:ob_start()、ob_get_contents()、ob_end_clean()函数

知识点:

1、ob_start函数一般主要是用来开启缓存,注意使用ob_start之前不能有任何输出,如空格、字符等。

2、ob_get_contents函数主要用来获取缓存中的内容以字符串形式返回,注意此函数必须在ob_end_clean函数之前调用,否则获取不到缓存内容。

3、ob_end_clean函数主要是清空缓存中的内容并关闭缓存,成功则返回True,失败则返回False

输出控制函数(Output Control)也就是使用和控制缓存来生成静态HTML页面,也会使用到PHP文件读写函数。

PHP生成静态页面实例代码

 代码如下 复制代码

<? 
    ob_start(); 

    echo "<html>". 
    "<head>". 
    "<title>PHP网站静态化教程</title>". 
    "</head>". 
    "<body>欢迎访问PHP网站开发教程网www.111cn.net 本文主要介绍PHP网站页面静态化的方法</body>". 
    "</html>"; 
    
    $out1 = ob_get_contents(); 
    ob_end_clean(); 
    $fp = fopen("leapsoulcn.html","w"); 
    if(!$fp) 
    { 
    echo "System Error"; 
    exit(); 
    } 
    else
    { 
    fwrite($fp,$out1); 
    fclose($fp); 
    echo "Success"; 
    } 
?>

例子,

利用框架模板生成最近比较火的php框架有thinkphp下面我们就以它为例子。

thinkphp提供了一个有效的生成静态页的方法,(在tp2.0的手册上有说明,3.0的手册上没有说明了,不过3.0方法还是存在的。)

 代码如下 复制代码

$this->buildHtml('静态文件', '静态路径','模板文件');


参数一:静态文件,是指生成后的静态文件名,文件保存路径完整的就是:静态路径/静态文件。例如静态文件设置a/index.那么保存的路径就是项 目路径/Html/a/index.html(默认的静态路径在项目路径的Html文件夹下,没有可以自己创建)

参数二:静态路径,上面已经说明了默认的路径,3.0中可以在入口文件里加入参数来更改静态路径。 define('HTML_PATH', './');(将静态路径义为网站根目录)


参数三:模板文件,我感觉官方这个描述是不正确的,准确的来说应该是目标模块,就是需要生成静态文件的模块。格式:模块名:操作。比如要生成Index下的a方法为静态文件,那就是Index:a。如果为空则默认生成当前操作的静态文件。


1 、在入口文件index.php文件中定义生成静态页面的文件位置,然后在个目录新建Html文件夹

 代码如下 复制代码

   define( 'HTML_PATH' , './Html' );//www.111cn.net


2 、在根目录的config文件夹中的config.php配置静态页面的类型,设为 html 

 代码如下 复制代码
 'HTML_FILE_SUFFIX'        = > '.html' , // 默认静态文件后缀


3 、在“Tpl / default / ”目录中新建一个Index的文件夹,文件夹下面新建一个index.html的模板,   模板里面内容为:这是生成静态页例子

4 、控制器IndexAction. class .php中的代码

 代码如下 复制代码

   class IndexAction extends Action{
     public function index(){
       $this - > buildHtml( '名称' ,HTML_PATH. '/' , '模版' , 'utf8' ); //注意:这里的utf8不能写成utf-8
       $this - > display();
    }
  }

解释 :
    这里的buildHtml是thinkphp内置的函数,这里的意思是:
    将index的模板文件生成utf8编码格式的静态网页,该文件名为 1 .html,存在于根目录的htm文件中
    该函数有 5 个参数,具体如下 :
    buildHtml($htmlfile,$htmlpath,$templateFile,$charset,$contentType = 'text/html' )
参数:
    $htmlfile 生成的静态文件名称
    $htmlpath 生成的静态文件路径
    $templateFile 指定要生成静态的模板文件
    $charset 生成静态文件的编码格式

    $contentType 生成静态文件的类型

// 生成静态页

 代码如下 复制代码
class AddhtmlAction extends CommonAction {
    public function index(){
        $this->assign('abc', 'abc222222222');
        $pagename = '123 www.111cn.net';        //页面名称
        $temppath = '';        //显示模版路径
        //查看配置文件是否开启显示静态模版
        if(C('IS_HTML'))
        {
            //判断是否已经生成静态页面
            if(!is_file(HTML_PATH . '/'. $pagename .'html'))
                $this->buildHtml($pagename, HTML_PATH.'/', 'index', 'utf8');//注意:index为动态模版 这里的utf8不能写成utf-8
            $temppath = HTML_PATH . '/'. $pagename .'html';
        }
        $this->display($temppath);
    }
}
本例子不是读取Excel或生成新的Excel,而是读取现有的Excel文件,然后修改Excel中的数据,就像修改mysql中数据一样的哦。
 代码如下 复制代码
//模板存放目录
$dir = $DOCUMENT_ROOT.'/backoffice/admin/oemcheck/';
 
 
$templateName = '1.xlsx';
$outputFileName = '模板.xlsx';
$txt='test';
 
//实例化Excel读取类
$PHPReader = new PHPExcel_Reader_Excel2007();
if(!$PHPReader->canRead($dir.$templateName)){
 $PHPReader = new PHPExcel_Reader_Excel5();
 if(!$PHPReader->canRead($dir.$templateName)){
  echo '无法识别的Excel文件!';
  return false;
 }
}
//读取Excel
$PHPExcel = $PHPReader->load($dir.$templateName);
//读取工作表1
$currentSheet = $PHPExcel->getSheet(0);
 
$currentSheet->setCellValue('B13',iconv('gbk','utf-8',$txt));//表头赋值//
//实例化Excel写入类
$PHPWriter = new PHPExcel_Writer_Excel2007($PHPExcel);
ob_start();
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header('Content-Disposition:attachment;filename="' .$outputFileName. '"');//输出模板名称
header("Content-Transfer-Encoding: binary");
header("Last-Modified:".gmdate("D, d M Y H:i:s")." GMT");
header('Pragma: public');
header('Expires: 30');
header('Cache-Control: public');
$PHPWriter->save('php://output');

 

[!--infotagslink--]

相关文章

  • PHP传值到不同页面的三种常见方式及php和html之间传值问题

    在项目开发中经常见到不同页面之间传值在web工作中,本篇文章给大家列出了三种常见的方式。接触PHP也有几个月了,本文总结一下这段日子中,在编程过程里常用的3种不同页面传值方法,希望可以给大家参考。有什么意见也希望大...2015-11-24
  • js修改input的type属性问题探讨

    js修改input的type属性有些限制。当input元素还未插入文档流之前,是可以修改它的值的,在ie和ff下都没问题。但如果input已经存在于页面,其type属性在ie下就成了只读属性了,不可以修改。...2013-10-19
  • Mysql常见问题集锦

    1,utf8_bin跟utf8_general_ci的区别 ci是 case insensitive, 即 "大小写不敏感", a 和 A 会在字符判断中会被当做一样的; bin 是二进制, a 和 A 会别区别对待. 例如你运行: SELECT * FROM table WHERE txt = 'a'...2013-10-04
  • Mysql大小写敏感的问题

    一、1 CREATE TABLE NAME(name VARCHAR(10)); 对这个表,缺省情况下,下面两个查询的结果是一样的:复制代码 代码如下: SELECT * FROM TABLE NAME WHERE name='clip'; SELECT * FROM TABLE NAME WH...2015-03-15
  • linux mint 下mysql中文支持问题

    一.mysql默认不支持中文,它的server和db默认是latin1编码.所以我们要将其改变为utf-8编码,因为utf-8包含了地球上大部分语言的二进制编码 1.关闭mysql服务 sudo /etc/init.d/mysql stop 2.修改mysql配置文件 mysql配...2015-10-21
  • C#中添加窗口的步骤详解

    下面小编就为大家带来一篇C#中添加窗口的步骤详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • Python运行提示缺少模块问题解决方案

    这篇文章主要介绍了Python运行提示缺少模块问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-05-10
  • Perl模块编写说明

    这两天在用Perl编写一些监控脚本,其实写代码也是一件挺有意思的事情,就是挺废时间的。而且,由于语法不太熟,基本想到一个东西都要先Google一下看怎么实现。...2020-06-29
  • 关于python pygame游戏进行声音添加的技巧

    这篇文章主要给大家分享的是pygame游戏进行声音添加的方法,这文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!...2021-10-23
  • Python PyPDF2模块安装使用解析

    这篇文章主要介绍了Python PyPDF2模块安装使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-04-22
  • C#使用队列(Queue)解决简单的并发问题

    这篇文章主要介绍了使用队列(Queue)解决简单的并发问题,讲解的很细致,喜欢的朋友们可以了解一下...2020-06-25
  • JQuery EasyUI学习教程之datagrid 添加、修改、删除操作

    这篇文章主要介绍了JQuery EasyUI datagrid 添加、修改、删除操作的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2016-07-25
  • c#通用登录模块分享

    这是一款简单的ASP.NETC#注册登录模块制作思路,非常简单实用,虽然没怎么考虑登陆的安全性,但作为C#的朋友学习交流使用。...2020-06-25
  • 美图秀秀怎么给照片添加电影字幕

    美图秀秀是一款不错的图片处理软件了,最近看到很多的朋友喜欢把自己的照片处理成电影字幕效果了,下面我们来看看美图秀秀怎么给照片添加电影字幕吧,希望文章对各位有帮助...2016-09-14
  • windows 10 安装和使用中5个常见问题

    2015年7月29日0点起,Windows 10推送全面开启,Windows7、Windows8.1用户可以免费升级到Windows 10,用户也可以通过系统升级到Windows10,在这过程中,用户会遇到这样那样的问题,下面小编总结了windows 10 安装和使用中5个常见问题,需要的朋友可以参考下...2016-01-27
  • Node.js API详解之 console模块用法详解

    这篇文章主要介绍了Node.js API详解之 console模块用法,总结分析了Node.js API中console模块基本函数、使用方法与操作注意事项,需要的朋友可以参考下...2020-05-12
  • PHP在引号前面添加反斜杠(PHP去除反斜杠)

    一般空间商提供的服务器空间默认PHP 指令 magic_quotes_gpc是on的,也就是打开的。这时候就可以用stripslashes() 函数删除自动添加的反斜杠。用法就是:比如包含字符串的变量是$str,那么就用stripslashes() 函数处理一下...2013-10-04
  • php中session常见问题分析

    PHP的session功能,一直为许多的初学者为难。就连有些老手,有时都被搞得莫名其妙。本文,将这些问题,做一个简单的汇总,以便大家查阅。 1. 错误提示 引用 代...2016-11-25
  • Python xmltodict模块安装及代码实例

    这篇文章主要介绍了Python xmltodict模块安装及代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-10-05
  • javascript学习指南之回调问题

    回调函数被认为是一种高级函数,一种被作为参数传递给另一个函数(在这称作"otherFunction")的高级函数,回调函数会在otherFunction内被调用(或执行)。回调函数的本质是一种模式(一种解决常见问题的模式),因此回调函数也被称为回调模式。...2016-04-25