浏览模式: 标准 | 列表全部文章

关于“php企业建站系统重写进度”

淡水在http://www.tsingfeng.com/show-642-1.html

引用:
  1. php建站系统,采用了tinybutstorng模板类。上个版本还使用了adodb类库。   
  2.   
  3. 这个版本采用utf-8编码。去除了adodb类库,小强内置了mysql的查询功能。于是效率提升了。   
  4.   
  5. 新闻和产品都是三级分类的。原本是要做成无限分类的,可是小强这里写不出了。还是没有php的heredoc方便啊。   
  6.   
  7. 进度:   
  8. 管理员模块………………………………over   
  9.   
  10. 投票模块…………………………………over   
  11.   
  12. 留言本……………………

现在系统以及写好了,演示http://wine.aeolian.cc

功能说明:

新闻系统(3级分类,非最终类可以添加新闻)

产品系统(3级分类,非最终类可以添加产品)

产品系统集成网上销售(支持网银在线在线支付)

tinybutstrong模板引擎,方便dreamweaver等软件编辑模板

utf-8编码,支持多语言

目录式的伪静态

后台订单管理等。。。

最近不顺(车被偷,家里也失窃,损失不小,近8K),有意有价分享。

需要的联系 :himini@qq.com

web MVC模式

MVC 三个角色的描述:
Model - 持有资料、状态、程序逻辑,并提供界面供人取得资料与状态。
View  - 用来呈现 Model 中的资料与状态。
Controller - 取得使用者的输入后,并解读此输入以转换成 Model 对应的动作。

Tags: mvc

安装与使用PhpDocumentor

写文件是一个程序设计师最最痛苦的事情之一,尤其是写了一堆程序后有人要你把 Function ,Class 等等等等,写成一份文件。

这事情不管你是写 c/c++ , perl , ruby , php 都不例外。

phpDocumentor 是我们的救星! 只要在写程序的时候,乖乖的写一点注解,写一点范例,多一点说明,注意一下格式,等到程序完工后,只要一个指令,就可以立刻把全部程序的说明文件产生出 来,而且还有多种样式可以选择,甚至可以作成 PDF , CHM 喔...

好了,屁话不多说,先来说说怎么装上这好用的东西吧...

phpDocumentor 本身已经是 pear 的成员之一,所以安装的时候只要用 pear 来安装即可(以下范例为在 Windows 下进行,以后再补上 LInux 下的)

--如果你已经有装 php 跟 pear 请跳过--

首先假设我把我的的 php 安装路径在 d:\php\

也就是说我从 www.php.net 下载了最新的 php win32 安装档案,解开后放在 d:\php\

那么这个目录下面应该有 d:\php\PEAR这个目录,但是当你进去看的时候,你会发现好像没有 PEAR 相关程序库阿...

没错,这个时候你还没有安装 PEAR 请先用 go-pear.php 安装基本 pear 环境。

那么在 d:\php 目录下有一个档案,叫做 go-pear.bat 请开一个 cmd 视窗去执行他,中间会有一些问题,基本上都照预设值去跑就可以了...

跑玩后,你的 pear 应该会被安装在 d:\php\PEAR\pear 下面,而帮助你安装其他 pear 套件的 pear.bat 则在 d:\php\PEAR下面

--安使安装 phpDocumentor --

安装 phpDocumentor 的过程也很简单,只要利用 pear.bat 即可!

使用指令如下

d:\php\PEAR\pear.bat install -o PhpDocumentor

当中有多下一个 -o 的参数,意思是要 pear 把相依的套件也一起下载安装。

安装完成后 d:\php\PEAR 下面应该会多一个 phpdoc.bat 的批次档,我们就可以用这个批次档来产生我们的文件。

-- 使用 phpdoc.bat 产生文件 --

产生文件的方式我通常只有用下面一行指令解决:

d:\php\PEAR\phpdoc.bat -o HTML:Smarty:PHP -d d:\myProject\php_source\ -t d:\myProject\docs

