Magento Checkout braucht ewig (Timeout)

Der Magento Checkout braucht manchmal Ewigkeiten, um den Checkout abzuschliessen.
So ist z.B. ein Warenkorb mit 80 Positionen und ca. 400 Artikeln nach 6 Minuten in den PHP Timeout gelaufen.

Der Grund hierfür liegt in den Observern, die beim Abschluss einer Bestellung aufgerufen werden.
Hierbei handelt es sich um den Observer sales_order_item_save_after der Module Downloadable/RSS

Diese Observer wurden auch aufgerufen, obwohl die Module im Magento backend in der Systemkonfiguration deaktiviert wurden.

Um die Observer zu deaktivieren, müssen folgende Codezeilen auskommentiert werden:

app/code/core/Mage/Downloadable/etc/config.xml

<sales_order_item_save_after>
    <observers>
        <downloadable_observer>
            <class>downloadable/observer</class>
            <method>saveDownloadableOrderItem</method>
        </downloadable_observer>
    </observers>
</sales_order_item_save_after>

Hinweis: In Magento 1.6.2.0 heisst der Downloadable Observer sales_order_item_save_commit_after

app/code/core/Mage/Rss/etc/config.xml

<sales_order_item_save_after>
    <observers>
        <notifystock>
            <class>rss/observer</class>
            <method>salesOrderItemSaveAfterNotifyStock</method>
        </notifystock>
    </observers>
</sales_order_item_save_after>
<sales_order_item_save_after>
    <observers>
        <ordernew>
            <class>rss/observer</class>
            <method>salesOrderItemSaveAfterOrderNew</method>
        </ordernew>
    </observers>
</sales_order_item_save_after>

Danke hierfür an diesen Thread: Stackoverflow

Wie immer der Hinweis: Dies sind Core Dateien, die hier überschrieben werden! Am besten ist es daher, ein eigenes Modul zu erstellen und die Core Config zu überschreiben!

Unter folgendem Link findet sich hierzu ein Beitrag (wurde nicht getestet): Modul erstellen

Magento 1.5.1.0: Testbestellungen und -Kunden löschen

Getestet mit Magento 1.5.1.0
Vor dem Ausführen immer ein DB-Backup machen!

