2014-06-30 13 views
7

Gibt es eine Möglichkeit, eine Liste von Produkten mit ihrer aktuellen kanonischen URL auf der Kommandozeile zu bekommen?Magento Produkt-Export mit voller kanonischer 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(); 

Ich betreibe es mit php -f magento/shell/urlTest.php und das gibt mir etwas wie folgt aus:

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

+0

Magento Version 1.7.0.2 –

Antwort

4

standardmäßig magento verwendet den gleichen Code die kanonische URL in Mage_Catalog_Block_Product_View::_prepareLayout() so dass der Code sollte in Ordnung sein zu bekommen. Der einzige Unterschied ist, für welchen Speicher der Code ausgeführt wird.

Es funktioniert nicht in Shell-Skripten, da sie für den Admin-Store ausgeführt werden (siehe Mage_Shell_Abstract::__construct(), wo Mage::app() initialisiert wird). Sie könnten Mage::app()->setCurrentStore('default'); verwenden, wo Sie default von Ihrem Geschäft ersetzen müssen, und die richtigen URLs sollten gedruckt werden.

+2

das macht absolut Sinn –

-2

ich vielleicht nicht verstehen, richtig, was du mit „kanonische bedeuten url“, aber wenn Sie die uRL des Produkts mit seiner ID und der Schlüssel am Ende bedeuten, die normalerweise ist das‚kanonische uRL‘für magento, wie es soll, in einem Moment, einzigartig sein, sollten Sie nur die Parameter des wegzunehmen getUrl. Wenn Sie den Schlüssel nicht möchten, können Sie immer noch verwenden:

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

Ich hoffe, es hilft, wenn nicht, bitte genau das Ergebnis Sie wollen.

+0

sorry, sollten Sie mit magento familar sein, um diese Frage zu beantworten. Der kanonische Link ist die eindeutige URL zu einem Produkt ohne irgendwelche Kategorieinformationen oder etwas anderes. zusätzlich magento hat eine Tabelle mit dem Namen core_rewrite_url umbenannten Produkt url Schlüssel zu lösen –

+0

so lesen Sie bitte meine Antwort wieder und Sie sollten kanonische URL in der magento Definition erhalten. –

+0

nein, Ihre Lösung nicht funktioniert –