这样子的意思是说,采用 HTML:Smarty:PHP 的样板格式,然后原始码目录在 d:\myProject\php_source\ ,接着把产生的文件放在 d:\myProject\docs 底下。

当中若是你只要对一个档案作文件的话,可以把 -d 改成 -f 然后后面接的着就是指定的档名。

样板的格式基本上有 HTML, XML, PDF, CHM 四大类别,通常我用的都是 HTML:Smarty:PHP 这个,因为他比较好看!

另外还有就是 CHM:default:default 这个.用来产生 chm 的,不过他产生出来的是 .hhp 档案,也就是还没有经过 HTML helper 编译过的档案,所以要另外安装 HTML Helper 来编译 hhp 档案就可以产生你要的档案。

-- 最后来说一下怎么写注解 --

phpDocumentor 的注解有一定的规格,但是都跟我们原来写注解的方式很像,只是要注意一下东西而已。

简单的来看个范例好了

<?php

/**

 * 这里是这个物件的说明

 * 可以多行喔!~

 *

 */

class MyClass {

   /**

   * 这里是变量的说明

   *

   * @var int

   */

   var $a ;

   /**

   * 这里是变量的说明.

   *

   * @var string 这里也可以放说明

   */

   var $b ;

   

   /**

   * 这是针对函式的说明

   * 也是一样可以多行

   * 若是简单的范例也可以放这里

   *

   * @param int $a 可以放入传入的型态

   * @return array 可以说明回传的型态

   */

   function first ( $a ) {

      return array();

   }

}

?>

基本上都是在

/**

*

*/

中间写注解,别忘了每行前面要有个 * 喔!

注解比较常用到参数的应该是

@author 程序作者名称,联络方式

@const 常数

@deprecate 不建议使用的 API

@global 全域变量

@param 函数的参数

@return 回传值

@see 可参考函数

@since 开始时间

@static 静态变量

@var 物件成员变量

@todo 计划中要进行的项目

 

更多更详细的资料请到 http://www.phpdoc.org/ 看囉!~

