php 模版设计模

 更新时间:2016年11月25日 15:54  点击:2108

这个模版,不是smarty的那种模版引擎 不是template。是一种面向对象设计模式方法。
使用的地方譬如,作品easerver中, ui部分用的是wxpython , 我现在想换成qt , 感觉模版在这种功能就能起到一些作用。
重点是,核心功能封装于主类,让子类去继承应用。(程序以php代码做演示)
/*
 *系统服务类
 */
class server {
    //获取的服务项目列表
    protected $sl = array('apache'=>'httpd.exe','nginx'=>'nginx.exe','memcache'=>'memcached.exe');
    protected $select = '服务key';
    //获取服务列表
    public function getlist()
    {
        return $this->sl;
    }
    //启动服务操作
    public function start()
    {
        start $this->select;
    }
    //停止服务操作
    public function stop()
    {
        stop $this->select;
    }
    //重起服务
    public function reboot()
    {
        reboot $this->select;
    }
    //选择要操作的服务
    public function setselect($name)
    {
        $this->select = $this->sl[$name];
    }
}

//显示界面
class wxpython extends server{
  public function __construct()
  {
    parent::__construct();
  }
  //窗体
  public function window()
  {
   //生成一个表格,提供给用户选择服务
    $this->table($this->getlist());
    //生成一个启动按钮,他的点击时间为启动服务
    $this->startbut->bind('onclick',$this->start()); //启动
    $this->stopbut->bind('onclick',$this->stop());   //关闭
    $this->rebootbut->bind('onclick',$this->reboot()); //重起
  }
  //行选择的时候
  public function rowsonselect()
  {
    $this->setselect( $this->tableselect() );
  }
}

这样看来, 如果我想换qt的操作界面,只需要把wxpython 换成pyqt的界面生成,一样是几个按钮,给他们指定事件就可以了。
或许指定的语法不一样,比如wxpython用 bind指定事件,qt库就不是。更换ui库不需要修改内核功能部分

验证码,是一种区分用户是计算机和人的公共全自动程序。在captcha测试中,作为服务器的计算机会自动生成一个问题由用户来解答。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答captcha的问题,所以回答出问题的用户就可以被认为是人类。

