Wie kann ich einen Fehler in einem Plugin richtig auslösen?

7

Ich verhindere erfolgreich, dass bestimmte Inhalte unter bestimmten Bedingungen gespeichert werden, habe jedoch Probleme beim Umgang mit der Fehlermeldung an den Benutzer.

Der eigentliche Text wird zwar angezeigt, es wird jedoch zusätzlich erwähnt, dass " Speichern mit dem folgenden Fehler fehlgeschlagen ist: ". Dann folgt nichts. Es scheint redundant zu sein, da der Text angezeigt wird, aber ich weiß nicht, wie ich ihn unterdrücken oder die richtigen Informationen dafür bereitstellen soll, damit er dem Benutzer nicht unvollständig erscheint.

public function onContentBeforeSave($context=null, $article=null, $isNew=0) {
    if($myTestFails){
        $errormsg = 'My error message while saving categories...';
        JError::raiseWarning(403, $errormsg);
        return false;
    }
}

Error

Meine Fehlermeldung beim Speichern von Kategorien ...

Speichern fehlgeschlagen mit folgendem Fehler:

BIP
quelle
Welche Version von Joomla?
Søren Beck Jensen
Die Version V3.3 - der Code wurde aus Joomlas Content Plugin
GDP

Antworten:

5

Aufgrund von "return false" werden Sie zum Modell zurückgeführt, sodass die Meldung "Speichern fehlgeschlagen mit folgendem Fehler:" angezeigt wird.

Wenn Sie nicht zum Modell zurückkehren möchten, können Sie den Benutzer direkt zu Ihrem Formular zurückleiten, anstatt das Modell, dann den Controller und schließlich Ihre Formularansicht einzugeben.

Da Sie sich jedoch vom Modell und vom Controller entfernen, müssen Sie sich selbst um etwas kümmern. Sie müssen beispielsweise speichern, was der Benutzer in Ihr Formular eingegeben hat, um es nach der Umleitung automatisch im Formular anzuzeigen. Dies hilft dem Benutzer, dies nicht zu tun Füllen Sie das Formular erneut aus.

public function onContentBeforeSave($context=null, $article=null, $isNew=0) {
    if($myTestFails){
        $errormsg = 'My error message while saving categories...';
        $app = JFactory::getApplication();
        $app->setUserState(your-form-context-here, your-form-data-here);
        $app->enqueueMessage($errormsg);
        $app->redirect(JRoute::_(URL-to-your-form, false));
    }
}

Sie können sich die save () -Funktionen in Bibliotheken / Legacy / Controller / form.php und Bibliotheken / Legacy / Modell / admin.php ansehen. Dort gibt es nützliche Informationen.

Hung Tran
quelle
Ich mag das, aber weil es ein Plugin-Ereignis ist, ist es nicht "mein" Formular, daher habe ich keine Kontrolle darüber, wo Sie auf "Formular" -Informationen verwiesen haben.
BIP
3

Sie sollten wahrscheinlich eine Ausnahme auslösen.

JError war in Joomla 3.0 veraltet

throw new Exception(JText::_('COM_MYCOMP_ERROR_MESSAGE_NOT_FOUND'), 403);
Søren Beck Jensen
quelle
Sie haben Recht mit der Methode, um den Fehler auszulösen, aber ich glaube immer noch nicht, dass dies tatsächlich die Frage des @ GDP beantworten wird
Lodder
Joomla verwendet die Methode, die ich in ihrem Inhalts-Plugin verwendet habe. Das war also mein Ausgangspunkt. Neugierig, wie sich eine Ausnahme von einem Inhalts-Plugin auswirken könnte. (Neuer PC heute, kann das also ein oder zwei Tage lang nicht ausprobieren).
BIP