0

http://mysite.com/store/store-nameこのようなURLをにリダイレクトする必要がありますhttp://mysite.com/stores/products/store-id。データベースからストアIDを取得する必要があることに注意してください。それで、routes.phpでdb操作を行うことは可能ですか?

また、ドキュメントでは、構文はとして与えられてい$route['store/:any']ます。ここで2番目のパラメータの値を取得する方法:any

4

4 に答える 4

4

ルートを介してデータベースクエリを実行するための良い方法も簡単な方法もありません。ただし、コントローラー関数の最初に検証を行うことができます。

私はあなたstore-nameが製品のためのある種のスラッグだと思いますか?基本的に、値が数値であるかどうかを検証でき、値がない場合はスラッグで検出してからリダイレクトできます。

config / routers.php

$route["store/(.*)"] = 'stores/products/$1';
/* () and $1 together passes the values */

controllers /stores.php

/* Class etc. */

function products($mix) {

    if (is_numeric($mix))
        $int_id = $mix;
    else {

        $row = $this->get_where('products', array('slug' => $mix))->row();

        $this->load->helper('url');
        redirect("stores/products/{$row->id}");

    }

    /* Do stuff with the $int_id */

}

これはあなたが持っていることを前提としています:

  • productsという名前のテーブル
  • 製品IDであるidという名前の列
  • あなたに基づいているslugという名前の列store-name
于 2012-05-28T07:27:44.047 に答える
1

私はパーティーに少し遅れるかもしれませんが、別の提案があるかもしれません。

ルートには次のものを使用します。

http://mysite.com/store/1/store-name

理由は...あなたの方法に基づいて、あなたが作成する場合

http://mysite.com/store/store-name

しかし、しばらくすると(間違いなくGoogleがあなたのページをインデックスに登録しました)、何らかの理由でストアの名前を「素晴らしいストア名」に変更する必要があると判断した場合は、当然、リンクを次のように変更します。

http://mysite.com/store/wonderful-store-name

これはあなたのSEOとすべてのインデックスリンクを殺します。

http://mysite.com/store/1/store-nameを使用する私のソリューションは、必要なものに変更できることを意味しますがstore-name、常に参照される1ため、ユーザーには引き続き関連ページが表示されます。

于 2012-05-28T14:31:38.023 に答える
1

CodeIgniterルートでは何でも可能です。それはすべてあなたがそれをコーディングする方法にあります。CIでのルーティングは非常に柔軟です。標準のCIワイルドカード(:any)(:num)以外に正規表現を使用できます。必要に応じて、パス変数にプレフィックスまたはサフィックスを追加することもできます。

$route['store/(:any)'] = "redircontroller/redirfunction/$1";
// for instance the namelookup method of the mystores controller
$route['stores/products/(:any)'] = "mystores/namelookup/$1";

定義したコントローラーメソッドに渡されるルート値の変数を定義することにより、2番目のパラメーター(および3番目など)を取得します。新しいURLの「products」もバリアントである場合は、代わりにワイルドカード式を開始する必要があります。URIクラス($ this-> uri-> segment(n))を使用してURLからパラメーターを引き出すこともできます。

ただし、routes.phpではデータベース操作を行いません。データベース操作は、ルーティング先のコントローラーで行います。私の推測では、クエリのURLで使用されているものを使用して、ストアIDを一致させる必要があります。いずれの場合も、routesファイルを使用しているパスは、ユーザーに表示されるパスです。リダイレクトを行うには、元のパスを受け入れてから、次のようにユーザーを新しいパスにリダイレクトする必要があります。

// in some controller that's attached to the original url
    public function redirfunct($var){
        $this->load->helper('url');
        redirect(base_url('stores/products/' . $var));
    }

これがお役に立てば幸いです。

于 2012-05-30T18:11:02.113 に答える
0

はい、それは簡単です。名前の代わりにIDを表示するだけでよく、storeName>クリックして詳細を表示する必要があります。

としてそれを作る

storeId>クリックして詳細を表示

パラメータをデータベースに渡すときは、mysqlのチェックを変更し、nameではなくidに変更します。これは、「select yourRequiredColumn from table_name whereid="。parameter」のようになります。

ありがとう

于 2012-05-28T07:07:08.763 に答える