我是codeigniter的新手,我现在正在做一个项目.. 我有一个控制所有页面的家庭控制器,它工作正常。 该网站包含一个文章页面,其中显示所有文章,如果有人点击阅读更多,它将重定向到文章详细信息页面
问题是,如果我点击文章页面上的阅读更多链接(例如:http://example.com/articles_details/2/sample-slug),它会自动重定向到http://example.com/articles_details/2 ....有人可以帮我修复此问题。
下面是我的项目文件的详细信息
文件夹结构
website_folder/
–––– application/
---------- controllers/
---------------- admin/
---------------- home.php
---------- views/
---------------- templates/
--------------------- articles.php
--------------------- article_details.php
---------------- _main_layout.php
–––– assets/
–––– system/
---- .htaccess
–––– index.php
家庭控制器
class Home extends Frontend_Controller
{
function __construct()
{
parent::__construct();
}
public function index()
{
$slug = $this->uri->segment(1) ? $this->uri->segment(1) : 'home';
$this->data['page'] = $slug;
$method = '_'.$slug;
if(method_exists($this,$method))
{
$this->$method();
}
else
{
show_error('Could not load template '.$method);
}
$this->data['subview'] = $slug;
$this->load->view('components/page_head');
$this->load->view($layout,$this->data);
$this->load->view('components/page_tail');
$this->load->view('components/'.$script);
}
private function _home()
{
//fetch datas to be shown in homepage
}
private function _articles()
{
//fetch datas to be shown in article page
}
private function _article_details()
{
//fetch datas to be shown in article detail page
$aid = $this->uri->segment(2);
$query = $this->db->query("select * from articles where id = ".$aid);
$this->data['articledetails'] = $query->row();
count($this->data['v']) || show_404(uri_string());
$rslug = $this->uri->segment(3);
$sslug = $articledetails->slug;
if($rslug != $sslug)
{
redirect('article_details/'.$aid.'/'.$sslug,'location','301');
}
}
}
routes.php文件
$default_controller = "home";
$controller_exceptions = array('admin');
$route['default_controller'] = $default_controller;
$route["^((?!\b".implode('\b|\b', $controller_exceptions)."\b).*)$"] = $default_controller.'/index/$1';
$route['404_override'] = '';
Htaccess文件
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
</IfModule>
articles.php(观看文件)
<div id="articles">
<?php if($pagination) echo $pagination; ?>
<ul class="articles">
<?php
if(count($articles))
{
foreach($articles as $val)
{
?>
<li>
<h2><?php echo $val->heading; ?></h2>
<p><?php echo truncate(strip_tags($val->details),200); ?></p>
<a href="article_details/<?php echo $val->id."/".$val->slug; ?>" target="_blank">[ Read More ]</a>
</li>
<?php
}
}
else
{
echo '<li><strong>No records found..</strong></li>';
}
?>
</ul>
</div>
articles_details.php(观看文件)
var_dump($articledetails);
答案 0 :(得分:0)
您应该有一个名为article_details
的控制器或在您的主控制器中,将函数定义为article_details
和index
(如存在)。但是不要通过函数控制所有东西,而你可以拥有很多东西。
所以正确的方法是你应该有一个index
函数,然后获取行然后将它传递给视图来显示它。
:
foreach($articles as $i){
echo '<a href="'.site_url('{your_controller}/article_details/').$i->id.'/'.$val->slug.'" target="_blank">[ Read More ]</a>';
}
在控制器中,定义一个名为article_details
的函数。它将是公共的,您可以处理文章ID并获取详细信息并将其传递给视图。
答案 1 :(得分:0)
作为CI 2.2.0,以下划线_
“..不会通过网址请求提供..”
。 have a look here, and find PRIVATE FUNCTIONS。
这里的逻辑问题是您为什么要将VISIBLE
控制器/方法重定向到HIDDEN
?你将无法访问任何东西,因为你想要隐藏在第一位。
删除下划线并将属性更改为public。如果你想正确访问int。
或者您可能有拼写错误或忘记在您所关注的教程中输入内容。