SET FOREIGN_KEY_CHECKS=0;
TRUNCATE `catalogsearch_query`;
ALTER TABLE `catalogsearch_query` AUTO_INCREMENT=1;
TRUNCATE `sales_flat_creditmemo`;
TRUNCATE `sales_flat_creditmemo_comment`;
TRUNCATE `sales_flat_creditmemo_grid`;
TRUNCATE `sales_flat_creditmemo_item`;
TRUNCATE `sales_flat_invoice`;
TRUNCATE `sales_flat_invoice_comment`;
TRUNCATE `sales_flat_invoice_grid`;
TRUNCATE `sales_flat_invoice_item`;
TRUNCATE `sales_flat_order`;
TRUNCATE `sales_flat_order_address`;
TRUNCATE `sales_flat_order_grid`;
TRUNCATE `sales_flat_order_item`;
TRUNCATE `sales_flat_order_payment`;
TRUNCATE `sales_flat_order_status_history`;
TRUNCATE `sales_flat_quote`;
TRUNCATE `sales_flat_quote_address`;
TRUNCATE `sales_flat_quote_address_item`;
TRUNCATE `sales_flat_quote_item`;
TRUNCATE `sales_flat_quote_item_option`;
TRUNCATE `sales_flat_quote_payment`;
TRUNCATE `sales_flat_quote_shipping_rate`;
TRUNCATE `sales_flat_shipment`;
TRUNCATE `sales_flat_shipment_comment`;
TRUNCATE `sales_flat_shipment_grid`;
TRUNCATE `sales_flat_shipment_item`;
TRUNCATE `sales_flat_shipment_track`;
TRUNCATE `sales_invoiced_aggregated`;
TRUNCATE `sales_invoiced_aggregated_order`;
TRUNCATE `sales_order_aggregated_created`;
TRUNCATE `sendfriend_log`;
TRUNCATE `tag`;
TRUNCATE `tag_relation`;
TRUNCATE `tag_summary`;
TRUNCATE `wishlist`;
TRUNCATE `log_quote`;
TRUNCATE `report_event`;
ALTER TABLE `sales_flat_creditmemo` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_creditmemo_comment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_creditmemo_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_creditmemo_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice_comment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_address` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_payment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_status_history` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_address` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_address_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_item_option` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_payment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_shipping_rate` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_comment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_track` AUTO_INCREMENT=1;
ALTER TABLE `sales_invoiced_aggregated` AUTO_INCREMENT=1;
ALTER TABLE `sales_invoiced_aggregated_order` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_aggregated_created` AUTO_INCREMENT=1;
ALTER TABLE `sendfriend_log` AUTO_INCREMENT=1;
ALTER TABLE `tag` AUTO_INCREMENT=1;
ALTER TABLE `tag_relation` AUTO_INCREMENT=1;
ALTER TABLE `tag_summary` AUTO_INCREMENT=1;
ALTER TABLE `wishlist` AUTO_INCREMENT=1;
ALTER TABLE `log_quote` AUTO_INCREMENT=1;
ALTER TABLE `report_event` AUTO_INCREMENT=1;
TRUNCATE `customer_address_entity`;
TRUNCATE `customer_address_entity_datetime`;
TRUNCATE `customer_address_entity_decimal`;
TRUNCATE `customer_address_entity_int`;
TRUNCATE `customer_address_entity_text`;
TRUNCATE `customer_address_entity_varchar`;
TRUNCATE `customer_entity`;
TRUNCATE `customer_entity_datetime`;
TRUNCATE `customer_entity_decimal`;
TRUNCATE `customer_entity_int`;
TRUNCATE `customer_entity_text`;
TRUNCATE `customer_entity_varchar`;
TRUNCATE `log_customer`;
TRUNCATE `log_visitor`;
TRUNCATE `log_visitor_info`;
ALTER TABLE `customer_address_entity` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_datetime` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_decimal` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_int` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_text` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_varchar` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_datetime` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_decimal` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_int` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_text` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_varchar` AUTO_INCREMENT=1;
ALTER TABLE `log_customer` AUTO_INCREMENT=1;
ALTER TABLE `log_visitor` AUTO_INCREMENT=1;
ALTER TABLE `log_visitor_info` AUTO_INCREMENT=1;
TRUNCATE `eav_entity_store`;
ALTER TABLE  `eav_entity_store` AUTO_INCREMENT=1;
SET FOREIGN_KEY_CHECKS=1;

CatalogSearch in Magento 1.4 +

In einem Magento-Shop mit Version 1.6.2.0 wurden keine Produkte gefunden trotz Reindizierung/Cache Löschen/Attribute anpassen etc.

Der Grund ist, dass Core Dateien verschlimmbessert wurden.

Datei: app/code/core/Mage/CatalogSearch/Block/Result.php

Hier sind die Zeilen 149 und 150 auskommentiert. Diese müssen wieder einkommentiert werden.

$this->getListBlock()
->setCollection($this->_getProductCollection());

Falls es dann immer noch nicht funktionieren sollte, folgende Datei anpassen:

Datei: app/code/core/Mage/EAV/Model/Resource/Entity/Attribute/Option/Collection.php

Hier die Funktion SetIdFilter ändern von

public function setIdFilter($optionId)
{
return $this->addFieldToFilter(’option_id’, array(’in’ => $optionId));
}

nach

public function setIdFilter($optionId)
{
if (is_array($optionId)) {
$this->addFieldToFilter(’main_table.option_id’, array(’in’ => $optionId));
} else if ($optionId != ‘’) {
$this->addFieldToFilter(’main_table.option_id’, $optionId);
}
return $this;
}

Und schon funktioniert die Schnellsuche wieder, wie sie sollte.

Quelle

Magento: Bruttowert für kostenlosen Versand / Tablerates

In Magento kann man per Tablerates einstellen, dass ab einer bestimmten Zwischensumme (Warenkorb) der Versand kostenlos ist. Das Problem hierbei ist aber, dass Magento vom Nettobetrag des Warenkorbes ausgeht, und nicht vom Bruttobetrag. Wenn man also in den Tablerates ‚Versandkostenfrei ab 50 Euro‘ einstellt, ist der Versand tatsächlich erst ab 59,50 Euro kostenlos.

Mit ein paar Zeilen kann man dies aber umgehen.

Zuerst kopiert man die Datei app/code/core/Mage/Shipping/Model/Carrier/Tablerate.php nach app/code/local/Mage/Shipping/Model/Carrier/Tablerate.php

Somit wird der neue Code bei einem Magento-Update nicht überschrieben.

In diese Datei schreibt man nun zwischen dem Block ‚// exclude Virtual products price from Package value if pre-configured‘ und ‚// Free shipping by qty‘ in ca. Zeile 77 folgenden Code:

//NEU Versandkostenfrei ab xx Euro NETTO
if (Mage::helper('tax')->priceIncludesTax()) {
   foreach ($request->getAllItems() as $item) {
      $request->setPackageValue($request->getPackageValue() + $item->getTaxAmount());
   }
}

Der Aufbau der tablerates.csv sieht dabei wie folgt aus:

"Land","Region","Postleitzahl","Zwischensumme (und mehr)","Versandpreis"
*,*,*,50.0000,0.0000
*,*,*,0.0000,4.9000