我可能会重复我的问题,但这次我提供的确切方案与我的实际代码请耐心等待我... 我的主页网址是
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>
所以我发送出价和链接
作为qurystring现在当我点击链接时,页面内容会根据所选语言发生变化,但网址也会更改为
http://localhost/mediabox/home/box/?bid=12&ln=2
我想要的是页面内容会更改但不会更改网址,或者我可以在加载页面后使网址看起来像这样
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);
}
有什么想法吗?
提前致谢
答案 0 :(得分:0)
您可以为控制器功能定义多个参数。但是多个参数必须具有默认值。
public function box($id, $language = 'en') {
echo "id: " . $id . " - lang: " . $language;
}
当您的链接http://localhost/mediabox/home/box/12/language_name
时这将返回,
id: 12 - lang: language_name
答案 1 :(得分:0)
您可以选择如何从URI中提取数据。这里只有两个。
box/
之后的每个细分受众群将作为box
方法的参数传递为levye suggested。方法1应该没问题。一旦进入remapping并重写URL,方法2有时会成为你的救赎。
我建议您阅读CI手册中的this page,以帮助您更好地了解如何将数据传递给控制器。
这可能有助于你理解魔法。
将die(var_dump($this->uri->segment_array()));
作为控制器中的第一行,然后从浏览器访问http://localhost/mediabox/home/box/this_is_argument_1/this_is_2/4/500/six/。 $this->uri->segment(3);
将保留字符串this_is_argument_1
,$this->uri->segment(5) == 4;
等。请记住,段1是控制器的名称,2是被调用方法的名称。
另请注意,URL类由codeigniter自动初始化,因此无需手动加载(也不需要explode()
或类似的东西)。