【问题标题】:Change url after loading a view in codeigniter [duplicate]在codeigniter中加载视图后更改url [重复]
【发布时间】:2012-03-22 10:28:33
【问题描述】:

可能重复:
Change url in php after reloading a page

我可能会重复我的问题,但这次我用我的实际代码提供了确切的场景请耐心等待我...... 我的主页网址是

http://localhost/mediabox/home/box/12

在我的主页上,当我点击任何一个链接时,我有两个语言链接,页面会重新加载该特定语言的内容。

链接位于视图(模板/索引)内,如下所示

<a href="<?php echo base_url(); ?>home/box/?bid=<?php echo $template_data['box_id']?>&ln=<?php echo $lang['language_id']?>"></a>

所以我用链接发送投标和 ln 作为 qurystring

现在,当我点击链接时,页面内容会根据选择的语言而变化,但 url 也会更改为

http://localhost/mediabox/home/box/?bid=12&ln=2 

我想要的是页面的内容会改变,但 url 不会改变,或者我可以在加载页面后让 url 看起来像这样

http://localhost/mediabox/home/box/12/language_name

我的控制器中加载主页并在单击语言链接时更改内容的方法如下

    public function box() {
        $url = $this->pageURL();
        $id_from_url = explode('/', $url);

        if (isset($_GET['bid'])) {
            $id = $this->input->get('bid');
        }
        else{
            $id = $id_from_url[6];
        }
        $query = $this->db->get_where('mc_boxes', array('idmc_boxes' => $id));
        $row = $query->row();
            if (isset($_GET['bid'])) {
                $box_id = $this->input->get('bid');
            } 
            else {
                $box_id = $row->idmc_boxes;
            }
            $customer_id = $row->customers_idcustomers;
            if (isset($_GET['ln'])) {
                $language_id = $this->input->get('ln');
            }
            else {
                $language_id = $row->languages_idlanguages;
            }
            $template_id = $this->Home_model->getTemplateID($box_id);
            $data['template_data'] = $this->Home_model->getTemplateData($template_id);
            $data['variables_data'] = $this->Home_model->getVariables($customer_id, $language_id);
            $data['titles_data'] = $this->Home_model->getTitles($box_id,$language_id);
            $data['categories'] = $this->Home_model->getCategories($customer_id, $language_id);
            $data['languages'] = $this->Home_model->getLanguages($box_id);
            $this->load->view('template/index', $data);

    }

有什么想法吗?

提前致谢

【问题讨论】:

  • 嗨 Faryal - 编辑您的旧问题不是更好吗? :)
  • 为什么要通过GET?您可以通过执行 然后将其读入您的控制器,例如;公共函数框($box_id, $ln) {...}
  • @ Rooneyl 但是当我第一次加载我的主页时我没有那个 ln 变量我是否也需要更改我的路线?
  • @FaryalKhan,只需在控制器中给它一个默认值。例如。公共函数框($box_id, $ln=1) {...}
  • @Rooneyl 我可以从控制器视图中获取变量吗?详情请看我的最新问题

标签: php codeigniter query-string


【解决方案1】:

您可以为控制器函数定义多个参数。但是多个参数必须有默认值。

public function box($id, $language = 'en') {
    echo "id: " . $id . " - lang: " . $language;
}

当你的链接http://localhost/mediabox/home/box/12/language_name

这将返回,

id: 12 - lang: language_name

【讨论】:

    【解决方案2】:

    对于如何从 URI 中提取数据,您有几个选择。这里只有两个。

    1. URI 中box/ 之后的每个段都将作为box 方法的参数作为levye suggested 传递。
    2. 使用URL class 获取您需要的信息。

    你应该对方法 1 没问题。一旦你进入 remapping 并重写 URL,那么方法 2 有时会是你的救星。

    我建议阅读 CI 手册中的 this page,以帮助您更好地了解如何将数据传递给控制器​​。

    这可能会帮助您了解其中的魔力。

    die(var_dump($this-&gt;uri-&gt;segment_array())); 作为控制器的第一行,然后从浏览器访问http://localhost/mediabox/home/box/this_is_argument_1/this_is_2/4/500/six/$this-&gt;uri-&gt;segment(3); 将包含字符串 this_is_argument_1$this-&gt;uri-&gt;segment(5) == 4; 等。请记住,段 1 是控制器的名称,而 2 是被调用方法的名称。

    另请注意,URL 类由 codeigniter 自动初始化,因此无需手动加载(也不需要 explode() 或类似的东西)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-29
      相关资源
      最近更新 更多