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