Formatierung geht verloren

  • Hallo


    Nach der Umstellung auf Joomla 4 musste ich ein Script anpassen:

    JRequest::get ('post') ersetzte ich mit JFactory::getApplication()->input->post->getArray(). Das funktoniert soweit gut. Aber .....

    Im Array gibt es unter anderem auch Text und dieser verliert die Formatierung. Es gibt nur aneinander gereihte Buchstaben aus.


    Was könnte der Grund sein? Besten Dank für jeden Tipp.


    Gruss

    langi

  • getArray() filtert immer. Sanitizing aus Sicherheitsgründen. Ich habe keine Ahnung, ob man das trivial "umbauen" kann, so wie du das verwenden willst. Mir ist das bisher nicht gelungen.


    Man muss letztlich doch auf $_POST zurückgreifen und kann das dann ggf. durch selbst definierte Joomla-Filter schicken. Halt etwas sehr viel aufwändiger.


    Eigentlich ist das ganze System ja für Joomla-Formulare gedacht, wo man die Formularfelder mit Filtern definiert. Da hat man dann eine "Sammelgruppe" "jform", in der alle Felder enthalten sind. Das lässt sich dann auch, wenn benötigt, einzeln und als Array "abgreifen"

    -------

    Im Normalfall greift man aber die Felder einzeln mit ->get() aus dem Post ab. Man braucht kein Zwischen-Array dafür und spart sich jede Menge if isset()-Krimskrams, um keine Array-Indexfehler oder ähnliches zu bekommen.

  • Besten Dank für den Hinweis. Ich bin irgendwie gegen eine Wand.

    Ich habe nun versucht, jform wie folgt direkt abzugreifen:

    JFactory::getApplication()->input->post->get('jform');


    Wenn ich folgenden Versuchstext eingebe

    <strong>test</strong></p>

    <p>test

    erhalte ich mit


    $ay = JFactory::getApplication()->input->post->getArray();

    $res = $ay [jform];


    das Resultat: "test test"


    Mit $res = JFactory::getApplication()->input->post->get('jform');


    ergibt es : "strongteststrongpptest"


    Wo liegt da das Problem?

  • Dazu hast du ja oben einen Link bekommen.

    Zitat

    filter is a string specifying one of the filters in the list below. If you don't specify this parameter then a default of "cmd" is used

    "cmd" ist ein Filter, der aus dem Wert einen String erzeugt, der nur bestimmte Zeichen enthalten darf (a bis z, A bis Z, 0 bis 9, Unzterstrich, Bindestrich und Punkt).

    Zitat
    Code
    $val = $input->get(param_name, default_value, filter);

    Ich will nichts versprechen, dass dann nicht auch gefiltert wird, aber dann würde ich mal ausprobieren.

    Code
    $val = $input->post->get('jform', array(), 'array');

    Wenn 'jform' gar nicht vorhanden, dann gib leeres Array zurück. Falls aber existiert gib den Wert als Array zurück.


    Gestern habe ich jedenfalls ausprobiert, dass erst getArray() die Filterei macht.


    Und nur nebenbei. Joomla 4 verwendet da überall den direkten Weg (ohne post), weil jform in einem Joomla-Fromular immer POST-Daten sind.

    Code
    $val = $input->get('jform', array(), 'array');
  • Wow, herzlichen Dank. So hat es nun geklappt.


    Wenn ich schon so tolle Unterstützer habe, kommt gleich die nächste Frage: ;)

    Ich habe nun folgendes Script.

    Code
            $row =& $this->getTable();
            $input=JFactory::getApplication()->input;
            $data = $input->post->get('jform', array(), 'array');
            $row->id = $input->get('ga_id');
    
            if (!$row->store()) {$this->setError('Store failed');
    
                return false;

    Wenn $row->id leer ist, wird seit Joomla 4 !$row->store ein Fehler angezeigt. Bei Joomla 3 war das nicht dder Fall.


    Kann mir auch hier jemand helfen?


    Wow, herzlichen Dank. So hat es nun geklappt

    Einmal editiert, zuletzt von Indigo66 () aus folgendem Grund: Ein Beitrag von langi mit diesem Beitrag zusammengefügt.