2012-03-31 7 views
2

CIのドキュメントに含まれているよく知られた「ニュース」のチュートリアルを完了しました。ときどきダブル 'news /'セグメントが '/ codeig/news/news/entry'のようなリンク文字列に現れます。私は別の一般的なチュートリアルの後に 'index.php'セグメントを取り除いたことを言及する必要があります。私のコードで何が間違っていますか?CodeigniterのURL、2つのセグメント:news/news/

これは私のルーティングです:

$route['news/create'] = 'news/create'; 
$route['news/update/(:any)'] = 'news/update/$1'; 
$route['news/delete/(:any)'] = 'news/delete/$1'; 
$route['news/(:any)'] = 'news/view/$1'; 
$route['news'] = 'news'; 
$route['welcome'] = 'welcome'; 

$route['auth/(:any)'] = 'auth/$1'; 
$route['auth'] = 'auth'; 
$route['activate/:num/:any'] = "/auth/activate/$1/$2"; 
$route['reset_password/:num/:any'] = "/auth/reset_password/$1/$2"; 

$route['(:any)'] = 'pages/view/$1'; 
$route['default_controller'] = 'news'; 

ビュー/ニュース/ index.phpファイル:

<?php foreach ($news as $news_item): ?> 

<h2><?php echo $news_item['title'] ?></h2> 
<div id="main"> 
    <?php echo $news_item['text'] ?> 
</div> 
<p><a href="news/<?php echo $news_item['slug'] ?>">View article</a></p> 

<?php endforeach ?> 

ビュー方式(ニュース・コントローラ)HTMLで

public function view($slug) 
{ 
$data['news_item'] = $this->news_model->get_news($slug); 

if (empty($data['news_item'])) 
{ 
    show_404(); 
} 

$data['title'] = $data['news_item']['title']; 

$this->load->view('templates/header', $data); 
$this->load->view('news/view', $data); 
$this->load->view('templates/footer'); 
} 
+0

我々は、元のCIのドキュメントから取り出したコードで、あなたも私たちにどんな... – Mudshark

+0

を示していないので、あなたのコードで間違っているものを言うことができません。 – kurdt

+0

二重セグメント、すなわち 'news/news /'を出力するURLをどのように構築していますか?あなたはそのコードを投稿できますか? –

答えて

8

、場合現在のURLは次のようなものです:

http://example.com/news/

そして、あなたがこのようなリンクがあります。リンクをクリックした後

<a href="news/article-slug">Link</a> 

を、あなたのURLがになってしまうでしょう。

http://example.com/news/news/article-slug

の場合あなたはそれをもう一度クリックした、あなたが持っていると思います:

http://example.com/news/news/article-slug/news/article-slug

:これはまさに、右ではなく、パスの相対性理論は、末尾にスラッシュ/は、現在のURLにありますかどうかに依存しませんおよび/またはあなたのリンク。

href="news/something"は、であり、現在のページに対する相対のURLです。あなたは絶対または根ざしいずれかのURLを使用する:

<a href="http://example.com/mysite/news/article-slug">Link</a> 
<a href="/news/article-slug">Link</a> 

は絶対URLを容易にするために、次のCodeIgniterの機能のいずれかを使用します。

  • anchor()は(あなたのための全体のリンクを作る)
  • site_url()(あなたの絶対ベースURL)は上記と同じ()
  • base_url()を返し
<?php echo anchor('news/'.$news_item['slug'], 'Link Text'); ?> 
<a href="<?php echo base_url('news/'.$news_item['slug']); ?>">Link Text</a> 

このように、これはルーティングとは関係なく、HTML内の相対リンクにはまったく問題があります。

+0

をうまく働いた私をたくさん助けました!ありがとう – kurdt

+0

素晴らしい答えbtw @Madmartiganあなたは今twitter landで新しいフォロワーを持っています:) – Philip

2

あまり詳細な説明:ファイル 'アプリケーション/ビュー/ニュース/ index.phpの'

(/ URLで原因/ニュース/ニュース)前:

<p><a href="news/<?php echo $news_item['slug'] ?>">View article</a></p> 

(固定):

<p><a href="<?php echo $news_item['slug'] ?>">View article</a></p> 

news/ので、HTML内にある必要はありません$news_item['slug']に含まれています。

関連する問題