loadByRequestPath () переопределяет параметр с текущим путем URL - PullRequest
1 голос
/ 27 декабря 2011

Я пытаюсь загрузить правило перезаписи на основе URL-адреса продукта.

Я использую метод loadByRequestPath () в Mage_Core_Model_Url_Rewrite для этого.Однако, независимо от того, что я предоставляю этим методом, я получаю следующий результат (Проверьте комментарий в коде):

public function loadByRequestPath($path)
{ 
    Zend_Debug::dump($path); // returns the path to my module
    $this->setId(null);
    $this->_getResource()->loadByRequestPath($this, $path);
    $this->_afterLoad();
    $this->setOrigData();
    $this->_hasDataChanges = false;
    return $this;
}

Вот мой код модуля:

$productRewrite = Mage::getModel('core/url_rewrite') ->loadByRequestPath($product->getUrlPath());

Как ни странно, я получаю этоback:

Array ( [0] => rewrites/getProductRewrites
        [1] => rewrites/getProductRewrites/ )
Array ( [0] => 01003-product-name )

Так что loadByRequestPath () вызывается дважды по любой причине.$ productRewrite по-прежнему возвращает пустой объект.

Я проверил, что $ product-> getUrlPath () возвращает правильный путь.(Как видно из второго массива)

Я нахожусь на Magento 1.6.1.

1 Ответ

4 голосов
/ 27 декабря 2011

Ваш вопрос все еще немного неясен, поэтому этот ответ может не решить конкретную проблему, с которой вы столкнулись.

Основная команда Magento не проделала большую работу по распространению такого рода вещей на протяжении многих лет, но loadByRequestPath является одним из тех методов, который лучше всего рассматривать как «приватный API». Не в смысле ООП, а в том, что «это метод, используемый для реализации основных функций системы, и, вероятно, он не будет работать так, как вы думаете, он должен работать, поэтому используйте на свой страх и риск».

PHP-код, который вы пытаетесь использовать

$productRewrite = Mage::getModel('core/url_rewrite') ->loadByRequestPath($product->getUrlPath());

не будет работать с установкой Magento по умолчанию, потому что для объекта перезаписи не установлен идентификатор магазина. Попытка что-то вроде этого должно работать. (при условии примера данных с установленным объектом магазина с идентификатором «1» и тем, что рассматриваемый продукт существует в этом магазине)

$productRewrite = Mage::getModel('core/url_rewrite');
$productRewrite->setStoreId(1);
$productRewrite->loadByRequestPath($product->getUrlPath());

Метод loadByRequestPath предполагает, что перезапись уже имеет установленный идентификатор магазина, поскольку он является частью более крупного процесса диспетчеризации Magento . (самостоятельная ссылка на статью, описывающую роль переписывания в системе маршрутизации Magento)

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

Zend_Debug::dump($path);

возвращает

массив, содержащий путь к моему модулю

Хотя я уверен, что вы знаете, что означает фраза "путь к моему модулю", это бессмысленный термин в большей вселенной magento. Более конкретное понимание буквальной ценности поможет людям понять, что вы имеете в виду.

Кроме того, вы также говорите

Я убедился, что $ product-> getUrlPath () возвращает правильный путь.

но вам не ясно значение "правильный путь".

Я предполагаю, что путь, который вы видите в Zend_Debug::dump, - это вызов, который проходит как часть стандартной отправки, а не ваш более поздний вызов с использованием $product->getUrlPath(). Однако из-за отсутствия ясности в вашем вопросе это трудно сказать.

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

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