Möchten Sie Produkte automatisiert, zum Beispiel über einen Cronjob löschen, werden Sie schnell bemerken, dass Sie die Funktion $product->delete() in Form einer Exception “Diese Aktion von einem nicht administrativen Bereich nicht abgeschlossen werden.” endet.
Also - wir müssen der Sache auf den Grund gehen. Dazu öffnen wir die Datei app\core\image\catalog\model\Product.php und sehen uns die Funktion _beforeDelete() an.
protected function _beforeDelete()
{
$this->cleanCache();
$this->_protectFromNonAdmin();
return parent::_beforeDelete();
}
Schnell wird klar, dass nur die Funktion _protectFromNonAdmin unser Vorhaben Produkte zu löschem verhindert. In der Datei app\core\image\catalog\model\Abstract.php findet man schlußendlich den entsprechenden Quellcode.
protected function _protectFromNonAdmin()
{
if (Mage::registry('isSecureArea')) {
return;
}
if (!Mage::app()->getStore()->isAdmin()) {
Mage::throwException(Mage::helper('core')->__('Cannot complete this operation from non-admin area.'));
}
}
Nun gibt es zwei Möglichkeiten:
1. isSecureArea ist registriert.
2. Mage::app()->getStore()->isAdmin() liefert True als Ergebnis zurück
Damit wird klar, dass wir einfach isSecureArea registrieren und somit die Abfrage aushebeln. Das sieht dann im Code wie folgt aus:
...
Mage::register('isSecureArea', true, true);
$product->load($id);
...
$product->delete();
...
Damit können Sie ohne Probleme Produkte ausserhalb des Frontends löschen. Für Sicherheitsmechanismen müssen Sie dann allerdings selbst sorgen!
Viele Grüße
Johannes Teitge