8

私は自分の codeigniter アプリケーションにページ テンプレートを実装しようとしています。テンプレートは正常に動作しています。www.mywebsite.com/blog と書くと、ホームページ テンプレートで開かれるか、 www.mywebsite.com/about というページがあると仮定すると、ページ テンプレートでも開かれます。しかし、www.mywebsite.com から自分の Web サイトにアクセスしようとすると、404 エラー ページが表示されます。ブログ ページをホームページとして割り当てるにはどうすればよいですか?

ページコントローラー:

class Page extends Frontend_Controller {

public function __construct(){
    parent::__construct();
    $this->load->model('page_m');
}

public function index() {

// Fetch the page template
$this->data['page'] = $this->page_m->get_by(array('slug' => (string) $this->uri->segment(1)), TRUE);
count($this->data['page']) || show_404(current_url());

add_meta_title($this->data['page']->title);
add_meta_keyword($this->data['page']->keywords);
add_meta_description($this->data['page']->description);

// Fetch the page data
$method = '_' . $this->data['page']->template;
if (method_exists($this, $method)) {
        $this->$method();
}
else {
log_message('error', 'Could not load template ' . $method .' in file ' . __FILE__ . ' at line ' . __LINE__);
}

// Load the view
$this->data['subview'] = $this->data['page']->template;
$this->load->view('_main_layout', $this->data);
}

private function _page(){ // methods }
private function _homepage(){ // methods }
}

私のルートでは、デフォルトのコントローラーをページコントローラーに設定しました

$route['default_controller'] = "page";
4

3 に答える 3

0

あなたのコード

// Fetch the page template
$this->data['page'] = $this->page_m->get_by(array('slug' => (string) $this->uri->segment(1)), TRUE);
count($this->data['page']) || show_404(current_url());

URI セグメント コード

$this->uri->segment(1)

www.yousite.come/blog のようにサイトを参照すると、最初の url セグメントが検索されますが、検索を行うと www.yoursite.com の最初の uri セグメントが見つからないため、 false が返されるため、404 ページが表示されます。

解決策: 次のように関数に2番目のパラメーターを追加するだけです

$this->uri->segment(1,'blog');

最初の URL セグメントが欠落している場合、false を返さず、デフォルトの値「blog」を返すようになりました

これに関する詳細については、codeingitor のドキュメントを参照してください。

于 2013-11-13T09:46:30.927 に答える