PS:ZEND STUDIO 在functon前打上“/**”回车后,会智能产生注释

Tags: phpdocumentor

Adodb 的 GetInsertSQL 和 GetUpdateSQL以及AutoExecute

使用 GetInsertSQL 和 GetUpdateSQL 产生 Update 及 Insert 的SQL指令

ADODB 的函数:GetUpdateSQL()及 GetInsertSQL()。允许你在执行了像"Select * FROM table query Where..."这样的查询函数後,建立一 个 $rs->fields复本,改变这些栏位,然後自动产生出更新或是新增的SQL指令。

以下我们展示如何运用这些函数,我们将存取一个资料表,带有下列栏位:(ID,FirstName,LastName,Created)。在这些函数被执行前,你需要藉由一个对资料表的查询指令(select)来初始化一个资料集。

GetInsertSQL()范例

PHP代码
  1. #GetInsertSQL() 范例码    
  2.   
  3. $sql = "Select * FROM ADOXYZ Where id = -1";     
  4. # 从资料库中查询出一个空的资料集    
  5.   
  6. $conn = &ADONewConnection("mysql");     
  7. # 建立一个连结    
  8. $conn->debug=1;    
  9. $conn->PConnect("localhost""admin""""test");    
  10. # 连结到 MySQL, 资料库名称为 test    
  11. $rs = $conn->Execute($sql);     
  12. # 执行查询,并取得一个空的资料集    
  13.    
  14. $record = array();    
  15. # 初始化一个阵列,以便存放记录资料供新增用    
  16.    
  17. # 设定记录中的栏位值    
  18. $record["firstname"] = "Bob";    
  19. $record["lastname"] = "Smith";    
  20. $record["created"] = time();    
  21.     
  22. # 传入空的资料集及栏位资料阵列到GetInsertSQL函数中,以执行功能    
  23. # 这个函数将会依传入的资料,回传一个全格式的 Insert SQL指令    
  24.     
  25. $insertSQL = $conn->GetInsertSQL($rs$record,true);
  26. $conn->Execute($insertSQL);
  27. # 将记录挿入资料库中
$insertSQL = $conn->GetInsertSQL($rs, $record,true);

GetInsertSQL($rs, $arrFields,$magicq=false)
建立一个 SQL 以新增一笔记录到被给予的资料集 $rs。这个查询必需是在连结状态。$magicq 被用于指出魔术引号功能是否被激活

GetUpdateSQL() 范例:
PHP代码
  1. #GetUpdateSQL() 范例码
  2. $sql = "Select * FROM ADOXYZ Where id = 1";   
  3. # 选择一笔记录以便更新  
  4. $rs = $conn->Execute($sql);   
  5. # 执行这个查询,并取得一个存在的记录来更新  
  6. $record = array();   
  7. # 初始化一个阵列,以存放要更新的资料  
  8.   
  9. # 设定栏位里的值  
  10. $record["firstname"] = "Caroline";  
  11. $record["lastname"] = "Smith";   
  12. #更新 Caroline的姓由 Miranda 变成 Smith  
  13.   
  14. # 传入这个只有单一记录的资料集以及含有资料的阵列到 GetUpdateSQL函数里  
  15. # 函数将会回传一个具有正确 Where 条件的 Update(更新) SQL 指令  
  16. $updateSQL = $conn->GetUpdateSQL($rs$record, false ,true);  
  17.   
  18. $conn->Execute($updateSQL);   
  19. # 更新资料库中的记录  
  20. $conn->Close();  

$updateSQL = $conn->GetUpdateSQL($rs, $record, false ,true);

GetUpdateSQL($rs, $arrFields, $forceUpdate=false,$magicq=false)
建立一个 SQL 以更新一个被给予的资料集 $rs ,被修改的字段存放在数组 $arrFields中(这个数组必需是具名数组,字段名为索引,值为修正值),会与原来的资料集做一个比较,如果 $forceUpdate被设为 true,那么即使 $arrFields与 $rs->fields完全相同,也会产生出更新的SQL指令。资料集必需在连结状态。$magicq 被用于指出魔术引号功能是否被激活。

再说说,AutoExecute

还没有用 GetInsertSQL 跟 GetUpdateSQL 以前,通常都需要自己撰写相关的 SQL 去操作数据库,不免会遇到打错SQL 或是程序码中一堆 SQL 语法的问题。之后我用 adodb 的时候,通常都会跟官方文件上得范例差不多,都是用 GetInsertSQL 或是 GetUpdateSQL 产生 SQL ,然后才用 Execute 去执行该 SQL ,而GetUpdateSQL 之前还要 Select 一下数据库,取出一份该笔资料得栏位跟资料内容,所以整段程序变成有点累赘,因为一些不必要的重复的 Code 不断出现。

类似这样:

PHP代码
  1. $rs = $db->Execute("Select * from mytable where id = '{$id}'");  
  2. $updateArray['name'] = 'newName';  
  3. $UpdateSQL = $db->GetUpdateSQL($rs,$updateArray);   
  4. $db->Execute($sql); 

而比较新的版本的 adodb 则新增了 AutoExecute ,则可以大幅度减少这些无谓的程序码.

AutoExecute($table, $arrFields, $mode, $where=false, $forceUpdate=true,$magicq=false)

参数说明:

  • $table 要处理的表格名称
  • $arrFields 要更新或新增的栏位内容
  • $mode 模式选择,内容需为 INSERT 或是 UPDATE 
  • $where 当模式为 UPDATE 的时候,需要输入更新条件
  • $forceUpdate 一般来说预设 UPDATE 的时后,会先从数据库取出该笔资料,然后若是栏位内容没有修改,则不会进行UPDATE,只会更新有更新的栏位,若是姜此参数设定,则会强迫一律更新。
  • $magicq 系统环境是否有把 magice_quotes 打开,预设是没有,所以会替你将传入的资料作 qstr

范例:

PHP代码
  1. $record["firstName"] = "Carol";  
  2. $record["lasTname"] = "Smith";   
  3. $conn->AutoExecute($table,$record,'INSERT');  
  4. # executes "INSERT INTO $table (firstName,lasTname) values ('Carol',Smith')";  
  5. $record["firstName"] = "Carol";  
  6. $record["lasTname"] = "Jones";   
  7. $conn->AutoExecute($table,$record,'UPDATE', "lastname like 'Sm%'"); 
  8. # executes "UPDATE $table SET firstName='Carol',lasTname='Jones' WHERE lastname like 'Sm%'"; 

从上面的范例可以发现,比起之前用 GetUpdateSQL 与 GetInsertSQL 更为简洁,且更为方便了!官方文件http://phplens.com/adodb/reference.functions.getupdatesql.html#autoexecute  

Tags: adodb

Tinybutstrong的视频教程

忙里偷闲,录了Tinybutstrong的视频教程,作为淡水河边php视频教程的进阶篇的部分。有需要的可以到php同盟会去下载。嗯,要30分才看得到的。

Tags: tinybutstrong

记录一下常用的CSS命名规则

记录一下常用的CSS命名规则。from:DDA's KO Times

» 阅读全文

Tags: css

php使用ADODB实现session共享

近来很忙。php使用ADODB实现session共享,来自phpchina。

» 阅读全文

Tags: adodb, session

phpMyAdmin的header_http.inc.php

 

PHP代码
  1. /**     
  2.  * Sends http headers     
  3.  */      
  4. $GLOBALS['now'] = gmdate('D, d M Y H:i:s') . ' GMT';      
  5. header('Expires: ' . $GLOBALS['now']); // rfc2616 - Section 14.21      
  6. header('Last-Modified: ' . $GLOBALS['now']);      
  7. header('Cache-Control: no-store, no-cache, must-revalidate, pre-check=0, post-check=0, max-age=0'); // HTTP/1.1      
  8. header('Pragma: no-cache'); // HTTP/1.0      
  9. // Define the charset      
  10. header('Content-Type: text/html; charset=utf-8']);  

