Antworten:
Wir müssen dies in 2 Teilen beheben. Der erste Teil verfolgt tatsächlich, welche einfachen Produkte im Warenkorb von gruppierten Produkten stammen. Das zweite ist die Sortierung.
Zuerst für die Verfolgung. Wir werden eine zusätzliche Spalte hinzufügen sales_flat_quote_item
, um diese Informationen zu speichern.
Um dies richtig zu machen, schreiben Sie Ihr eigenes Modul, ein Tutorial dazu finden Sie hier auf Tutsplus.com .
Sie benötigen außerdem ein Installationsskript. Schauen Sie sich dieses Inchoo-Tutorial dazu an.
Fügen Sie Folgendes in Ihr Installationsskript ein
$installer = new Mage_Sales_Model_Resource_Setup('core_setup');
$installer->addAttribute('quote_item', 'is_grouped', array(
'type' => Varien_Db_Ddl_Table::TYPE_SMALLINT,
'visible' => false,
'required' => false,
'default' => 0
));
$installer->endSetup();
Dies ist ein einfacher 0- oder 1- Wert.
Jetzt müssen wir diesen Wert festlegen, wenn ein Produkt in den Warenkorb gelegt wird. Wir können dies mit einem Beobachter tun.
Fügen Sie Folgendes in Ihr config.xml
<sales_quote_item_set_product>
<observers>
<[namespace]_[module]_sales_quote_item_set_product>
<class>[Namespace]_[Module]_Model_Observer</class>
<method>salesQuoteItemSetProduct</method>
</[namespace]_[module]_sales_quote_item_set_product>
</observers>
</sales_quote_item_set_product>
Jetzt müssen wir wissen, wann dies in den Warenkorb gelegt wurde. Dies war ein gruppiertes Produkt. Wir machen das mit einem einfachen Eingabefeld im Formular " In den Warenkorb" .
Fügen Sie Folgendes in Ihr Modul-Layout-XML ein. Es wird ein Eingabefeld hinzugefügt, wenn der Produkttyp gruppiert wird.
<?xml version="1.0"?>
<layout version="0.1.0">
<PRODUCT_TYPE_grouped>
<reference name="product_options_wrapper">
<block type="core/text" name="isgrouped.input">
<action method="setText"><text><![CDATA[<input type="hidden" name="isgrouped" value="1"/>]]></text></action>
</block>
</reference>
</PRODUCT_TYPE_grouped>
</layout>
Und eine Beobachterklasse, die das Vorhandensein der Eingabe überprüft.
class [Namespace]_[Module]_Model_Observer
{
public function salesQuoteItemSetProduct($o)
{
$this->_setIsGrouped($o);
return $this;
}
protected function _setIsGrouped($o)
{
$isGrouped = (int)$this->getRequest()->getPost('isgrouped');
if ($isGrouped) {
$quoteItem = $o->getQuoteItem();
$quoteItem->setIsGrouped($isGrouped);
}
}
}
Dadurch wird das Tabellenfeld is_grouped
auf 1 gesetzt, wenn das einfache Produkt aus einem gruppierten Produkt stammt.
Nun zur Sortierung! Die Blockklasse hinter dem Wagen ist die, Mage_Checkout_Block_Cart
die wir aus unserem eigenen Modul neu schreiben müssen. Sie können dies tun, indem Sie dem Tag config
> global
in Ihrem Folgendes hinzufügenconfig.xml
<blocks>
<checkout>
<rewrite>
<cart>[Namespace]_[Module]_Block_Checkout_Cart</cart>
</rewrite>
</checkout>
</blocks>
Die getItems
Methode kann nun die gruppierten Elemente herausfiltern und alphabetisch filtern
class [Namespace]_[Module]_Block_Checkout_Cart extends Mage_Checkout_Block_Cart
{
/**
* Return customer quote items
*
* @return array
*/
public function getItems()
{
if ($this->getCustomItems()) {
return $this->getCustomItems();
}
$grouped = [];
$items = parent::getItems();
/**
* Filter all the grouped items out to sort them
*/
foreach ($items as $i => $item) {
if ($item->getIsGrouped() == 1) {
$grouped["{$item->getName()}{$item->getId()}"] = $item;
unset($items[$i]);
}
}
ksort($grouped, SORT_STRING); // sort key (which is name) alphabetically
return array_merge($grouped, $items);
}
}
HAFTUNGSAUSSCHLUSS: Ungetesteter Code muss möglicherweise hier oder da angepasst werden, sollte aber im Allgemeinen funktionieren. Wenn nicht nur kommentieren
info_buyRequest
Option gespeichert sind :$groupedId = $item->getBuyRequest()->getData('super_product_config')['product_id']