*/
session_start();
$string = null;
$im = imagecreatetruecolor(60,25);  //创建真彩图60*25
$bg = imagecolorallocate($im,255,255,255);//白色背景
imagefill($im,0,0,$bg);填充白色
$x = 5;//
$y = 0;//文字坐标
for($i=0 ; $i<4 ;$i++)
{
$char = mt_rand(0,9);
$string .=$char;
$y = mt_rand(0,10);
$ccolor = imagecolorallocate($im,mt_rand(0,230),mt_rand(0,230),mt_rand(0,230));
imagechar($im,6,$x,$y,$char,$ccolor);//填充文字
$x += mt_rand(10,15);
}
for($i=0 ;$i
{
$x1 = mt_rand(0,80);
$x2 = mt_rand(0,80);
$y1 = mt_rand(0,30);
$y2 = mt_rand(0,30);
$x2 = $x1 +mt_rand(1,5);
$y2 = $y1 +mt_rand(1,5);
$lc = imagecolorallocate($im,mt_rand(0,230),mt_rand(0,230),mt_rand(0,230));
imageline($im,$x1,$y1,$x2,$y2,$lc);//填充线条
}
$_session['code'] = md5($string);
header("content-type:image/jpeg");
imagepng($im);
imagedestroy($im);

page_total_rows - 每页展示数量 默认值20
$total_rows - 总计数据条目数
$totpages - 总页数计算
$pages_current - 当前页面
利用url参数传递 当前页码 url参数名称 pages
$style - 页码展示样式可以通过外部访问样式属性进行修改
***********************使用方法**********************
调用该类
$pages = new pages;
调用该类后请修改数据集总条数
$pages->total_rows = $totrows;
//$pages->main();方法将返回limit需要的2个参数 关联数组的a,b2个元素
$limit = $pages->main();
通过访问不同方法即可展示不同的功能!
欢迎批评指正 联系qq 5213606
*/
class pages{
public $page_total_rows = 20;//每页展示数量
public $total_rows;//总计数据条目数
public $totpages;//总页数
public $current_url;//当前页面名称
private $ask; //是否出现问号
public $style ='<style type="text/css教程">
.pages_norename{width:50px; height:20px; float:left; background-color:#e3eff3; margin-right:5px; text-align:center; line-height:20px; border:1px solid #333333;}
.pages_norename a{display:block; width:50px; height:20px; color:#333333; text-decoration:none;}
.pages_norename a:hover{background-color:#ff9900; color:#ffffff;}
.pages_nore_more{width:auto; height:20px; float:left; margin-right:5px; line-height:20px; background-color:#e3eff3; border:1px solid #333333;}
.pages_nore_more a{display:block; width:20px; height:20px; color:#333333; text-decoration:none; text-align:center;}
.pages_nore_more a:hover{background-color:#ff9900; color:#ffffff;}
.pages_se{width:auto; height:20px; float:left;}
.pages_se select{margin:0px; padding:0px; font-family:arial, helvetica, sans-serif; font-size:12px;}
</style>
';

//核心计算 并以数组的形式返回查询sql 语句的必须值 limit a,b;
function main(){
  $this->totpages = ceil($this->total_rows/$this->page_total_rows);//总页数计算
  //获得当前页码-------------------
  if(!isset($_get['pages']))
  {
  $this->pages_current = 1;
  }else
  {
   $this->pages_current = intval($_get['pages']);
   //判断页面不为0
   if($this->pages_current < 1){
   $this->pages_current = 1;
   }
   //判断页面不能大于最大页码数量
   if($this->pages_current > $this->totpages){
   $this->pages_current = $this->totpages;
   }
   //注销url 参数 pages 和 total_rows 为了更好的传递其他url参数
   if(isset($_get['pages'])){unset($_get['pages']);}
   if(isset($_get['total_rows'])){unset($_get['total_rows']);}
  
  }
  //获得当前页码--------------------
  $limit['a'] = $start = ($this->pages_current - 1)*$this->page_total_rows;
  $limit['b'] = $this->page_total_rows;
  //获得当前页面名称
  $urlin = explode('/',$_server['php教程_self']);
 
  $tot_url = sizeof($urlin);
  $this->current_url =$urlin[$tot_url-1];
  //获得当前页面传递的url
  if(sizeof($_get) > 0){
   foreach($_get as $key=>$values){
    $urlsget .= $key.'='.$values.'&';
   }
   $this->current_url .= '?'.$urlsget;
   $this->ask = '';
  }else{$this->ask = '?';}
  //输出样式
  echo $this->style;
  return $limit;
}
//展示分页
//1 第一页
function firstpage(){
  echo '<div class="pages_norename"><a href="'.$this->current_url.'">首页</a></div>';
}
//2 上一页
function prepage(){
  echo '<div class="pages_norename"><a href="'.$this->current_url.$this->ask.'pages='.($this->pages_current-1).'">上一页</a></div>';
}
//3 下一页
function nextpage(){
  echo '<div class="pages_norename"><a href="'.$this->current_url.$this->ask.'pages='.($this->pages_current+1).'">下一页</a></div>';
}
//4 最后一页
function  lastpage(){
  echo '<div class="pages_norename"><a href="'.$this->current_url.$this->ask.'pages='.($this->totpages).'">尾页</a></div>';
}
//中间过渡页
function morepage(){
  if($this->pages_current == 1){$newtj = $this->pages_current+9;}
  elseif($this->pages_current  == 2){$newtj = $this->pages_current+8;}
  elseif($this->pages_current == 3){$newtj = $this->pages_current+7;}
  else{$newtj = $this->pages_current+6;}
   for($i=$this->pages_current-3;$i<=$newtj;$i++){
    if($i==$this->pages_current){$strong ='<strong>'; $strong2 ='</strong>';}else{$strong='';$strong2='';}
    if($i >=1){echo '<div class="pages_nore_more"><a href="'.$this->current_url.$this->ask.'pages='.$i.'">'.$strong.$i.$strong2.'</a></div>';}
    if($i >= $this->totpages){
    break;
    }
   }
}
//跳转页面
function changepage(){
  echo '<div class="pages_se"><select name="dd">';
  for($i=1;$i<=$this->totpages;$i++){
  if($this->pages_current == $i){$selected = ' selected="selected"';}else{$selected = '';}
  echo '<option value="'.$i.'"'.$selected.'>第'.$i.'页</option>';
  }
  echo '</select></div>';
}
}
?>
该类可以自动识别 url 参数 避免了一般分页类 丢失url参数问题
样式 可以通过style属性 进行修改
提供 首页 上一页 下一页 尾页 中间 过渡页 跳转菜单功能

<?php

/**
la (3,5,8,11)
lb(2,6,8,9,11,15)
合并为lc,有序排列。
用php实现,不能用sort之类的函数!!!!
**/

class union {
    var $lista = array();
    var $listb = array();
    var $listc = array();
   
    function getlenght($arr) { //获得表长度
        return count($arr);
    }
   
    function getelement($arr, $n) { //获取表中第n个元素,返回
        return $e = $arr[$n] ? $arr[$n] : '';
    }
   
    function listinsert($arr, $e) { //表末尾插入元素
        $arr[] = $e;
        return $arr;
    }
   
 
}
$phpig = new union();
$lista = $phpig->lista = array(3, 5, 8, 11);
$listb = $phpig->listb = array(2, 6, 8, 9, 11, 15);
$listc = $phpig->listc;
$lena = $phpig->getlenght($lista); //取得表大小
$lenb = $phpig->getlenght($listb);
$i = $j = 0;
while($i < $lena && $j < $lenb) {
    $ea = $phpig->getelement($lista, $i);
    $eb = $phpig->getelement($listb, $j);
    if($ea <= $eb) {
        $listc = $phpig->listinsert($listc, $ea);
        ++$i;
    } else {
        $listc = $phpig->listinsert($listc, $eb);
        ++$j;
    }
}
while($i < $lena) {
    $ea = $phpig->getelement($lista, $i);
    $listc = $phpig->listinsert($listc, $ea);
    ++$i;
}
while($j < $lenb) {
    $eb = $phpig->getelement($listb, $j);
    $listc = $phpig->listinsert($listc, $eb);
    ++$j;
}

print_r($listc);
?>

缓存技术:   
有些信息比方经常不变的,但是还是能变的信息放在缓存中以加快显示速度,这是很有价值的,所谓的缓存,通俗的理解就是一些保存在服务器端的共用信息.它是于服务器同生死的,我们在保存缓存的时候可以指定下次更新的时间的判断,比方要在5分钟更新一次,可以记录上次更新的时间,和当前时间比较,如果大于 5 分钟 ,读取数据库教程,更新换成,否则直接读取缓存数据,当然,缓存需要客户端用户激活的,只需一次.
ob_start()函数:打开输出缓冲区.
     函数格式 void ob_start(void)
     说明:当缓冲区激活时,所有来自php教程程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容。
flush:刷新缓冲区的内容,输出。
     函数格式:flush()
     说明:这个函数经常使用,效率很高。
ob_get_contents :返回内部缓冲区的内容。
     函数格式:string ob_get_contents(void)
     说明:这个函数会返回当前缓冲区中的内容,如果输出缓冲区没有激活,则返回 false.
ob_get_length:返回内部缓冲区的长度。
     函数格式:int ob_get_length(void)
     说明:这个函数会返回当前缓冲区中的长度;和ob_get_contents一样,如果输出缓冲区没有激活,则返回 false.
ob_end_clean:删除内部缓冲区的内容,并且关闭内部缓冲区
     函数格式:void ob_end_clean(void)
     说明:这个函数不会输出内部缓冲区的内容而是把它删除
ob_end_flush:发送内部缓冲区的内容到浏览器,并且关闭输出缓冲区
     函数格式:void ob_end_flush(void)
     说明:这个函数发送输出缓冲区的内容(如果有的话)
ob_implicit_flush:打开或关闭绝对刷新
     函数格式:void ob_implicit_flush ([int flag])
     说明:默认为关闭缓冲区,打开绝对输出后,每个脚本输出都直接发送到浏览器,不再需要调用 flush()   
二、文件写入:    

 

[!--infotagslink--]

相关文章

  • photoshop设计一幅大鱼海棠动画片海报制作实例教程

    今天小编在这里就来给各位photoshop的这一款软件的使用者们来说一说设计一幅大鱼海棠动画片海报制作的实例教程,各位想知道具体制作步骤的使用者们,那么各位就快来看看...2016-09-14
  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • ps怎么制作倒影 ps设计倒影的方法

    ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果&#819...2017-07-06
  • C语言程序设计第五版谭浩强课后答案(第二章答案)

    这篇文章主要介绍了C语言程序设计第五版谭浩强课后答案(第二章答案),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2021-04-02
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • Photoshop设计商务名片的5种常见思路分享

    今天小编在这里就来给Photoshop的这一款软件的使用者们来说下计商务名片的5种常见思路,各位想知道的使用者,那么下面就快来跟着小编一起看一看吧。 给各位Photosho...2016-09-14
  • PHP中func_get_args(),func_get_arg(),func_num_args()的区别

    复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04
  • WPF实现类似360安全卫士界面的程序源码分享

    最近在网上看到了新版的360安全卫士,感觉界面还不错,于是用WPF制作了一个,时间有限,一些具体的控件没有制作,用图片代替了。感兴趣的朋友一起跟着小编学习WPF实现类似360安全卫士界面的程序源码分享...2020-06-25
  • PHP编程 SSO详细介绍及简单实例

    这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
  • PHP实现创建以太坊钱包转账等功能

    这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
  • photoshop安卓和苹果界面设计之尺寸规范详解

    今天小编在这里就来给各位photoshop的这一款软件的使用者们来说下安卓和苹果的界面设计之尺寸规范,各位想知道的使用者们,那么下面就快来跟着小编一起看看吧。 给...2016-09-14
  • php微信公众账号开发之五个坑(二)

    这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
  • photoshop设计重影效果具体制作教程

    今天小编在这里就来给各位photoshop的这一款软件的使用者们来说一说设计重影效果具体的制作教程,各位想知道具体制作方法的软件使用者们,那么大家就来看下小编带来的教...2016-09-14
  • ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单

    首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31
  • PHP如何通过date() 函数格式化显示时间

    这篇文章主要介绍了PHP如何通过date() 函数格式化显示时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-13
  • Illustrator结合photoshop设计可爱的卡通女厨师头像制作教程

    今天小编在这里就来给Illustrator的这一款软件的使用者们来说一说结合photoshop设计可爱的卡通女厨师头像的制作教程,各位想知道具体制作步骤的使用者们,那么下面就快来...2016-09-14
  • PS怎么设计T恤 PS制作T恤教程

    PS怎么设计T恤?很多人都想要在T恤上有自己喜欢的图案,那么自己设计T恤的图案是方法之一,本次为大家带来了详细的ps设计T恤教程,有兴趣的同学快来看看吧。 1、打开PS,新...2016-12-31
  • PHP+jQuery+Ajax实现多图片上传效果

    今天我给大家分享的是在不刷新页面的前提下,使用PHP+jQuery+Ajax实现多图片上传的效果。用户只需要点击选择要上传的图片,然后图片自动上传到服务器上并展示在页面上。...2015-03-15
  • photoshop设计一张节约用水环保主题海报制作教程

    今天小编在这里就来给photoshop的这一款软件的使用者们来详细的说说设计一张节约用水环保主题海报的制作教程,各位想知道具体制作方法的使用者们,那么下面就快来跟着小...2016-09-14