Я думаю, что проще всего отсортировать ключ 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
Это Прошло некоторое время с тех пор, как я имел дело со страницами каталога внешнего интерфейса, но попробуйте.
Текущие версии Magento регистрируют определенные глобальные переменные (не глобальные переменные PHP, а вещи, глобальные для системы Magento) на определенных страницах.
Вызов следующего
$category = Mage::registry('current_category');
$product = Mage::registry('current_product');
$product = Mage::registry('product');
либо вернет null, если объекты не были установлены (т.е. вы находитесь на странице без категории или продукта), либо вернет объекты категории и продукта.
Если возвращается объект продукта, вы находитесь на странице продукта.
Если объект продукта не возвращается, но возвращается объект категории, вы находитесь на странице категории. У объектов категории есть метод получения родительского идентификатора
$category->getParentId()
Категория без родительского идентификатора должна быть категорией верхнего уровня, категории с родительскими идентификаторами должны быть подкатегориями.
Это должно дать вам то, что вам нужно, чтобы определить, где находится текущий запрос.
ОБНОВЛЕНИЕ: Возвращаясь к этому почти десятью годами позже - я бы, вероятно, не полагался только на содержимое реестра, чтобы определить страницу, на которой я нахожусь. Вместо этого я бы использовал полное имя действия в сочетании с поиском вышеуказанных объектов.
Боюсь, вы пытаетесь сделать это неправильно. Я могу ошибаться, потому что вы не объяснили, чего именно вы хотите достичь, но я бы использовал макет 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
}
Различить между основными страницами и страницами подкатегорий может быть сложнее, первое, что приходит на ум, это анализ переменных запроса, но это, конечно, не лучший подход.