web-dev-qa-db-ja.com

Codeigniter設定ホームページ(デフォルトコントローラ)

私の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";
8
user1621727

問題は、www.mywebsite.comにアクセスしてもURIセグメントがないことです。デフォルト値を次のように設定してみてください。

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

application/config/routes.php

$route['default_controller'] = 'namecontroller';
9
Serip88

あなたのコード

// 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)

は最初のURLセグメントを探しています。www.yousite.come/ blogなどのサイトを参照すると、検索は機能しますが、www.yoursite.comを実行すると、最初のURIセグメントが見つからないため、falseが返されるため、404ページを表示します。

ソリューション:2番目のパラメータを関数に追加するだけで

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

最初のURLセグメントが欠落している場合、falseを返さず、デフォルトのvlaue 'blog'を返します

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

0
Dexture