【问题标题】:Is it possible to show same page with different url?是否可以显示具有不同 url 的同一页面?
【发布时间】:2018-02-10 09:39:24
【问题描述】:

我想为不同的 URL 显示相同的内容。例如:

website.com/controllername/country/state1/dist1/
website.com/controllername/country/state2/dist2/

我希望这两个 URL 显示相同的内容。即使某些内容会根据 URL(如州和地区的名称)而有所不同。我不想为每个 URL 创建单独的内容/页面。我想知道是否可以在 Codeigniter 中这样做?是否可以在 Codeigniter 中显示上述 URL?

【问题讨论】:

  • 我猜你想要相同的 view 文件和两个不同的 routes
  • 是的,应该是这样,这就是这种 URL 模式的全部意义所在。这一切都取决于设置您的路由规则等。我相信您可以在文档中研究这一点。

标签: php codeigniter url


【解决方案1】:

是的,可以使用 Codeigniter 路由,

在您的application/config/routes.php 中粘贴以下代码并更改您使用的控制器和函数名称,

$route['([a-zA-Z0-9---_%])+/([a-zA-Z0-9---_%])+/([a-zA-Z0-9---_%])'] = 'your_controller_name/your_function_name/$1/$1/$1';

【讨论】:

  • 在此路由中,所有具有 2 个参数访问相同页面的页面。它不是很好的解决方案。
【解决方案2】:

与其他框架不同,CodeIgniter 没有全局模板系统。每个控制器控制它自己的输出,独立于系统,除非另有说明,否则视图是先进先出的。

例如,如果我们有一个全局标题:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd" >
<html>
    <head>
        <title><?=$title?></title>
        <!-- Javascript -->
        <?=$javascript ?>
        <!-- Stylesheets -->
        <?=$css ?>
    </head>
    <body>
        <div id="header">
            <!-- Logos, menus, etc... -->
        </div>
        <div id="content">

和一个全局页脚:

</div>
        <div id="footer">
            <!-- Copyright, sitemap, links, etc... -->
        </div>
    </body>
</html>

那么我们的控制器必须看起来像

class Welcome extends Controller {

    function index() {
        $data['title'] = 'My title';
        // Javascript, CSS, etc...

        $this->load->view('header', $data);

        $data = array();
        // Content view data
        $this->load->view('my_content_view', $data);

        $data = array();
        // Copyright, sitemap, links, etc...
        $this->load->view('footer', $data);
    }
}

【讨论】:

    【解决方案3】:

    是的,您可以在路由上设置具有不同 url 设置的同一页面。 有关更多信息,请参阅以下链接: https://www.codeigniter.com/userguide3/general/routing.html

    $route['controllername/country/state1/dist1/'] = 'catalog/product_lookup'; $route['controllername/country/state1/dist2/'] = 'catalog/product_lookup';

    【讨论】:

      【解决方案4】:

      改进 krishnaraj 的答案...

      你需要 website.com/controllername/method1/st/dist/ website.com/controllername/method2/st/dist/

      //我改变了一些变量以便更好地理解,“国家”将 //成为主要变化

      所以在你的控制器上,你只是

      public function method1($st1,$st2){ 
           $this->load->view('header');
      
           $this->load->model('data_processing');
           $data['data'] = $this->data_processing->any_model_function($st1,$st2);
      
           $this->load->view('page_you_want',$data);
           //here you choose the same view for both methods
      
           $this->load->view('footer');
      }
      
      public function method2($st1,$st2){ 
           $this->load->view('header');
      
           $this->load->model('data_processing');
           $data['data'] = $this->data_processing->any_model_function($st1,$st2);
      
           $this->load->view('page_you_want',$data); 
           //here you choose the same view
      
           $this->load->view('footer');
      }
      

      在Kavin Smk解释的路由配置的情况下,注意到只是一个错误,而不是

      'your_controller_name/your_function_name/$1/$1/$1';
      

      应该是

      'your_controller_name/your_function_name/$1/$2/$3';
      

      嗯,总是有很多方法可以做到这一点,选择你的...... 祝你好运!

      【讨论】:

        猜你喜欢
        • 2021-11-09
        • 2023-03-12
        • 2015-01-09
        • 1970-01-01
        • 1970-01-01
        • 2013-11-16
        • 2011-07-17
        • 1970-01-01
        • 2023-03-07
        相关资源
        最近更新 更多