$ _product-> getProductUrl () che fornisce il percorso dell'URL senza chiave URL


15

Sto ottenendo una raccolta di prodotti di una determinata categoria su una pagina in alcuni diversi siti Magento. Il mio codice per ottenere la raccolta è:

        $category = new Mage_Catalog_Model_Category();
        $category->load($id);
        $collection = $category->getProductCollection();
        $collection->addAttributeToSelect('*');
        $collection->addAttributeToFilter('status', 1);
        $collection->addFieldToFilter(array(array('attribute'=>'visibility', 'neq'=>"1" )));
        $collection->getSelect()->limit(12);

        foreach ($collection as $shopProduct) :

            echo $shopProduct->getProductUrl();

        endforeach;

Il mio problema è che su uno dei siti Magento su cui stiamo eseguendo il ProductUrl()recupero è un URL simile http://www.my site.com/catalog/product/view/id/2309/s/shopcat/category/373/e non più simile http://www.site.com/shopcat/product-url-key.html. Ma su tutti gli altri siti appare come lo vogliamo.

Qualcuno sa perché potrebbe essere così? Grazie! Ho provato getUrlPath()anche a usare ma questo non ha restituito nulla. So che posso aggirare questo facendo qualcosa di simile <?php echo $this->getBaseUrl().$shopProduct->getUrlKey().".html"; ?>ma quel metodo sembra un po 'inefficiente!

EDIT 21/03/14: sto ancora riscontrando questo problema. Mi sono reso conto che getProductUrl()recupera l'URL desiderato su alcuni file modello del sito ma non su altri. Ad esempio, sto caricando una raccolta sulla homepage e mi sta dando gli URL che desidero. Ma getProductUrl()non mi sta dando gli URL che voglio con lo stesso codice in una vista di categoria.


Hai provato a reindicizzare "Riscrittura URL indice"?
oleksii.svarychevskyi,

Sì Si prega di reindicizzare i dati e rimuovere la cache
Keyul Shah,

Ho provato entrambi. Ho reindicizzato in Gestione indice e ho svuotato la cache, la cache è stata comunque disabilitata.
Sarah,

Immettere admin-> catalof-> url rewrite management. Ci sono reriti url? Se sì, prova a filtrare la griglia: Percorso target -> [categoria / some_category_id]
mageUz

Molto dispiaciuto per il ritardo nella risposta. Esiste una riscrittura URL impostata per il prodotto in questione, quindi se vai su site.com/shopcat/product-url-key.html o site.com/catalog/product/view/id/2309/s/shopcat/ categoria / 373 si arriva ancora alla stessa pagina del prodotto, è solo che il ciclo foreach sta tirando attraverso il tipo sbagliato di URL per qualche motivo.
Sarah,

Risposte:


18

Prova a ottenere la raccolta in questo modo:

$collection = $category->getProductCollection();
$collection->addAttributeToSelect('*');
$collection->addAttributeToFilter('status', 1);
$collection->addFieldToFilter(array(array('attribute'=>'visibility', 'neq'=>"1" )));
//Where the magic happens
//this will add the url rewrite.
//addUrlRewrite can also be left without a parameter to generate url without category.
$collection->addUrlRewrite($category->getId()); 
$collection->getSelect()->limit(12);

In altre parole, fai sapere al modello di fornire la chiave url invece del lungo brutto url con $collection->addUrlRewrite();.


domanda - perché hai bisogno di $ category-> getId () in addUrlRewrite? Vedo che funziona in entrambi i modi (ad esempio anche senza di essa). Grazie!
Ronen Ness,

2
Ciao @Ness, dipende se hai "Usa percorsi categoria per URL prodotto attivati" in Ottimizzazioni Sistema / Configurazione / Catalogo / Catalogo / Motore di ricerca. In caso contrario, puoi ignorarlo e utilizzare solo addUrlRewrite (). Se hai attivato i percorsi di categoria, passare l'ID categoria nella funzione significa che l'URL del prodotto che viene visualizzato è l'URL del prodotto anteposto dal percorso della categoria.
Sarah,

@Marius Sì, funziona per me.
Dhara Bhatti,

8

Ottenere un URL di prodotti

Potenzialmente confuso a causa dei 3 metodi che potresti usare, tutti presenti in Mage_Catalog_Model_Product:

public function getUrlPath($category=null)
public function getUrlInStore($params = array())
public function getProductUrl($useSid = null)

Il modo migliore per spiegare è semplicemente mostrare i risultati di diverse chiamate. Dato un prodotto la cui chiave URL è mondrian-large-coffee-table-set-multicolore nel dominio di http: //made.local i risultati sono:

$product->getUrlPath();
    'mondrian-large-coffee-table-set-multicolour'

$product->getUrlPath($category);
    'tables/mondrian-large-coffee-table-set-multicolour'

// you cannot stop this method adding ___store to the URL, even by setting _store_to_url to false
$product->getUrlInStore();
    'http://made.local/tables/mondrian-large-coffee-table-set-multicolour?___store=default'

// you cannot stop this method adding ___store to the URL, even by setting _store_to_url to false
// note - see the "using _ignore_category" section below for an arguable bug with using this param
$product->getUrlInStore(array('_ignore_category' => true));
    'http://made.local/mondrian-large-coffee-table-set-multicolour?___store=default'

$product->getProductUrl();
    'http://made.local/tables/mondrian-large-coffee-table-set-multicolour'

$product->getProductUrl(true);
    'http://made.local/tables/mondrian-large-coffee-table-set-multicolour'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.