改写ThinkPHP的U方法使其路由下分页日常,thinkphp中U方法按路由准则生成url的秘诀

如下所示:

ThinkPHP3.1.3在启用路由的情况下,其分页地址不是路由的地址,由于thinkphp3.2.1的代码也没有修复,很多人都遇到了这一问题,本文采纳olcms的修改方法解决这一问题,特别感谢phper
jack对此做出的贡献,具体解决办法是修改ThinkPHP的functions.php的U方法,在287行左右:

本文实例讲述了ThinkPHP里用U方法调用js文件的方法。分享给大家供大家参考。具体如下:

//更改模块配置文件
'URL_ROUTER_ON'   => true, 
'URL_ROUTE_RULES'=>[]//编写路由优化
 if(!empty($vars)) { 
 // 添加参数
 foreach ($vars as $var => $val){
 if('' !== trim($val))
 $url .= $depr . $var . $depr . urlencode($val);
 }

在TP里提供了在模板文件中直接调用函数的快捷方法。U是其中之一。手册里有它的用法:

tp开启路由后,使用U方法是不会按路由规则生成url的,一般我们是要手动修改模版,把里面的U方法去掉,手动修改链接,如果是已经写好的程序,后期才添加路由,修改起链接就太麻烦了

后面加入以下代码

复制代码 代码如下:

今天无聊就修改了一下U方法,让它按路由规则生成url,再不用一条条修改模版了。

/*
* tp开启路由之后下一页路由失效问题 分页类URL组装
*/
 //如果开启路由
 if(C('URL_ROUTER_ON')){        
  foreach (C('URL_ROUTE_RULES') as $zhaolg => $zlig){//遍历路由            
    if(strstr('/'.GROUP_NAME.$url,$zlig)){//从网址中找路由规则
      $lg = strstr($zhaolg,'/:');//分析规则 带参数?
      if($lg){//如果规则带参数              
        $tempzlg = str_replace('/:','',$lg);//取参数
        //dump($tempzlg); 
        if($tempzlg){
          if(C('APP_SUB_DOMAIN_DEPLOY')){
            $zlgurl = str_replace($zlig,$zhaolg,'/'.GROUP_NAME.$url); //url替换为路由规则 
          }else{
            $zlgurl = str_replace($zlig,$zhaolg,$url); //url替换为路由规则 
          }                
          //注 /s/:c/c/4/p/__PAGE__
          //dump($zlgurl);
          $url = str_replace($lg.'/'.$tempzlg,'',$zlgurl);//url替换路由规则参数

        }  
      }else{//分析规则 不带参数
        if(C('APP_SUB_DOMAIN_DEPLOY')){
          $url = str_replace($zlig,$zhaolg,'/'.GROUP_NAME.$url);//url替换为路由规则
        }else{
          $url = str_replace($zlig,$zhaolg,$url);//url替换为路由规则 
        }          
      }
    }
  }
 }

{:U(‘User/insert’ )}

下面代码添加到 /ThinkPHP/Common/functions.php
文件,在U方法里面直接搜索if($suffix),在前面加入以下代码,u方法生成的url就是按照路由规则生成的呢!

至此问题得以解决!

先把js文件的后缀改成html(这个不会影响),然后写个JsAction,在里面进行调用:

if(C('URL_ROUTE_RULES')){
 foreach (C('URL_ROUTE_RULES') as $rule=>$real) {
  if(strpos($url, $real)!==false){
   $url = str_replace($real, $rule, $url);
   preg_match("/\/(\w+)\.php\/(\w+)/", $url, $match);
   if(isset($match[1]) && isset($match[2]) && $match[1][0]==$match[2][0]){
    $url = preg_replace("/\/(\w+)\.php/", '', $url);
   }elseif(strpos($url, 'index.php')!==false){
    $url = str_replace("/index.php", '', $url);
   }else{
    $url = str_replace(".php", '', $url);
   }

   preg_match_all("/(:\w+)/", $rule, $matches);
   foreach ((array)$matches[1] as $match) {
    $url = str_replace($match . '/', '', $url);
    $url = str_replace(substr($match, 1) . '/', '', $url);
   }
  } 
 } 
}

您可能感兴趣的文章:

  • ThinkPHP中U方法的使用浅析
  • thinkPHP
    js文件中U方法不被解析问题的解决方法
  • ThinkPHP里用U方法调用js文件实例
  • thinkphp中U方法按路由规则生成url的方法
  • PHP隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
  • thinkphp微信开发(消息加密解密)
  • thinkphp微信开之安全模式消息加密解密不成功的解决办法
  • ThinkPHP实现的rsa非对称加密类示例
  • thinkPHP中U方法加密传递参数功能示例
<?php
class JsAction extends Action{
  function nav() {
    $this->display('Index:js:nav');
  }
}
?>
//最后,把左框架里的JS链接改一下:
<script type="text/javascript" src="{:U('Js/nav')}"></script>

以上这篇thinkphp中U方法按路由规则生成url的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

希望本文所述对大家基于ThinkPHP框架的php程序设计有所帮助。

您可能感兴趣的文章:

  • ThinkPHP中U方法的使用浅析
  • 改写ThinkPHP的U方法使其路由下分页正常
  • thinkPHP
    js文件中U方法不被解析问题的解决方法
  • ThinkPHP里用U方法调用js文件实例
  • PHP隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
  • thinkphp微信开发(消息加密解密)
  • thinkphp微信开之安全模式消息加密解密不成功的解决办法
  • ThinkPHP实现的rsa非对称加密类示例
  • thinkPHP中U方法加密传递参数功能示例

您可能感兴趣的文章:

  • ThinkPHP中U方法的使用浅析
  • 改写ThinkPHP的U方法使其路由下分页正常
  • thinkPHP
    js文件中U方法不被解析问题的解决方法
  • thinkphp中U方法按路由规则生成url的方法
  • PHP隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
  • thinkphp微信开发(消息加密解密)
  • thinkphp微信开之安全模式消息加密解密不成功的解决办法
  • ThinkPHP实现的rsa非对称加密类示例
  • thinkPHP中U方法加密传递参数功能示例

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website