php企业建站系统重写进度

php建站系统,采用了tinybutstorng模板类。上个版本还使用了adodb类库。

这个版本采用utf-8编码。去除了adodb类库,小强内置了mysql的查询功能。于是效率提升了。

新闻和产品都是三级分类的。原本是要做成无限分类的,可是小强这里写不出了。还是没有php的heredoc方便啊。

进度:
管理员模块………………………………over

投票模块…………………………………over

留言本……………………………………over

新闻模块…………………………………over
( 根据path,list出news(or product))

产品模块…………

购物车…………

订单…………

会员…………

php中header的用法

标头 (header) 是服务器以 HTTP 协义传 HTML 资料到浏览器前所送出的字串,在标头 与 HTML 文件之间尚需空一行分隔。有关 HTTP 的详细说明,可以参 RFC 2068 官方文件 (http://www.w3.org/Protocols/rfc2068/rfc2068)。在 PHP 中送回 HTML 资料前,需先 传完所有的标头。
  
注意: 传统的标头一定包含下面三种标头之一,并只能出现一次。
  
Content-Type: xxxx/yyyy
Location: xxxx:yyyy/zzzz
Status: nnn xxxxxx
  
在新的多型标头规格 (Multipart MIME) 方可以出现二次以上。

范例一: 本例使浏览器重定向到淡水河边的网站。header重定向 就等价于替用户在地址栏输入url

PHP代码
  1. Header("Location: http://www.tsingfeng.com";);    
  2. exit();  

范例二: 要使用者每次都能得到最新的资料,而不是 Proxy 或 cache 中的资料,可以使用下列的标头

PHP代码
  1. header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1   
  2. header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // 过去的时间  

 范例三: 让使用者的浏览器出现找不到档案的信息。

PHP代码
  1. header("HTTP/1.0 404 Not Found");  

范例四:让使用者下载档案

PHP代码
  1. // 这样将会直接输出一个 PDF 文件   
  2. header('Content-type: application/pdf');   
  3. // 这样做就会提示下载 PDF 文件 downloaded.pdf   
  4. header('Content-Disposition: attachment; filename="downloaded.pdf"');   
  5. // 这是 original.pdf 的源文件   
  6. readfile('original.pdf');