php smarty web服务开发问题汇总

来源:互联网 发布:淘宝直播怎么开 编辑:程序博客网 时间:2024/06/04 19:45

smarty框架量级轻、上手快,模板和后端分离,对于开发小的工具级别的web服务很适合。因为做的工具很简单,代码主要包含tpl的模板文件和js和php文件,index.tpl作为入口文件,tpl文件中引用js文件响应用户操作,js文件调用后端php服务处理用户的表单提交。


下面罗列一下当时遇到的一些问题。

1. 模版中通过onclick事件触发js方法。调用失败,提示方法undefined

代码:

<inputtype="radio"name="moduletype"onclick= "getModuleType();"value="app"id="moduletype" />

 原因:默认的脚本语言是js,无需额外指定language

解决办法:

<script language="JavaScript" src="../js/pageinfo.js"></script> 改为 <script  src="../js/pageinfo.js"></script>


2. 在用js操作元素的时候,提示:Uncaught TypeError: Cannot set property'display' of undefined

原因: 浏览器兼容问题,chrome和firefox浏览器通过getElementsByName等方法得到的元素包含子节点

解决办法:需要加循环条件,定位到要操作的子节点。例如:利用type属性值的判断,检查是否是被操作节点。

for(var i=0;i<element.length;i++){

                   if(element[i].type=="text"){

                           element[i].disabled="enabled";

                        element[i].value="";

                           break;

                   }

          }

3. 提交表单后,对异常情况alert弹窗提示,例如文本不能为空等,关闭弹层后表单刷新(不希望刷新,以保留用户填写的数据)

原因:button的type是submit,所以每次点击都会提交表单,提交后表单刷新

解决办法:修改button type为button,添加onclick事件提交至js处理,由js拦截异常数据,数据无误后js中执行提交表单

4. var data = $("#fpreview").serialize(); 序列化表单中的数据,$符无法识别

代码:

var data = $("#fpreview").serialize();var formdata = new Array();formdata = data.split("&");   if(formdata[0]=="moduletype=core"){      if (formdata[2]=="moduleid="){         alert('请输入模块id,不知道的请点击链接查询文档');         //window.location.history();         return false;      }      ...   }
原因:需要引入jquery.js

解决办法:

http://www.jq22.com/jquery-info122  下载最新的jquery文件,存放到工程目录中,模板中添加引用

<scripttype="text/javascript"src="../jquery-2.1.4/jquery.js"></script>

代码说明:serialize函数返回字符串,可以利用split(“&”)函数拆解字符串,返回的结果是数组,就可以对数据进行处理了。

5. js中提交表单的方法

以下两种表单提交方法,注意name不唯一,Id唯一。

document.getElementById("fpreview").submit();

document.getElementsByName("fpreview")[0].submit();

6. js调试方法

可以在浏览器控制台console中直接写简单的js语句执行,也可以通过console.log()进行调试。

7. php中的“”和‘’

php""内的内容进行解析,即如果echo "$is_pay";就是输出的$is_pay的值20,而对于''内的内容不进行任何操作直接输出,即echo'$is_pay';得结果为$is_pa

8. php代码中通过exec执行系统命令失败

解决办法:需要在php.ini中注释掉disable_functions


9 .工具中用到了跨机器的rsync服务,相关配置说明如下:

检查是否安装rsync了,ps axu | grep rsyncd  

如果没有,安装rsyncyum -y install rsync

创建/etc/rsyncd.conf文件

修改配置文件中的hosts allow,加上ip,允许部署test.weibo.com代码的机器访问

vim /etc/rsyncd.conf

启动rsync/usr/bin/rsync --daemon

10.  smarty部署到服务器后,页面出不来

解决办法:Smarty编译过的所有模板文件的存放目录地址默认是:“./templates_c”。Linux服务器上创建这个目录,你还需要修改此目录的权限,使它有写的权限



附上几个smarty的学习参考文章:

·       http://www.jb51.net/article/35758.htm

·       http://wenku.baidu.com/link?url=No8P9UxLj3-ISAM__Grq-ESSIwT4euqhmxvLo6iMmF_azLdraXsf24-o8zNpV8aJRXQ2ml_JO5aAmTz_PELBKMAT_CPuBKvNVvTIlEEH7pu

·       http://www.php100.com/html/php/lei/2013/0904/3704.html


原创粉丝点击