Magento产品出口与完整的规范网址

时间:2014-06-30 12:28:24

标签: php magento export command-line-interface canonical-link

有没有办法在命令行上获取带有当前规范网址的产品列表?

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

2 个答案:

答案 0 :(得分:4)

默认情况下,magento使用相同的代码来获取Mage_Catalog_Block_Product_View::_prepareLayout()中的规范网址,因此代码应该没问题。唯一的区别是代码执行的存储区。

它在shell脚本中不起作用,因为它们是针对管理存储执行的(请参阅Mage_Shell_Abstract::__construct()初始化Mage::app())。您可以使用Mage::app()->setCurrentStore('default');在商店中替换default,并打印正确的网址。

答案 1 :(得分:-2)

我可能不明白你的意思"规范网址"但如果你的意思是产品的网址及其ID和最后的密钥通常是"规范网址"对于magento,因为它应该是一时的独特,你应该拿走getUrl的params。如果您不想要密钥,您仍然可以使用:

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

我希望它有所帮助,如果没有,请准确说明您想要的结果。