Submitted by gouki on 2008, April 23, 9:29 AM
ThinkPHP的模版引擎强大就强大在于它可以使用XML标签来为TP模版引擎进行扩展,因此TP的标签功能就成了TP模版的亮点所在。要想让TP的模版功能更加强大,你就得学会扩展TP的标签功能,即:自定义标签
开发自定义标签功能的时候,有几个注意的地方,
1、文件名的规范性,这个当然是不用多解释了,TagLibInput.class.php
(TagLib加是你定义的标签名,首字符大写,这样你的文件名中的Input就会自动认为你的XML文件名)
2、目录所在:目前暂时还是存放到THINKPHP的核心类库里,目录为:/THINKPHP/Lib/Think/Template
主程序文件放到:/THINKPHP/Lib/Think/Template/TagLib/ 目录下
自定义的XML文件放到:/THINKPHP/Lib/Think/Template/Tags/ 目录下
(自定义的文件是小写的标签名,即刚才类名中的Input的小写)
注意事顶:
如果你发现你自定义的标签没有被解析,请按如下方法进行检查(以input标签为例)
1、查看文件开始的地方是否加载了<tagLib name="cx,html,input" />,同时,请检查是否符合XML规范,如:标签一定要闭合。例:<br />,否则会出现XML解析错误
2、检查文件是否都为UTF-8编码,因为在解析XML的时候,都是采用UTF8编码,如果不是UTF8编码,会出现一些奇怪的解析错误,很多时候都会出现simpleXml解析器错误,如果出现这种错误,请检查文件编码,如果是UTF8编码的文件,请同时检查文件头是否存在BOM标记。
3、自定义的标签中,是否忘了双引号。由于在写HTML的时候,很容易忽略双引号,比如<input type=text name=name>,如果是这样,在被当成XML解析的时候,肯定会报错的,正确的写法应该是:<input type="text" name="name" value="value" />(标签要闭合),如果是自己自定义的标签,则应该这样写:<input:text name="" value="" />
Tags: thinkphp, 标签
PHP Framework | 评论:0
| 阅读:35612
Submitted by gouki on 2008, April 23, 9:13 AM
使用ThinkPHP自带的模版引擎处理模版问题时,一般情况下不会有什么问题。
但是,在处理一些XHTML模版时,可能会遇到以下问题,比如,模版作者在制作模版时,为了规范页面,往往在文件头部加上<?xml version="1.0" encoding="utf-8"?>,表明文件是属于XML规范,所有的标签都必须遵循XML的相关规定。
然而,默认的ThinkPHP模版引擎在处理的时候会出现错误,处理这个错误的情况有以下几种办法。
第一种方法:你尝试关闭PHP的短标签功能
第二种方法:试着用<literal></literal>标签把XML的标签包含起来,即
<literal><?xml version="1.0" encoding="utf-8"?></literal>
第三种方法:修改ThinkPHP/Lib/Think/Template/ThinkTemplate.class.php的compiler函数,在函数的最后一行return $templContent;前加入
PHP代码
-
- $tmplContent = preg_replace('/(<?(?!php|=|$))/i', '<?php echo '\1'; ?>'."n", $tmplContent );
任何一种方法理论上都可以,第一种第二种方法实在不行的时候,再用第三种,毕竟第三种方法是改动核心的,如果以后更新核心库,可能会不当心就覆盖掉了。
不过,流年说过了,他已经更新了模板引擎的解析类,并且专门判断了是否开启了短标签,如果开启的话会自动用第三种方法解析。更新下SVN的ThinkTemplate.class.php 文件就可以了(可能压缩包还没有同步更新[2008-04-22])。
Tags: thinkphp, template, 短标签
PHP Framework | 评论:0
| 阅读:30186
Submitted by gouki on 2008, April 22, 10:43 PM
InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。
» 阅读全文
Tags: db, mysql
Baby | 评论:0
| 阅读:38472
Submitted by gouki on 2008, April 21, 11:22 PM
Literature | 评论:0
| 阅读:28148
Submitted by gouki on 2008, April 18, 4:03 PM
软件版本
apache: apache_2.0.59-win32-x86-no_ssl.msi
php : php-5.2.2-Win32
mysql : mysql-noinstall-4.0.27-win32
具体的软件我就不提供下载了,自己去找吧。。。呵呵
本来自己装的时候,一直失败,在 vampire 同志的指导下装的,才成功。。。以前一直是用集成包的,难得手工装一次,上一次手动安装已经是4、5年前的事情了(感觉很奇怪,第一次装的时候,都成功了……只是现在反而都不行了,呵呵)。
步骤开始: 我的目录 一般是在 d:/usr/local/ 下面(因为这样这个目录可以直接被我拷走到任何机器上就可以直接运行了)。
1、安装apache2,直接下一步下一步就结束了,安装好之后 apachemonitor 会自动启动,先关闭apache 。安装好的目录是:d:/usr/local/Apache2/
2、解压缩到 d:/usr/local/php目录下(如果怕偷懒,可以将几个DLL拷到c:/windows/system32目录下,当然也可以用apache的conf来LOAD)
3、修改 apache2/conf/httpd.conf,
因为我默认的 WEB 目录在 local 目录下,为 public_html ,因此我搜索 d:/usr/local/Apache2/htdocs 替换成 d:/usr/local/public_html
然后添加以下代码:(由于是在本机调试用,当然可以直接这样操作,因为让APACHE在加载的时候一次性加入这些多的DLL,还是会降低效率的。)
# PHP的配置
PHPIniDir "d:/usr/local/php"
LoadFile d:/usr/local/php/php5ts.dll
LoadFile d:/usr/local/php/libmysql.dll
LoadFile d:/usr/local/php/libmcrypt.dll
LoadFile d:/usr/local/php/libmhash.dll
LoadFile d:/usr/local/php/libeay32.dll
LoadFile d:/usr/local/php/ssleay32.dll
LoadModule php5_module "d:/usr/local/php/php5apache2.dll"
AddType application/x-httpd-php .php
DirectoryIndex index.php index.html index.htm
注意:如果是php4那么就
LoadModule php4_module "d:/usr/local/php/php4apache2.dll"
php4apache2.dll 好象不在PHP的根目录下,好象在isapi目录下,切记拷到根目录下。
上面的loadFile 好象不在根目录下(实在没有PHP4了。自己配置一下吧)
4、修改 php.ini ,如果是本机测试,那么只需要改几处就行了。
把默认的 ;extension_dir = "./ext" 改为 extension_dir = "d:/usr/local/php/ext"
然后把一些扩展打开:
extension=php_mbstring.dll
extension=php_exif.dll
extension=php_curl.dll
extension=php_mhash.dll
extension=php_mcrypt.dll
extension=php_gd2.dll
extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_pdo.dll
extension=php_pdo_mysql.dll
切记,php_mbstring.dll 要放在最前面,因为有部份DLL在加载的时候,要求先加载mbstring的,例如exif,当然具体开几个扩展,自己看自己的需求情况吧。
再然后,修改一下upload_max_filesize = 2M ,这个是默认的,如果有需要,可以改大一点,一般不要超过8M
再修改一下 session.save_path = "d:/usr/local/sessions" (前提是先建好这个目录)
5、解压缩mysql的压缩文件到 d:/usr/local/mysql目录,在目录下建一个bat文件,里面放上一句
copy my-huge.cnf my.ini
如果还有内容修改,可以参照网上的一些my.ini配置来进行修改
再到bin目录下建一个bat文件,名字是:installMysql.bat
内容为:
mysqld-nt --install mysql --default-file="d:/usr/local/mysql/my.ini"
net start mysql
这样的话,安装后的服务名为 mysql ,默认读取的文件是 my.ini ,可以避免将my.ini拷到C盘根目录下,方便下次重装系统后使用
6、现在再利用apache monitor打开apache,到public_html目录下建一个 phpinfo.php,内容为
<?php
phpinfo();
?>
到浏览器里看一下,是不是mysql,gd都加载好了?
7、如果你还需要zend的扩展,那么到我这里下载吧。。。(点击下载)
步骤:先停掉apache,修改php.ini,在最后加上
[zend]
zend_extension_ts="d:/usr/local/zend/optimizer/ZendExtensionManager.dll"
zend_extension_manager.optimizer_ts="d:/usr/local/zend/optimizer/lib"
当然了,下载的压缩文件是解压到d:/usr/local/zend目录下(我提供的只支持php 5.2.x)如果你有特别需要,可以到zend的网站上下载,然后安装好之后,COPY 过来并卸载掉zend optimizer。
Software | 评论:0
| 阅读:23873