Magento: внешнее получение относительных URL-адресов для категорий

Я создаю веб-сайт и установил Magento в подкаталог /shop/. Я хотел бы интегрировать основные категории в меню моего сайта, отличного от Magento, чтобы вы могли переходить непосредственно в категорию. Для этого мне нужны названия категорий и URL-адреса.

Категории Magento:

  • Templates
    • Color
    • Тема
    • Общий
  • Другие продукты

Сначала мне нужно было получить список категорий ниже верхнего уровня Templates, поэтому я написал следующий код. Это моя первая попытка интеграции с Magento, так что будьте осторожны :-):

<?php
require_once dirname(__FILE__).'/shop/app/Mage.php';
umask(0);
Mage::app('default');

$helper     = Mage::helper('catalog/category');
$collection = $helper->getStoreCategories();
foreach ($collection as $catalogArray) {
    if ($catalogArray->getName() == "Templates") {
        foreach (explode(",", $catalogArray->getChildren()) as $category) {
            $_category = Mage::getModel('catalog/category')->load($category);
            if($_category->getIsActive()) {
                $caturl = $_category->getUrl();
                $catname = $_category->getName();
            }
            echo "<pre>";
            var_dump($caturl);
            echo "</pre>";

            echo "<pre>";
            var_dump($catname);
            echo "</pre>";
        }
    }
}
?>

Это правильно получает имена и категории, но возвращаемые URL-адреса являются абсолютными полными URL-адресами, такими как «http://example.com/shop/templates/theme.html".

Во-первых, как мне получить относительный URL-адрес из Magento?

Во-вторых, сгенерированный URL-адрес кажется правильным только в том случае, если я установил для параметра web/unsecure/base_url значение http://example.com/shop/. Если я вместо этого установлю {{base_url}} (что мы предпочитаем во время разработки, поскольку мы используем рабочие копии svn на основе виртуального хостинга), часть /shop/ отсутствует, то есть: "http://example.com/templates/theme.html".

Есть идеи, почему?


person Martijn Heemels    schedule 01.07.2009    source источник


Ответы (1)


Я думаю, что вы можете выполнить все свои требования, играя с настройками в системе> конфигурация> Интернет.

Первое, что я бы попробовал, это установить базовый URL-адрес (безопасный и небезопасный, если необходимо) в / (косая черта), а затем перейти к системе> управление кешем> перезаписать URL-адрес каталога.

Если это не сработает, поэкспериментируйте с настройками, уверен, у вас все получится. Имейте в виду, однако, это заставит magento помещать относительные URL-адреса в базовые каналы Google и т. д. = плохо! Так что не делайте этого на производстве.

Моя рабочая копия находится на работе, отсюда она недоступна, поэтому я не могу попробовать за вас.

Кроме того, для вашего скрипта выше вы можете попробовать:

$url = "/shop/" . $_category->getUrlKey() . '.html';

(вам может не понадобиться бит html в конце, зависит от вашей конфигурации)

person benlumley    schedule 11.07.2009
comment
Мне удалось заставить его работать, поместив /shop/ в base_url, но, как вы упомянули, Magento не очень любит относительные URL-адреса. Например, для интеграции с поставщиком платежных услуг Ogone также требуется абсолютный URL-адрес. Таким образом, Magento заставил меня отказаться от моей относительной цели URL, что является позором в средах разработки. Спасибо, что указали мне правильное направление. - person Martijn Heemels; 25.08.2009