0

私はphpが苦手で、codeigniterは私に最大のものを与えてくれます。私のサイトは検索エンジンで、検索を行った後、私のサイトの URL はmysite.com/?search=eminem&type=mp3のようになり、気に入りません。私はそれをしたいのですが、検索 eminem と入力してこの URL を取得すると: mysite.com/eminem/mp3 CI のコードは次のとおりです。

<?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('pages/'.$page, $data);
    $this->load->view('templates/footer', $data);
    }
}

qwery 文字列をパスに変換するためにここに追加する必要がある他のコードは何ですか?

ここにroutes.phpがあります

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

$route['404_override'] = '';

ここにhome.phpからの私の検索フォームがあります

<form id="searchwrapper" name="searchform">                                          <input type="text" class="searchbox" id="txtSearch" name="search" />                                        <input type="image" src="../images/empty.png" class="searchbox_submit"/>                                   

<p id="circ">
   <input  type="radio" id="mp3" name="type" checked value="mp3"/>
   <label class="circ-btn normal" for="mp3">Mp3</label></p>
<p id="circ">                   
   <input type="radio" id="album" name="type" <?php echo $radio2;?> value="album"/>
   <label class="circ-btn normal" for="album">Album</label></p>
</form>

ここに.htaccessがあります

<IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /ci/
        #Checks to see if the user is attempting to access a valid file,
        #such as an image or css document, if this isn't true it sends the
        #request to index.php
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>
4

1 に答える 1

1

mod_rewrite がすでに機能していると仮定すると、routes.php でこれを設定できます。

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

私は区別pages/searchpages/viewているので、混乱が少なくなります。ところで、これは、routes.php ファイルの最後のルートでなければなりません。そのため、優先度が低く、以下のサンプルのような特定のルートと競合することはありません。それがルートファイルの上にある場合、アクセスusers/listsearch=users&type=list.

$route['users/list'] = "users/list";
$route['pages/list'] = "pages/list";

次に、ページコントローラーで。

public function search($search = '', $type = '')
{
   // $search now contains $1 and $type contains $2
   // instead of $_GET['search'] and $_GET['type']
}

それが役立つことを願っています。

于 2012-10-06T04:45:53.107 に答える