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

Я думаю, что проще всего отсортировать ключ dict и сохранить отсортированную пару: значение в новом dict.

dict1 = {'renault': 3, 'ford':4, 'volvo': 1, 'toyota': 2} 
dict2 = {}                  # create an empty dict to store the sorted values
for key in sorted(dict1.keys()):
    if not key in dict2:    # Depending on the goal, this line may not be neccessary
        dict2[key] = dict1[key]

Чтобы сделать его более понятным:

dict1 = {'renault': 3, 'ford':4, 'volvo': 1, 'toyota': 2} 
dict2 = {}                  # create an empty dict to store the sorted     values
for key in sorted(dict1.keys()):
    if not key in dict2:    # Depending on the goal, this line may not be  neccessary
        value = dict1[key]
        dict2[key] = value
20
задан Jonathan Day 15 December 2010 в 23:34
поделиться

2 ответа

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

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

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

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

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

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

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

$category->getParentId()

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

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

ОБНОВЛЕНИЕ: Возвращаясь к этому почти десятью годами позже - я бы, вероятно, не полагался только на содержимое реестра, чтобы определить страницу, на которой я нахожусь. Вместо этого я бы использовал полное имя действия в сочетании с поиском вышеуказанных объектов.

41
ответ дан 29 November 2019 в 22:31
поделиться

Боюсь, вы пытаетесь сделать это неправильно. Я могу ошибаться, потому что вы не объяснили, чего именно вы хотите достичь, но я бы использовал макет 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
ответ дан 29 November 2019 в 22:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: