Экспорт продукта Magento с полным каноническим URL

#php #magento #export #command-line-interface #canonical-link

#php #magento #экспорт #интерфейс командной строки #canonical-link

Вопрос:

Есть ли способ получить список продуктов с их текущим каноническим URL в командной строке?

 class Mage_Shell_UrlTest extends Mage_Shell_Abstract
{

public function run()
{
    $productCollection = Mage::getResourceModel('catalog/product_collection')
            ->addStoreFilter()
            ->addUrlRewrite()
            ->addAttributeToSelect('*')
            ->setPageSize(10) // just for testing
            ->addFieldToFilter('visibility',Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH)
            ->addAttributeToFilter('status', array(
                'eq' => Mage_Catalog_Model_Product_Status::STATUS_ENABLED
            ));

    Mage::getSingleton('cataloginventory/stock')
            ->addInStockFilterToCollection($productCollection);

    foreach ($productCollection as $product) {

        $url = $product->getUrlModel()->getUrl($product, array('_ignore_category' => true));

        echo PHP_EOL . $url . PHP_EOL; // debug output
    }
}
}

$shell = new Mage_Shell_UrlTest();
$shell->run();
  

Я запускаю его с помощью php -f magento/shell/urlTest.php и это дает мне что-то вроде этого:

http://www.domain.com/urlTest.php/catalog/product/view/_ignore_category/1/id/307/s/any_valid_product_url_key

Комментарии:

1. Версия Magento 1.7.0.2

Ответ №1:

По умолчанию magento использует тот же код для получения канонического URL Mage_Catalog_Block_Product_View::_prepareLayout() -адреса, поэтому код должен быть в порядке. Разница лишь в том, для какого хранилища выполняется код.

Это не работает в сценариях оболочки, потому что они выполняются для хранилища администратора (см. Mage_Shell_Abstract::__construct() Где Mage::app() инициализируется). Вы можете использовать Mage::app()->setCurrentStore('default'); where вам нужно заменить default вашим магазином, и должны быть напечатаны правильные URL-адреса.

Комментарии:

1. это имеет абсолютный смысл

Ответ №2:

Возможно, я не совсем понимаю, что вы подразумеваете под «каноническим URL», но если вы имеете в виду URL-адрес продукта с его идентификатором и ключом в конце, который обычно является «каноническим URL» для magento, поскольку он должен быть уникальным в данный момент, вам следует просто убрать параметрыgetURL. Если вам не нужен ключ, вы все равно можете использовать :

 $url = substr($url, 0, strrpos('/s/')); 
  

Я надеюсь, что это поможет, если нет, пожалуйста, уточните желаемый результат.

Комментарии:

1. извините, вы должны быть знакомы с magento, чтобы ответить на этот вопрос. каноническая ссылка — это уникальный uri для продукта без какой-либо информации о категории или чего-либо еще. кроме того, в magento есть таблица с именем core_rewrite_url для разрешения переименованных ключей URL-адреса продукта

2. итак, пожалуйста, прочитайте еще раз мой ответ, и вы должны получить канонический URL-адрес в определении magento.

3. Извините, этот ответ почти опасен. Пожалуйста, ознакомьтесь с принятым ответом, который является правильным способом сделать это. На самом деле я все равно не понимаю, как это может работать как хак.