0

チュートリアルによると、application/controllers/pages.php を介して静的ページのすべてのリクエストを処理することが可能です。

class Pages extends CI_Controller {

    public function view($page = 'home')
    {
        if( ! file_exists('application/views/pages/'.$page.'.php'))
        {
            // Whoops, we don't have a page for that!
            show_404();
        }

        $data['title'] = ucfirst($page); // Capitalize the first letter

        $this->load->view('templates/header', $data);
        $this->load->view('templates/nav', $data);
        $this->load->view('pages/'.$page, $data);
        $this->load->view('templates/aside_right', $data);
        $this->load->view('templates/bottom', $data);
    }
}

これは「ホーム」ページで機能しますが、たとえば、views/pages/about を呼び出すことができないようです。

aboutページ用に別のコントローラーを作成しようとしました。それは機能しますが、やや間違っているように感じます。

アプリケーション/コントローラー/about.php

class About extends CI_Controller {

    public function index()
    {
        $this->load->view('templates/header');
        $this->load->view('templates/nav');
        $this->load->view('pages/about');
        $this->load->view('templates/aside_right');
        $this->load->view('templates/bottom');
    }
} 

htaccess ファイルまたは routes ファイルにも問題があります。上記の About-controller では、domain.com/index.php/about と入力することによってのみページにアクセスできます。domain.com/about などでお願いします。

これは私のroutes.phpのようなものです:

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

私のhtaccess:

RewriteEngine on
RewriteBase /
# Hide the application and system directories by redirecting the request to index.php
RewriteRule ^(application|system|\.svn) index.php/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [QSA,L]
4

1 に答える 1

2

既に述べたように、ページに別のコントローラーを使用する必要はありませんabout。あなたの問題はあなたのものroutes.phpです。

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

このように、「about」という名前のコントローラーを検索しますが、コントローラーは見つかりません。最初の行を消去した場合:

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

それはうまくいくはずです。この場合、任意のページをリクエストすると、たとえばaboutが呼び出されますpages/view/about。ここpagesで、 はコントローラー、viewは関数、aboutは関数に渡される引数です (デフォルトの を置き換えます$page = home)。

また、あなたのロジックに別のエラーを発見しました。あなたが書いた

これは「ホーム」ページで機能しますが、たとえば、views/pages/about を呼び出すことができないようです。

電話する必要はありませんview/pages/about。電話する必要がありますpages/view/about。構文は常に同じController/Function/Variable1/Variable2/Variable3です。したがって、にルールがある場合にのみ、aboutページを表示できるはずです。http://yourdomain.com/index.php/pages/view/abouthttp://yourdomain.com/about$route['(:any)'] = pages/view/$1routes.php

于 2012-10-14T17:01:50.220 に答える