Haben die Befehle in J4 verändert

  • Hallo Leute, habe eine frage, ob gilten die befehle vom J3 auch im J4, oder hat jemand ein link mit beispielen.


    Für bilder war so:

    Code
    $imageIntro = JURI::root().$images->image_intro;
    $imageFull = JURI::root().$images->image_fulltext;
    $imageDirect = JURI::root().'images/image.png';


    Für tietel und texte war so:

    Code
    $titleItem = JHtml::_($this->item->title)
    $textIntro = JHtml::_($this->item->introtext);
    $textFull = JHtml::_($this->item->fulltext);


    gab auch, viele andere befehle, oder ich weiss es nicht wie soll ich es nennen.


    Vielen Dank im Voraus, Guri.

  • Code
    JURI::root()

    funktioniert nach wie vor, wobei man jetzt eher so schreibt:

    Code
    JUri::root()

    Die Großschrift stammt noch aus Joomla-2.5-Zeiten.


    Code
    $images->image_intro

    hat sich TEILS geändert. Hängt vom verwendeten Editor ab. Besser vom verwendeten Medienmanager.


    Der Joomla-eigene hängt jetzt leider an den Bildpfad EVENTUELL noch was an. Da kann ein Bildpfad dann so aussehen

    Code
    images/powered_by.png#joomlaImage://local-images/powered_by.png?width=294&height=44

    anstatt nur

    Code
    images/powered_by.png

    Man muss also vielleicht so was machen

    Code
    $imageIntro = JUri::root() . explode('#', $images->image_intro)[0];


    Mit deinem zweiten Codeblock kann ich überhaupt nichts anfangen. Der ist unvollständig und wird auch in Joomla 3 zu einem fatalen Fehler führen. Was sollen die Zeilen machen?


    Grundsätzlich kann man aber weiterhin fast alle JHtml-Methoden verwenden: Joomla: JHtml- vs. HTMLHelper-Methoden. Unterschiede?!?


    In Joomla 4 sind ein paar rausgeflogen (siehe meinen Beitrag), aber auch welche hinzugekommen.

  • Noc kurze Anmerkung:

    Code
    $imageIntro = JUri::root() . explode('#', $images->image_intro)[0];

    Ob du das brauchst oder nicht hängt davon ab, was du mit dem

    Code
    $imageIntro

    dann machen willst. Wenn du es nur in einem <img>-Tag verwenden willst, brauchst du es nicht zerlegen, sondern kannst direkt verwenden.

  • Code
    $images->image_intro

    hat sich TEILS geändert. Hängt vom verwendeten Editor ab. Besser vom verwendeten Medienmanager.


    Der Joomla-eigene hängt jetzt leider an den Bildpfad EVENTUELL noch was an. Da kann ein Bildpfad dann so aussehen

    Code
    images/powered_by.png#joomlaImage://local-images/powered_by.png?width=294&height=44

    anstatt nur

    Code
    images/powered_by.png

    Man muss also vielleicht so was machen

    Code
    $imageIntro = JUri::root() . explode('#', $images->image_intro)[0];

    Idealerweise nutzt man immer HTMLHelper::_('image', ...) dann wird automatisch Sorge getragen, dass die Bilder sauber sind. Oder wenn man unbedingt das selbst machen will (warum auch immer), gibts HTMLHelper::_('cleanUrl', ...).

  • Idealerweise nutzt man immer HTMLHelper::_('image', ...) dann wird automatisch Sorge getragen, dass die Bilder sauber sind.

    Deshalb ja auch mein Kommentar:

    Ob du das brauchst oder nicht hängt davon ab, was du mit dem ... machen willst.

    Zur Ergänzung, wann man das selbst machen muss: https://ghsvs.de/programmierer…itragsbild-komische-pfade


    Oder anders: Ich habe meine Lektion gelernt und greife wannimmer möglich auf pures PHP zurück, anstatt in Joomla 5 dann wieder von vorne anzufangen ;) (nur ein halber Scherz).


    Nachtrag:

    gibts HTMLHelper::_('cleanUrl', ...).

    gibt es in Joomla 3 soweit ich sehe nicht, wohl nur in Joomla 4.

  • Auch nur der Vollständigkeit halber. So ist richtig:

    Code
    \defined('_JEXEC') or die;
    use Joomla\CMS\HTML\HTMLHelper;
    
    $pfad = 'image/blubb/marple.jpg#test';
    
    $pfad = HTMLHelper::_('cleanImageURL', $pfad);
    
    echo ' DEBUG <pre>' . print_r($pfad, true) . '</pre>';exit;

    Crux (für mich): Man bekommt ein Objekt zurück, nicht einfach den gesäuberten Pfad. Und wichtiger: [url] enthält nach wie vor das '#'.

    Code
    stdClass Object
    (
        [attributes] => Array
            (
                [width] => 0
                [height] => 0
            )
    
        [url] => image/blubb/marple.jpg#test
    )

    Ist also nicht wirklich das, was der Name 'cleanImageURL' suggeriert.