Discuz教程网

利用smarty和php生成静态html常用函数及实例

[复制链接]
authicon 09927306 发表于 2011-1-6 12:04:10 | 显示全部楼层 |阅读模式
  1. <?php
  2.   ob_start();//打开缓冲区
  3.       //把生成文件的过程写出函数
  4. function tohtmlfile_cjjer($file_cjjer_name,$file_cjjer_content)
  5. {
  6. if (is_file ($file_cjjer_name)){
  7. @unlink ($file_cjjer_name);
  8. }
  9. $cjjer_handle = fopen ($file_cjjer_name,"w");
  10. if (!is_writable ($file_cjjer_name)){
  11. return false;
  12. }
  13. if (!fwrite ($cjjer_handle,$file_cjjer_content)){
  14. return false;
  15. }
  16. fclose ($cjjer_handle); //关闭指针
  17. return $file_cjjer_name;
  18. }

  19. require "main.php";
  20. $total = 21000;
  21. $tpl->assign("total", $total);
  22. $tpl->display(\'1.tpl\');

  23.   //练习生成静态页面html
  24.        $this_my_f= ob_get_contents(); //此处关键(ob_get_contents()把本页赋值一个变量)
  25.        ob_end_clean();
  26.        $filename = "indexhtm.html"; //新产生的html文件,
  27.         if(tohtmlfile_cjjer($filename,$this_my_f))
  28.        echo "生成成功 $filename";
  29.         else
  30.         echo "生成识别";


  31. ?>
复制代码



利用smarty和php生成静态html常用函数及实例//函数
function tohtmlfile_cjjer($file_cjjer_name,$file_cjjer_content)
{
if (is_file ($file_cjjer_name)){
@unlink ($file_cjjer_name);
}
$cjjer_handle = fopen ($file_cjjer_name,\"w\");
if (!is_writable ($file_cjjer_name)){
return false;
}
if (!fwrite ($cjjer_handle,$file_cjjer_content)){
return false;
}
fclose ($cjjer_handle); //关闭指针
return $file_cjjer_name;
}
////////下面是应用实例
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">   
<?php
     ob_start();
      //把生成文件的过程写出函数
function tohtmlfile_cjjer($file_cjjer_name,$file_cjjer_content)
{
if (is_file ($file_cjjer_name)){
@unlink ($file_cjjer_name);
}
$cjjer_handle = fopen ($file_cjjer_name,\"w\");
if (!is_writable ($file_cjjer_name)){
return false;
}
if (!fwrite ($cjjer_handle,$file_cjjer_content)){
return false;
}
fclose ($cjjer_handle); //关闭指针
return $file_cjjer_name;
}

      include_once(\'./Smarty/Smarty.class.php\'); //包含smarty类文件
      $smarty = new Smarty(); //建立smarty实例对象$smarty
      $smarty -> template_dir = \"./templates\"; //设置模板目录
      $smarty -> compile_dir = \"./templates_c\"; //设置编译目录
      
      //----------------------------------------------------
      //左右边界符,默认为{},但实际应用当中容易与JavaScript
      //相冲突,所以建议设成<{}>或其它。
      //----------------------------------------------------
      $smarty->left_delimiter = \"{\";
      $smarty->right_delimiter = \"}\";
      $smarty->assign(\"name\", \"李晓军\"); //进行模板变量替换
      
      //编译并显示位于./templates下的index.tpl模板
      $smarty->display(\"indextest7.tpl\"); //indextest7.tpl是已编好的模板。
      //练习生成静态页面html
       $this_my_f= ob_get_contents(); //此处关键(ob_get_contents()把本页赋值一个变量)
       ob_end_clean();
       $filename = \"indexhtm.html\"; //新产生的html文件
        if(tohtmlfile_cjjer($filename,$this_my_f))
       echo \"生成成功 $filename\";
        else
        echo \"生成识别\";

   ?>
在除去绿色、红色文字后,运行indextest7.php时,直接输出一个网页,加上彩色代码后,网页不再直接输出,而是直接在后台生成了文件indexhtm.html网页文件。

ob_start :打开输出缓冲区
函数格式:void ob_start(void)
说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。
ob_get_contents :返回内部缓冲区的内容。
使用方法:string ob_get_contents(void)
说明:这个函数会返回当前缓冲区中的内容,如果输出缓冲区没有激活,则返回 FALSE 。
ob_end_clean:删除内部缓冲区的内容,并且关闭内部缓冲区
使用方法:void ob_end_clean(void)
说明:这个函数不会输出内部缓冲区的内容而是把它删除!

  1. <?php

  2. class minupage

  3. {

  4. /**

  5.   * config ,public

  6.   */

  7. var $page_name="p";//page标签,用来控制url页。比如说xxx.php?PB_page=2中的PB_page

  8. var $next_page=\'>\';//下一页

  9. var $pre_page=\'<\';//上一页

  10. var $first_page=\'First\';//首页

  11. var $last_page=\'Last\';//尾页

  12. var $pre_bar=\'<<\';//上一分页条

  13. var $next_bar=\'>>\';//下一分页条

  14. var $format_left=\'[\';

  15. var $format_right=\']\';

  16. var $is_ajax=false;//是否支持AJAX分页模式

  17. /**

  18.   * private

  19.   *

  20.   */

  21. var $pagebarnum=10;//控制记录条的个数。

  22. var $totalpage=0;//总页数

  23. var $ajax_action_name=\'\';//AJAX动作名

  24. var $nowindex=1;//当前页

  25. var $url="";//url地址头

  26. var $offset=0;

  27. /**

  28.   * constructor构造函数

  29.   *

  30.   * @param array $array[\'total\'],$array[\'perpage\'],$array[\'nowindex\'],$array[\'url\'],$array[\'ajax\']...

  31.   */

  32. function minupage($array)

  33. {

  34.   if(is_array($array)){

  35.      if(!array_key_exists(\'total\',$array))$this->error(__FUNCTION__,\'need a param of total\');

  36.      $total=intval($array[\'total\']);

  37.      $perpage=(array_key_exists(\'perpage\',$array))?intval($array[\'perpage\']):10;

  38.      $nowindex=(array_key_exists(\'nowindex\',$array))?intval($array[\'nowindex\']):\'\';

  39.      $url=(array_key_exists(\'url\',$array))?$array[\'url\']:\'\';

  40.   }else{

  41.      $total=$array;

  42.      $perpage=10;

  43.      $nowindex=\'\';

  44.      $url=\'\';

  45.   }

  46.   if((!is_int($total))||($total<0))$this->error(__FUNCTION__,$total.\' is not a positive integer!\');

  47.   if((!is_int($perpage))||($perpage<=0))$this->error(__FUNCTION__,$perpage.\' is not a positive integer!\');

  48.   if(!empty($array[\'page_name\']))$this->set(\'page_name\',$array[\'page_name\']);//设置pagename

  49.   $this->_set_nowindex($nowindex);//设置当前页

  50.   $this->_set_url($url);//设置链接地址

  51.   $this->totalpage=ceil($total/$perpage);

  52.   $this->offset=($this->nowindex-1)*$perpage;

  53.   if(!empty($array[\'ajax\']))$this->open_ajax($array[\'ajax\']);//打开AJAX模式

  54. }

  55. /**

  56.   * 设定类中指定变量名的值,如果改变量不属于这个类,将throw一个exception

  57.   *

  58.   * @param string $var

  59.   * @param string $value

  60.   */

  61. function set($var,$value)

  62. {

  63.   if(in_array($var,get_object_vars($this)))

  64.      $this->$var=$value;

  65.   else {

  66.    $this->error(__FUNCTION__,$var." does not belong to PB_Page!");

  67.   }



  68. }

  69. /**

  70.   * 打开倒AJAX模式

  71.   *

  72.   * @param string $action 默认ajax触发的动作。

  73.   */

  74. function open_ajax($action)

  75. {

  76.   $this->is_ajax=true;

  77.   $this->ajax_action_name=$action;

  78. }

  79. /**

  80.   * 获取显示"下一页"的代码

  81.   *

  82.   * @param string $style

  83.   * @return string

  84.   */

  85. function next_page($style=\'\')

  86. {

  87.   if($this->nowindex<$this->totalpage){

  88.    return $this->_get_link($this->_get_url($this->nowindex+1),$this->next_page,$style);

  89.   }

  90.   return \'<span class="\'.$style.\'">\'.$this->next_page.\'</span>\';

  91. }

  92. /**

  93.   * 获取显示“上一页”的代码

  94.   *

  95.   * @param string $style

  96.   * @return string

  97.   */

  98. function pre_page($style=\'\')

  99. {

  100.   if($this->nowindex>1){

  101.    return $this->_get_link($this->_get_url($this->nowindex-1),$this->pre_page,$style);

  102.   }

  103.   return \'<span class="\'.$style.\'">\'.$this->pre_page.\'</span>\';

  104. }

  105. /**

  106.   * 获取显示“首页”的代码

  107.   *

  108.   * @return string

  109.   */

  110. function first_page($style=\'\')

  111. {

  112.   if($this->nowindex==1){

  113.       return \'<span class="\'.$style.\'">\'.$this->first_page.\'</span>\';

  114.   }

  115.   return $this->_get_link($this->_get_url(1),$this->first_page,$style);

  116. }

  117. /**

  118.   * 获取显示“尾页”的代码

  119.   *

  120.   * @return string

  121.   */

  122. function last_page($style=\'\')

  123. {

  124.   if($this->nowindex==$this->totalpage){

  125.       return \'<span class="\'.$style.\'">\'.$this->last_page.\'</span>\';

  126.   }

  127.   return $this->_get_link($this->_get_url($this->totalpage),$this->last_page,$style);

  128. }

  129. function nowbar($style=\'\',$nowindex_style=\'\')

  130. {

  131.   $plus=ceil($this->pagebarnum/2);

  132.   if($this->pagebarnum-$plus+$this->nowindex>$this->totalpage)$plus=($this->pagebarnum-$this->totalpage+$this->nowindex);

  133.   $begin=$this->nowindex-$plus+1;

  134.   $begin=($begin>=1)?$begin:1;

  135.   $return=\'\';

  136.   for($i=$begin;$i<$begin+$this->pagebarnum;$i++)

  137.   {

  138.    if($i<=$this->totalpage){

  139.     if($i!=$this->nowindex)

  140.         $return.=$this->_get_text($this->_get_link($this->_get_url($i),$i,$style));

  141.     else

  142.         $return.=$this->_get_text(\'<span class="\'.$nowindex_style.\'">\'.$i.\'</span>\');

  143.    }else{

  144.     break;

  145.    }

  146.    $return.="\\n";

  147.   }

  148.   unset($begin);

  149.   return $return;

  150. }

  151. /**

  152.   * 获取显示跳转按钮的代码

  153.   *

  154.   * @return string

  155.   */

  156. function select($url)

  157. {

  158.   $return=\'<select name="PB_Page_Select"  >\';

  159.   for($i=1;$i<=$this->totalpage;$i++)

  160.   {

  161.    if($i==$this->nowindex){

  162.     $return.=\'<option value=\'.$url.$i.\' selected>\'.$i.\'</option>\';

  163.    }else{

  164.     $return.=\'<option value=\'.$url.$i.\'>\'.$i.\'</option>\';

  165.    }

  166.   }

  167.   unset($i);

  168.   $return.=\'</select>\';

  169.   return $return;

  170. }

  171. /**

  172.   * 获取mysql 语句中limit需要的值

  173.   *

  174.   * @return string

  175.   */

  176. function offset()

  177. {

  178.   return $this->offset;

  179. }

  180. /**

  181.   * 控制分页显示风格(你可以增加相应的风格)

  182.   *

  183.   * @param int $mode

  184.   * @return string

  185.   */

  186. function show($mode=1,$url=\'\')

  187. {

  188.   switch ($mode)

  189.   {

  190.    case \'1\':

  191.     $this->next_page=\'下一页\';

  192.     $this->pre_page=\'上一页\';

  193.     return $this->pre_page().$this->nowbar().$this->next_page().\'第\'.$this->select($url).\'页\';

  194.     break;

  195.    case \'2\':

  196.     $this->next_page=\'下一页\';

  197.     $this->pre_page=\'上一页\';

  198.     $this->first_page=\'首页\';

  199.     $this->last_page=\'尾页\';

  200.     return $this->first_page().$this->pre_page().\'[第\'.$this->nowindex.\' 页]\'.$this->next_page().$this->last_page().\'第 \'.$this->select($url).\'页\';

  201.     break;

  202. }

  203. /*----------------private function (私有方法)-----------------------------------------------------------*/

  204. /**

  205.   * 设置url头地址

  206.   * @param: String $url

  207.   * @return boolean

  208.   */

  209. function _set_url($url="")

  210. {

  211.   if(!empty($url)){

  212.       //手动设置

  213.    $this->url=$url.((stristr($url,\'?\'))?\'&\':\'?\').$this->page_name."=";

  214.   }else{

  215.       //自动获取

  216.    if(empty($_SERVER[\'QUERY_STRING\'])){

  217.        //不存在QUERY_STRING时

  218.     $this->url=$_SERVER[\'REQUEST_URI\']."?".$this->page_name."=";

  219.    }else{

  220.        //

  221.     if(stristr($_SERVER[\'QUERY_STRING\'],$this->page_name.\'=\')){

  222.         //地址存在页面参数

  223.      $this->url=str_replace($this->page_name.\'=\'.$this->nowindex,\'\',$_SERVER[\'REQUEST_URI\']);

  224.      $last=$this->url[strlen($this->url)-1];

  225.      if($last==\'?\'||$last==\'&\'){

  226.          $this->url.=$this->page_name."=";

  227.      }else{

  228.          $this->url.=\'&\'.$this->page_name."=";

  229.      }

  230.     }else{

  231.         //

  232.      $this->url=$_SERVER[\'REQUEST_URI\'].\'&\'.$this->page_name.\'=\';

  233.     }//end if   

  234.    }//end if

  235.   }//end if

  236. }

  237. /**

  238.   * 设置当前页面

  239.   *

  240.   */

  241. function _set_nowindex($nowindex)

  242. {

  243.   if(empty($nowindex)){

  244.    //系统获取

  245.   

  246.    if(isset($_GET[$this->page_name])){

  247.     $this->nowindex=intval($_GET[$this->page_name]);

  248.    }

  249.   }else{

  250.       //手动设置

  251.    $this->nowindex=intval($nowindex);

  252.   }

  253. }



  254. /**

  255.   * 为指定的页面返回地址值

  256.   *

  257.   * @param int $pageno

  258.   * @return string $url

  259.   */

  260. function _get_url($pageno=1)

  261. {

  262.   return $this->url.$pageno;

  263. }

  264. /**

  265.   * 获取分页显示文字,比如说默认情况下_get_text(\'<a href="">1</a>\')将返回[<a href="">1</a>]

  266.   *

  267.   * @param String $str

  268.   * @return string $url

  269.   */

  270. function _get_text($str)

  271. {

  272.   return $this->format_left.$str.$this->format_right;

  273. }

  274. /**

  275.    * 获取链接地址

  276. */

  277. function _get_link($url,$text,$style=\'\'){

  278.   $style=(empty($style))?\'\':\'class="\'.$style.\'"\';

  279.   if($this->is_ajax){

  280.       //如果是使用AJAX模式

  281.    return \'<a \'.$style.\' href="javascript:\'.$this->ajax_action_name.\'(\\\'\'.$url.\'\\\')">\'.$text.\'</a>\';

  282.   }else{

  283.    return \'<a \'.$style.\' href="\'.$url.\'">\'.$text.\'</a>\';

  284.   }

  285. }

  286. /**

  287.    * 出错处理方式

  288. */

  289. function error($function,$errormsg)

  290. {

  291.      die(\'Error in file <b>\'.__FILE__.\'</b> ,Function <b>\'.$function.\'()</b> :\'.$errormsg);

  292. }

  293. }

  294. ?>
复制代码






上一篇:昨天在操场上看到的一幕,哥震惊了
下一篇:PHPWind 首页九格支持6月13日PW6.3正式版版本
authicon mjz 发表于 2011-5-10 10:59:40 | 显示全部楼层
顶你一下,好贴要顶!
authicon cutiemimi 发表于 2011-5-11 10:59:39 | 显示全部楼层
回贴下载呀
authicon qqoxygen 发表于 2011-5-16 15:59:47 | 显示全部楼层
偶的天啊!爱死你了
authicon rin421 发表于 2011-5-24 19:59:50 | 显示全部楼层
我回不回呢 考虑再三 还是不回了吧 ^_^
authicon fhiejkl 发表于 2011-5-25 08:59:45 | 显示全部楼层
支持!好东西,拿走了!
authicon soul2511 发表于 2011-5-26 13:59:54 | 显示全部楼层
好辛苦才找到啊
authicon Cute宝贝儿 发表于 2011-5-27 01:59:42 | 显示全部楼层
哈哈  收了你
authicon 月之海洋 发表于 2011-6-16 13:59:57 | 显示全部楼层
好耶!功能强大啊
authicon huanglv80 发表于 2011-6-17 01:00:04 | 显示全部楼层
顶你一下,好贴要顶!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-2 07:13

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表