ThinikPHP 前端URL模式

一 U方法

ThinkPHP有强大的URL解析功能,支持多种URL模式,但这也为前端开发带来了困难,如果URL模式改变了,但前端手工编码调用服务端的URL也要相应的改变,否则就有问题了,因此ThinkPHP提供了一个U方法来产生特定模块,特定方法的URL。

U('[项目://][路由@][分组名-模块/]操作? 参数1=值1[&参数N=值N]'):

U('Index/index'),产生一个指向Index Action的index方法的URL。

这个方法如果是在模板文件中,则应当如下调用

   1:  value="%{:U('Index/index')}%"

二 前端U方法技巧

前端url,有一些技巧,当动态生成链接时,比如一个商品列表,http://server/product/pid/23,其中23是产品id,php已经从数据库中查出数据,这时可以使用下面的代码直接赋值

   1:                  <foreach name="products" item="p">
   2:                    
   3:                            <a title="%{$question.phrase}%?" href="__URL__/ViewOneProduct/pid/%$p._id%        
   4:                  </foreach>

上面这种方法,如果是U方法里就不能工作了,原因是不能在’’再次引用%{}%符号,这时可以向下面这样做:

   1:  href="%{:U('/ThinkTank/ViewOneQuestion/qid/')}%%{$item._id}%" 

这是利用ThinkPHP的模板渲染能力把item._id直接输出。

上面的方法都是处理静态的URL。例如,搜索一个产品的详细信息,它依赖于用户在input中输入的产品id,在js的处理函数中,动态生产url,然后使用ajax方法调用服务器,这时问题出来了,在另外一个php框架禅道里,它提供了一个js方法用于在js输出一个特定模块的url,但ThinkPHP并没有提供这个方法,我在项目中使用了折中的方法,使用一个hidden域,把需要的URL先渲染出来,然后在js函数里,获取这个hidden域的值,并拼接参数。

   1:  <script type="text/javascript">
   2:      // 使用ajax异步post数据
   3:      $(document).ready(function() {
   4:          /* attach a submit handler to the form */
   5:          $("div.btn a").click(function(event) {
   6:   
   7:              /* stop form from submitting normally */
   8:              event.preventDefault();
   9:   
  10:              /* get some values from elements on the page: */
  11:              var linkbutton = $(this);
  12:                                                 // 获取隐藏域分阶段的连接
  13:              var url = linkbutton.attr('action_url');
  14:                                              
  15:              var content = $('#txt_writer').val();
  16:              if (content == "") {
  17:                  return;
  18:              }
  19:                                                 // 发送到服务器
  20:              /* Send the data using post and put the results in a div */
  21:              $.post(
  22:                      url, 
  23:                      {
  24:                          txt_writer : content
  25:                      },
  26:                      function(data) 
  27:                      {
  28:                          // 处理数据
  29:                      },
  30:                      "json"
  31:                  ).error(function() {
  32:                      alert('error');
  33:              });
  34:              
  35:          });
  36:      });
  37:  </script>

转载于:https://www.cnblogs.com/BlankEye/archive/2012/11/25/2787152.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值