Magento: Wie abrufen der minimal-Preis von (z.B.) gruppiert Produkte?
Ich versuche die Anzeige ein gruppiertes Produkt den Preis auf der Produkt-Ansicht-Seite in Magento 1.7.0.2, so wie es angezeigt wird in der Kategorie Produkt-listing ("Ab: xx.xx"). Ich dachte, ich konnte einfach
$this->getPriceHtml($_product, true);
zu tun, weil es funktioniert auf die gleiche Art und Weise, in der Kategorie Produkt-Auflistung, aber wie alles, was ich versuchte zu tun, Magento, ist es nicht so einfach, weil diese Methode nicht alles zurückzugeben, was Sie auf der Produkt-Seite anzeigen.
Ich schaute mich ein wenig tiefer in Magento code und herausgefunden, dass die Ursache für diese problem ist das Produkt der minimale Preis Daten nicht festgelegt auf die Produkt-Ansicht-Seite ($_product->getMinimalPrice() gibt null zurück).
Daher habe ich einige der Forschung auf, wie das laden eines Produktes minimaler Preis das brachte Ideen wie
$_product->getPriceModel()->getMinimalPrice($_product);
was aber nicht funktioniert, weil offenbar, dass die Methode veraltet ist und entfernt in einem der letzten updates oder
$priceModel = Mage::getResourceModel('catalogindex/price');
$priceModel->setStoreId(Mage::app()->getStore()->getId());
$priceModel->setCustomerGroupId(Mage::getSingleton('customer/session')->getCustomerGroupId());
$minimalPrices = $priceModel->getMinimalPrices(array($_product->getId()));
$minimalPrice = $minimalPrices[0];
$_product->setData('minimal_price', $minimalPrice['value']);
$_product->setData('minimal_tax_class_id', $minimalPrice['tax_class_id']);
was aber nicht funktionieren, weil die Tabelle 'catalogindex_minimal_price' ist leer.
Also meine Frage ist, wie Magento laden Sie den minimalen Preis in der Kategorie Produkt-listing?
- Ich habe etwas mehr Forschung. Bei der Anzeige der Produkt-listing, Produkt-Kollektion geladen, Mage_Catalog_Model_Layer wodurch der minimale Preis und andere Sachen, um es durch hinzufügen von Verknüpfungen zu der Sammlung von SQL, aber ich habe noch nicht ein Modell gefunden, dass nicht die gleiche Sache auf einzelne Produkte. Weil ich nicht wirklich wollen, um eine direkte SQL-Abfrage, ich habe die CatalogIndex Modul, aber das Modul scheint nicht zu funktionieren, weil alle seine Indizierung von Tabellen leer sind. Das Modul ist entweder veraltet oder bin ich einfach zu blöd, um es zu aktivieren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich schaute mich ein wenig tiefer in Magento code und spürte, wie Magento lädt die Produkte der Produkt-Liste.
Bei der Anzeige der Produkt-Liste, die Produkt-Kollektion geladen wird das Modell Mage_Catalog_Model_Layer, wodurch der minimale Preis und andere Sachen, um die Produkte in der Auflistung durch hinzufügen von Verknüpfungen zu der Sammlung von SQL, aber ich habe noch nicht ein Modell gefunden, dass nicht die gleiche Sache für einzelne Produkte anstelle von Sammlungen.
Weil ich nicht wollen, verwenden Sie eine direkte SQL-Abfrage, ich habe die CatalogIndex Modul, aber das Modul scheint nicht zu funktionieren, weil alle seine Indizierung von Tabellen leer sind oder sogar beschädigt.
sah gut aus auf den ersten, aber es gibt mir die folgende Fehlermeldung:
Den CatalogIndex Modul ist entweder veraltet oder bin ich einfach zu blöd, um es zu aktivieren.
Allerdings habe ich jetzt einen workaround in meinem Preis.phtml-template, welches verwendet die gleiche Methode zum abrufen der minimale Preis und Steuer-Prozenten, wie die Produkt-Liste noch:
Am Anfang der Vorlage habe ich noch folgende:
die vielleicht nicht die perfekte Lösung sein, aber es macht den job und es macht es ein wenig sauberer als bei der Iteration über alle untergeordneten Produkte und der Suche nach der minimalen Preis, die Art und Weise.
setCurrentStore
odersetStoreId
. Wenn Sie ihn nicht eingestellt haben, wird standardmäßig " admin-Shop, der jedoch keine Preisinformationen. Magento Abfrage einen inner join statt outer-join von Produkten, um die Kalkulationstabelle, soaddMinimalPrice
auf mysteriöse Weise verursacht die Abfrage in null-Ergebnis Produkte.Dies ist nicht eine Antwort, so viel wie eine große HTML-Kommentar auf unterteiluns Antwort. Wenn Sie dies Lesen, könnten Sie die Umsetzung Ihrer eigenen benutzerdefinierten Modul zur Anzeige einer Produkt-Liste. In meinem Fall, es ist eine einzelne Seite nur für Großhändler. Mein Ziel war es, eine Liste von meinem eigenen Unternehmen, den Produkten und geben Ihnen eine Liste, wie es war eine andere Kategorie. Ich kopierte die Vorlage
list.phtml
zu meinem neuencontent.phtml
. AbergetMinimalPrice()
wurde wiederNULL
, was bedeutet, dass wenn dieser code ruft diegetPriceHtml()
,price.phtml
war nicht zeigt, Großhandel Preise.Ich habe ein einfaches Modul, index-controller und einen Inhalt.phtml. Mithilfe der vorformulierten sehe ich alle über dem Netz, in der
indexController.php
Datei ändern:zu:
Bedeutet dies eine Menge von der schwerarbeit für Sie zeigen, um die Liste der Produkte richtig.
Nun, auf die Vorlage-Datei, in meinem Fall
content.phtml
bekommen Sie Ihre Produkt-Kollektion und verwenden Sie dann unterteiluns code in der Spitze derforeach()
die wiederholt.Da diese nicht durch ein einzelnes Produkt der Seite und ich bin mit anderen template-code,
$this->setProduct()
nichts für mich. Ich dachte, wenn es einen Satz gibt, gibt es vielleicht einen bekommen, so$_product=$this->getProduct()
die Magie war meine Vorlageprice.phtml
benötigt, um richtig zu arbeiten. Dann bemerkte ich, dass ich könnte geben Sie einfach dieMage::
imsetProduct()
direkt zu$_product
.Dank, Unterteiluns!!!
Gibt es eine andere Möglichkeit, die wird immer noch erlauben, Sie zu verwenden
$this->getPriceHtml($_product, true);
in Ihrer Vorlage, die kümmert sich dann um die komplexen Preis-display Regeln und setzt "Ab", bevor gruppiert, die Produkt-Preise.Ich bin mit diesem für eine individuelle Produkt-block. In einer block-Klasse habe ich diese Funktion:
Dann in der Vorlage:
Folgende funktioniert der trick ohne mit einem Produkt-Kollektion:
Dieser code ist angepasst von
\Mage_CatalogIndex_Model_Resource_Price::getMinimalPrices
gemacht und sich für ein einzelnes Produkt.