Magento: как узнать, находитесь ли вы на странице категории или странице продукта в файлах .phtml,

Я пытаюсь запрограммировать в свои .phtml-файлы инструкцию if, если гость находится на странице списка категорий или на странице продукта.

Например, этот код:

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

Возвращает «каталог» всякий раз, когда вы находитесь на странице, отличной от страницы CMS.

Есть ли способ, которым я могу использовать аналогичный метод, чтобы узнать, смотрит ли пользователь на категорию корней, подкатегорию или отдельную страницу продукта?

Любая помощь будет принята с благодарностью!

Прошло некоторое время с тех пор, как я рассмотрел страницы каталога frontend, но попробуйте.

Текущие версии Magento регистрируют на определенных страницах определенные глобальные переменные (а не глобальные глобальные, но глобальные по отношению к системе Magento).

Вызов следующего

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

либо вернет null, если объекты не были установлены (т.е. вы находитесь на странице без категории или продукта), или возвращаете категорию и объекты продукта.

Если объект продукта возвращается, вы попадаете на страницу продукта.

Если объект продукта не возвращается, а объект категории, вы находитесь на странице категории. Объекты категории имеют способ получения родительского идентификатора

 $category->getParentId() 

Категорией без родительского идентификатора должна быть категория верхнего уровня, категории с родительскими идентификаторами должны быть подкатегориями.

Это должно дать вам то, что вам нужно, чтобы определить, где находится текущий запрос.

Хотя ответ Алана будет работать, есть более прямой вариант, и вы действительно на правильном пути со своим фрагментом кода … вам просто нужно проверить имя контроллера, а не имя модуля:

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

Это приведет к возврату category или product на основе их контроллеров, которые являются CategoryController.php и ProductController.php соответственно.

Это предполагает, что вы не установили сторонние модули, которые переписывают эти контроллеры своими собственными.

Боюсь, вы пытаетесь сделать это неправильно. Возможно, я ошибаюсь, потому что вы не объяснили, что именно вы хотите достичь, но я бы использовал макет 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 } 

Дифференциация между страницами главной и подкатегории может быть сложнее, первое, что приходит в голову, это анализ переменных запроса, но это, безусловно, не самый лучший подход.

Я не большой поклонник проверки, существует ли текущий каталог текущей версии, потому что в принципе любой контроллер может это сделать, и это не обязательно означает, что это категория. Мой способ сделать это немного более прочный:

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