#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 и это дает мне что-то вроде этого:
Комментарии:
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. Извините, этот ответ почти опасен. Пожалуйста, ознакомьтесь с принятым ответом, который является правильным способом сделать это. На самом деле я все равно не понимаю, как это может работать как хак.