web-dev-qa-db-ja.com

現在のページのルートを見つける方法は?

現在のページのルートを決定するコントローラーで使用できるコード行はありますか?

たとえば、SEO url https://example.com/desktopsのページのルートを検索したいと思います(これにより、ルートproduct/categoryが返されます)。

同様に、https://example.com/index.php?route=product/product&path=18&product_id=47などのURLはルートをproduct/productとして返す必要があります。

7
user1448031

正直なところ、正解は_$this->request->get['route'];_です。

現在のルートをキャッチするために、index()関数の_$this->request->get['route'];_ファイルで_catalog/controller/common/header.php_を使用できます。 _Header.php_は、実質的にすべてのフロントエンド出力の一部です(私が理解しているように、現時点では、_http://example.com/desktops_でどのコントローラーが使用されているかわからないため、どのような場合でもコードを実行できる適切な場所が必要です)。

SEOモジュールは、リクエストオブジェクトのこの部分の設定を解除しません。また、OpenCartコード生成の途中で、_$_GET_配列と_$this->request->get_配列は同じものではないことに注意してください。 SEOモジュールが動作しているときは、$ _ GETスーパーグローバルphp配列で現在のルート(「パス/コントローラー/アクション」形式)をキャッチしませんが、準備されている_$this->request->get_配列を使用して任意のコントローラーでキャッチできますOpenCartエンジンによるあなたのために。

12
Sergey Ronin

これは、url_aliasテーブルに特定のキーワードを照会して、標準セットアップに付属する4つのID(product_idcategory_idinformation_id、およびmanufacturer_id)のいずれかと、=で区切られたID値を取得することによって行われます。

デスクトップの例では、category_id=20のようになります。そこから、ルートを決める必要があります

OpenCartがこれを行う正確な方法は、ファイル/catalog/controller/common/seo_url.phpにあります。

0
Jay Gilford

編集:

コントローラには$this->request->get['route']があります。

seo_url.php:

if (isset($this->request->get['product_id'])) {
    $this->request->get['route'] = 'product/product';
} elseif (isset($this->request->get['path'])) {
    $this->request->get['route'] = 'product/category';
} elseif (isset($this->request->get['manufacturer_id'])) {
    $this->request->get['route'] = 'product/manufacturer/info';
} elseif (isset($this->request->get['information_id'])) {
    $this->request->get['route'] = 'information/information';
}
0
Nikita U.