Frage

Ich erhalte eine Produktsammlung einer bestimmten Kategorie auf einer Seite in einigen verschiedenen Magento -Websites. Mein Code zum Erhalten der Sammlung lautet:

        $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;

Mein Problem ist, dass wir auf einer der Magento -Websites die betreiben ProductUrl() abgerufen zu werden ist eine URL wie http://www.my site.com/catalog/product/view/id/2309/s/shopcat/category/373/ Und nicht mehr wie http://www.site.com/shopcat/product-url-key.html. Aber auf allen anderen Websites erscheint es, wie wir es wollen.

Weiß jemand, warum das so sein könnte? Vielen Dank! Ich habe versucht zu benutzen getUrlPath() Auch, aber das gab nichts zurück. Ich weiß, ich kann das umgehen, indem ich so etwas mache <?php echo $this->getBaseUrl().$shopProduct->getUrlKey().".html"; ?> Aber diese Methode scheint ein bisschen ineffizient!

Bearbeiten 21/03/14: Ich habe immer noch dieses Problem. Mir wurde klar getProductUrl() Ruft die gesuchte URL auf einigen Vorlagendateien der Website ab, aber nicht auf anderen. Zum Beispiel lade ich eine Sammlung auf der Homepage und es gibt mir die von mir gewünschten URLs. Aber getProductUrl() Gibt mir nicht die URLs, die ich mit demselben Code in einer Kategorieansicht möchte.

War es hilfreich?

Lösung

Versuchen Sie, die Sammlung wie diese zu erhalten:

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

Mit anderen Worten: Lassen Sie das Modell wissen, dass er den URL -Schlüssel anstelle der langen hässlichen URL mit geben soll $collection->addUrlRewrite();.

Andere Tipps

Eine Produkt -URL erhalten

Potenziell verwirrend aufgrund der 3 Methoden, die Sie anwenden könnten, die alle in mage_catalog_model_product sind:

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

Der beste Weg, um zu erklären, besteht darin, einfach die Ergebnisse mehrerer Anrufe zu zeigen. Bei einem Produkt, dessen URL-Schlüssel Mondrian-Large-Coffee-Tisch-Set-Multicolour auf dem Bereich von ist http: //made.local Die Ergebnisse sind:

$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'
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top