web-dev-qa-db-ja.com

Magento:.phtmlファイルのカテゴリページまたは製品ページにいるかどうかを確認する方法

ゲストがカテゴリリストページまたは製品ページにいる場合、.phtmlファイルにifステートメントをプログラムしようとしています。

たとえば、次のコード:

<?= Mage::app()->getFrontController()->getRequest()->getRouteName(); ?>

CMSページ以外のページにいるときは常に「カタログ」を返します。

同様の方法を使用して、ユーザーがルートカテゴリ、サブカテゴリ、または個々の製品ページを見ているかどうかを知る方法はありますか?

どんな助けでも大歓迎です!

21
Jeff

フロントエンドのカタログページを扱ってから久しぶりですが、試してみてください。

Magentoの現在のバージョンは、特定のページに特定のグローバル変数(PHPグローバルではなく、Magentoシステムにグローバルなもの)を登録します)。

次を呼び出す

$category = Mage::registry('current_category');         
$product  = Mage::registry('current_product');
$product  = Mage::registry('product');

オブジェクトが設定されていない場合(つまり、カテゴリまたは製品のないページを表示している場合)はnullを返すか、カテゴリおよび製品オブジェクトを返します。

商品オブジェクトが返されると、商品ページが表示されます。

商品オブジェクトが返されず、カテゴリオブジェクトが返された場合は、カテゴリページが表示されています。カテゴリオブジェクトには、親IDを取得するメソッドがあります

$category->getParentId()

親IDのないカテゴリは最上位のカテゴリである必要があり、親IDのあるカテゴリはサブカテゴリである必要があります。

これにより、現在のリクエストの場所を特定するために必要なものが得られます。

UPDATE:ほぼ10年後にこれに戻る-私はおそらくコンテンツに依存しないではない私がいるページを決定するためにレジストリだけの。代わりに、私は thefullaction name を組み合わせて、上記のオブジェクトを探すことと組み合わせます。

42
Alan Storm

アランの答えは機能しますが、より直接的なオプションがあり、実際にはコードスニペットで正しい軌道に乗っていました...モジュール名ではなくコントローラー名を調べるだけです:

<?php Mage::app()->getFrontController()->getRequest()->getControllerName(); ?>

これは、コントローラーがそれぞれCategoryController.phpおよびProductController.phpであることに基づいて、categoryまたはproductを返します。

これは、それらのコントローラを独自のもので書き換えるサードパーティのモジュールがインストールされていないことを前提としています。

35
Jonathan Day

私はcurrent_categoryレジストリが存在するかどうかをチェックするのはあまり好きではありません。基本的に、どのコントローラーでもこれを実行でき、必ずしもそれがカテゴリであることを意味するわけではありません。私のやり方はもう少し堅牢です:

$fullActionName = Mage::app()->getFrontController()->getAction()->getFullActionName();
if ($fullActionName == 'catalog_category_view') { 
    ...  //Category
}
elseif ($fullActionName == 'catalog_product_view') {
    ...  //Product
}
5
Mayers

私はあなたがそれを間違った方法で行おうとしていると思います。あなたが達成したいことを正確に説明していないため、私は間違っているかもしれませんが、レイアウトxmlを使用して、パラメーター(product-page = "1"など)を使用して同様に製品ページにブロックを含めますカテゴリページ(category-page = "1")。

次に、ブロック内のこれらのパラメーターを調べることにより、製品ページかカテゴリーページかを確認できます。

if($this->getProductPage()) {
  //this is a product page, do some stuff
}
elseif($this->getCategoryPage()) {
  //this is a category page, do some stuff
}

メインページとサブカテゴリページを区別するのは難しいかもしれません。最初に頭に浮かぶのは、要求変数の分析ですが、これは確かに最善の方法ではありません。

3
silvo