仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 605|回复: 19
打印 上一主题 下一主题

[学习教程] PHP网页设计网友支招:生成smarttemplate模板处置程...

[复制链接]
简单生活 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:39:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
学习如何将PHP与HTML结合起来完成简单动态页面   <?php
/**
* 生成smarttemplate模板处置法式框架
*
* smarttemplate 模板类具有极高的任务效力,代码尺寸很小。
* 他的可扩大模板函数更是有独到的地方。
*
* 虽然只要不多的几个办法,利用起来也很复杂。
* 然而在多此调剂模板文件今后,要使处置法式与模板对应起来可是要花些功夫了。
* 本法式用于剖析模板文件、并给出模板处置法式的框架
**/
ob_start();
$template_name = "include/main.html";
$str = file_get_contents($template_name);
preg_match_all("/<!--.*-->{\w.*}/u",$str,$regs);

$stack = array();
$vars = array();
$functions = array();
$key = 0; // = chr(ord("i")+count($stack));
$lf = "\r\n";
$outstr = "";
foreach($regs[0] as $v)
{
  if(preg_match_all("/<!-- begin (\w+) -->/",$v, $r))
  {
    array_push($stack,$r[1][0]);
    $k = chr(ord("i")+$key++);
    $outstr .= str_repeat(chr(9), $key-1)."/* 对数组 \${$r[1][0]} 赋值 */$lf";
    $outstr .= str_repeat(chr(9), $key-1)."for(\$k=0;\$k<1;\$k++) \{$lf"; 
  }
  elseif(preg_match_all("/<!-- end (\w+) -->/",$v, $r))
  {
    $v = array_pop($stack);
    $outstr .= str_repeat(chr(9), --$key)."
  }
  $lf";
  if($key)
  {
    $k = chr(ord("i")+$key-1);
    $p = $stack[$key-1];
    $outstr .= str_repeat(chr(9), $key)."\${$p}[\$k][$v] = \$v;$lf";
  }
  else
  $outstr .= "\$data[$v] = \$v;$lf";
}
elseif(preg_match_all("/{(\w+)}/",$v, $r))
{
  if(count($stack))
  {
    $v = $stack[$key-1];
    $k = chr(ord("i")+$key-1);
    $outstr .= str_repeat(chr(9), count($stack))."\${$v}[\$k][{$r[1][0]}] = {$r[1][0]}测试;$lf";
    $ch = "\$data[".join("][][",$stack)."][{$r[1][0]}]";
    if(! in_array($ch, $vars))
    $vars[] = $ch; 
  }
  else
  if(! in_array("\$data[{$r[1][0]}]", $vars))
  { 
    $vars[] = "\$data[{$r[1][0]}]";
    $outstr .= "\$data[{$r[1][0]}] = {$r[1][0]}测试;$lf"; 
   }
}
else
if(preg_match_all("/{(\w+):([^}]+)/",$v, $r))
{ 
  $ch = $r[1][0]."({$r[2][0]})";
  $define = true;
  if(! @include("smarttemplate_extensions/smarttemplate_extension_serverr.php"))
  $define = false;
  $functions[] = array(name=>$ch, define=>$define);
  foreach(split(",",$r[2][0]) as $v)
  if($v[0] != ")
  if(! in_array($v, $vars))
  {
    $vars[] = "\$data[$v]";
    $outstr .= "\$data[$v] = $v测试;$lf";
   }
}
else
if(preg_match_all("/<!-- if (\w+)/",$v, $r))
{ 
  if(! in_array("\$data[{$r[1][0]}]", $vars)) 
  {
    $vars[] = "\$data[{$r[1][0]}]";
    $outstr .= "\$data[{$r[1][0]}] = {$r[1][0]}测试;$lf";
  }
}
echo <<< text
<?php
/**
* 模板 $template_name
* 利用了以下变量,请对其赋值
text;
foreach($vars as $v)
echo " * $v$lf";
echo " *$lf";
echo " * 利用了以下模板函数$lf";
$ar = array();
foreach($functions as $k=>$v)
{
  echo " * $v[name]$lf";
  if(! $v[define]) $ar[] = $k;
}
if(count($ar))
{
  $path = "smarttemplate_extensions";
  if(! is_dir($path))
  {
    mkdir($path,0666);
    chmod($path,0666); 
  }
  echo " *$lf";
  echo " * 个中以下函数不决义,请界说$lf";
  foreach($ar as $k)
  {
    $v = $functions[$k][name];
    $name = preg_replace("/(\w+).*/","\\1",$v);
    echo " * $v => $path/{$path}_$name.php$lf"; 
    $fp = fopen("$path/{$path}_$name.php","w");
    fwrite($fp,"<?php$lf");
    fwrite($fp,"function {$path}_$v \{$lf");
    fwrite($fp," return 函数$v;$lf");
    fwrite($fp,"}$lf?>$lf");
    fclose($fp);
  }
}
echo <<< text
**/
/** 对模板变量赋值的能够模式 **/
text;
echo $outstr;
echo <<< text
/** 加载并履行模板 **/
require_once "class.smarttemplate.php";
\$page = new smarttemplate("$template_name");
\$page->assign(\$data);
\$page->output();
?>
text;
$code = ob_get_contents();
ob_end_clean();
$fname = basename($template_name);
$fname = substr($fname,0,strrpos($fname,".")+1)."php";
$fp = fopen($fname,"w");
fwrite($fp,$code);
fclose($fp);
include "$fname";
?>
只要实现最基本的功能就可以了 就是可以添加留言 然后可以显示留言,然后加入管理功能
深爱那片海 该用户已被删除
沙发
发表于 2015-2-4 03:07:26 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
透明 该用户已被删除
板凳
发表于 2015-2-9 12:52:20 | 只看该作者
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。
小妖女 该用户已被删除
地板
发表于 2015-2-25 21:12:02 | 只看该作者
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
再现理想 该用户已被删除
5#
发表于 2015-3-10 10:07:58 | 只看该作者
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
只想知道 该用户已被删除
6#
发表于 2015-3-17 06:10:13 | 只看该作者
在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
活着的死人 该用户已被删除
7#
发表于 2015-3-17 06:10:13 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
愤怒的大鸟 该用户已被删除
8#
发表于 2015-3-17 06:10:14 | 只看该作者
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
乐观 该用户已被删除
9#
发表于 2015-3-23 22:42:27 | 只看该作者
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
飘灵儿 该用户已被删除
10#
发表于 2015-3-27 10:50:24 | 只看该作者
当然这种网站的会员费就几十块钱。
11#
发表于 2015-3-28 00:11:16 | 只看该作者
学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql
莫相离 该用户已被删除
12#
发表于 2015-3-30 20:20:51 | 只看该作者
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
金色的骷髅 该用户已被删除
13#
发表于 2015-4-1 08:13:44 | 只看该作者
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。
精灵巫婆 该用户已被删除
14#
发表于 2015-4-1 09:10:14 | 只看该作者
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
不帅 该用户已被删除
15#
发表于 2015-4-12 12:21:27 | 只看该作者
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
灵魂腐蚀 该用户已被删除
16#
发表于 2015-4-16 11:39:11 | 只看该作者
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
小女巫 该用户已被删除
17#
发表于 2015-4-21 04:57:29 | 只看该作者
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
第二个灵魂 该用户已被删除
18#
发表于 2015-5-2 02:40:06 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
因胸联盟 该用户已被删除
19#
发表于 2015-5-6 07:09:31 | 只看该作者
本文当是我的笔记啦,遇到的问题随时填充
飘飘悠悠 该用户已被删除
20#
发表于 2015-5-6 19:09:47 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-11 10:07

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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