0

製品のリストを表示し、category_listing というコントローラーによって管理される次の URL があります。

http://localhost:8888/shop/mens/trainers/

uri セグメント 4 を使用してこのページにページネーションを追加したので、URL は次のようになります。

http://localhost:8888/shop/mens/trainers/2

また、ユーザーが次の URL にアクセスして製品を表示できるようにするルートも必要です。

http://localhost:8888/shop/mens/trainers/a-trainer-product-here

これは、product_listing と呼ばれるコントローラーによって管理されます。

だから私はルートを作成しました:

$route['shop/(:any)/(:any)/[a-z]'] = 'product/product_listing/$1/$2/$3';

これにより、ページネーション インデックスを含む URL を無視しながら、すべての製品 URL を一致させることができるようになりました。残念ながら、それは機能していないようです。URL に商品が含まれるリンクにアクセスすると、ページ (product_listing コントローラーを使用する必要があります) はまだ category_listing コントローラーを呼び出そうとしています。

何か案は?おそらく、URL の製品名部分 (a-trainer-product-here) のハイフンが、一致の [az] 部分で問題を引き起こしているのではないかと考えていました。

4

2 に答える 2

2

使用している正規表現は、a から z までの文字にのみ一致し、1 回のみ一致し、「-」には一致しないため、次のようになります。

 $route['shop/(:any)/(:any)/[a-z]'] 

あなたが試すことができます:

 $route['shop/(:any)/(:any)/([a-z-]*)'] 

お役に立てれば。

于 2013-04-14T09:45:41.347 に答える
1

[a-z]単独で一致するのは 1 文字のみです。+おそらくfor one or more または*for zero or more のような修飾子を追加したいと思うでしょう。あなたのパターンはまた、最後のセグメントもキャプチャしたいことを示しています (あなたはあなた$3の交換にあります) 。-[a-z]

これらすべてを組み合わせると、次のように書きたいと思います。

$route['shop/(:any)/(:any)/([-a-z]*)'] = 'product/product_listing/$1/$2/$3';

これは 0 個以上の長さのスラッグにマッチし、 in でそれらをキャプチャし、 s も$3許可し-ます。(:any)これらのナメクジの作成方法に応じて、3 分の 1 を使用することも検討します。

于 2013-04-14T09:45:49.987 に答える