2014-06-30 11 views
7

Esiste un modo per ottenere un elenco di prodotti con il loro URL canonico corrente sulla riga di comando?Esportazione del prodotto Magento con URL canonico completo

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(); 

lo eseguo con php -f Magento/shell/urlTest.php e questo mi dà qualcosa di simile:

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

+0

Magento versione 1.7.0.2 –

risposta

4

Per impostazione predefinita, magento utilizza lo stesso codice per ottenere l'URL canonico in Mage_Catalog_Block_Product_View::_prepareLayout(), pertanto il codice dovrebbe essere corretto. L'unica differenza è per il quale viene archiviato il codice.

Non funziona negli script di shell perché vengono eseguiti per l'archivio di amministrazione (vedere Mage_Shell_Abstract::__construct() dove è inizializzato Mage::app()). È possibile utilizzare Mage::app()->setCurrentStore('default'); dove è necessario sostituire default dal proprio negozio e gli URL corretti devono essere stampati.

+2

questo ha assolutamente senso –

-2

io forse non capisco correttamente cosa si intende per "canonica url "ma se intendi l'url del prodotto con il suo ID e la chiave alla fine che è normalmente l '" url canonico "per Magento come dovrebbe essere unico in un momento, dovresti semplicemente togliere i parametri del getUrl. Se non si desidera che la chiave, è comunque possibile utilizzare:

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

Spero che aiuta, in caso contrario, precisa il risultato desiderato.

+0

scusa, dovresti essere familiare con magento per rispondere a questa domanda. il collegamento canonico è l'uri unico di un prodotto senza informazioni di categoria o qualcos'altro. inoltre Magento ha una tabella chiamata core_rewrite_url per risolvere le chiavi url del prodotto rinominate –

+0

quindi, si prega di leggere di nuovo la mia risposta e si dovrebbe ottenere url canonico nella definizione di Magento. –

+0

no, la tua soluzione non ha funzionato –

Problemi correlati