Custom HTML Modul mit Parametern?

  • $this ist einfach Definitionssache. $this gibt es nicht immer. $this ist je Umgebung was komplett anderes.


    Da ich die ganze Zeit hiervon ausgegangen bin:

    So weit ich verstanden habe, ist dein SVG-Code immer gleich und du willst lediglich je Beitrag und auf einer Beitragsseite die Bilder auswechseln.

    haben wir uns jetzt wohl leider verzettelt.


    Meines Erachtens ist es nicht trivial möglich innerhalb eines Moduls in einer Blogansicht zu ermitteln, in welchem Beitrag das Modul gerade angezeigt wird. Da müsste man wohl doch besser auf ein Plugin ausweichen, wo das alles bekannt ist.


    Oder halt doch in einen Override. Dafür müsste man allerdings wissen, in welchem Kontext du dieses Modul einbindest. Ist da im Editor noch Text drumrum oder ist Erwartung tatsächlich, dass nur das Modul je Beitrag geladen wird. Einzelbeiträge gar nicht angezeigt werden sollen. Nur die Blogansicht relevant. So Zeugs.

  • Also es soll wirklich nur das Modul im Beitrag stehen, ohne weiteren Text.

    Und die Beiträge sollen nie richtig angezeigt werden.

    Grundsätzlich bleibt der SVG Code auch gleich wenn ich die Bildernamen durch Variablen ersetzte also aus:

    Code
    1. echo '<image id='.$sphereimage_id.' x="25" y="131" width="415" height="370" xlink:href="/images/Sphere0001.png" style.display="none"></image>';
    2. echo '<image id='.$compleximage_id.' x="25" y="131" width="415" height="370" xlink:href="/images/Complex0001.png" style.display="none"></image>';
    3. echo '<image id='.$flatimage_id.' x="25" y="131" width="415" height="370" xlink:href="/images/Flat0001.png" style.display="block"></image>';

    wird dann:

    Code
    1. echo '<image id='.$sphereimage_id.' x="25" y="131" width="415" height="370" xlink:href='.$sphereimagefile.' style.display="none"></image>';
    2. echo '<image id='.$compleximage_id.' x="25" y="131" width="415" height="370" xlink:href='.$compleximagefile.' style.display="none"></image>';
    3. echo '<image id='.$flatimage_id.' x="25" y="131" width="415" height="370" xlink:href='.$flatimagefile.' style.display="block"></image>';

    Denke aber nicht das es an der Situation viel ändert...


    Kann man das Pferd nicht anders herum aufsatteln und Loadmodule mit Parametern ausstatten?


    Hab mir vorhin mal das Grundgerüst für ein Plugin angeschaut. Sieht auch nicht wesentlich komplizierter aus als ein Modul.

    Kann man ein Plugin auch in einem Beitrag integrieren, oder muss es dann eine Modul / Plugin Kombination sein?

  • Die einfachste Variante ist, du setzt im Beitrag nur ein {doSvg} und arbeitest mit Eigenen Feldern.


    Ganz rudimentärer Plugin-Code für Plugin-Event onContentPrepare:





  • Ich habe es noch etwas einfacher gehalten. Ohne Felder.

    Im Beitrag steht {materialpreview};name=matname;path=matpath

    Dan zerlege ich den String entsprechend und habe alle Werte die ich brauche.

    Hier der Plugin Code:

    Nur an einer Sache hängt es noch. Wo plaziere ich den Script?

    Ich habe schon versucht den Script auch per echo Zeile für Zeile auszugeben, aber ohne Erfolg.

  • Steht eigentlich in meinem Code.

    Zeile 7, 8, 13

    Zeile 16,17


    Du hast dir die Sache halt weitaus komplizierter gemacht als ich vorgeschlagen habe (deine Lösung hat noch weitere Nachteile bzgl. Codemenge und unerwartetem Verhalten). Hab mir schon was bei meinem Vorschlag gedacht ;-)


    Mit str_replace kommst da nicht mehr weiter, sondern musst mit preg_* - Methoden und regulären Ausdrücken arbeiten. Weitaus weniger performant und komplizierter zu coden.

  • Irgendwie bekomme ich keinen Script zum laufen.

    Auch nicht wenn ich die $html fülle.

    Das Auslesen der felder klappt ohne Probleme. Aber der Titeltext wird nie geändert obwohl document.getElementById('.$title_id.').innerHTML="script works"; im Script steht.

    Was mache ich falsch??

  • Da hast die Gänsefüßchen vergessen die das JavaScript braucht um das als Text und nicht als Variable zu interpretieren.

    Code
    1. $html .= 'document.getElementById("' . $title_id . '").innerHTML = "script works";';

    id=ohneGaensefuesschen

    ist zwar in HTML5 erlaubt, aber ich würde trotzdem auch hier die Gänsefüßchen setzen, weil ich mich mit SVG nicht auskenne ;-) und, weil man es an anderer Stelle gern übersieht, wenn das z.B. eine class mit Leerzeichen drinnen ist. Dann sind Gänsefüßchen Pflicht.

    Code
    1. ... id="' . $nodebutton_id . '"...

    Den oberen JavaScript-Fehler hättest du wahrscheinlich über die Webkonsole/Fehlerkonsole/Inspektor/Entwicklerwerkzeuge deines Browsers rausbekommen können ("not defined").

  • Den oberen JavaScript-Fehler hättest du wahrscheinlich über die Webkonsole/Fehlerkonsole/Inspektor/Entwicklerwerkzeuge deines Browsers rausbekommen können ("not defined").

    Du hast natürlich wieder mal vollkommen recht. Im Quellcode inspector ist der Feher ziemlich offensichtlich.

    Jetzt funktioniert alles wie es soll. Nochmal ein dickes Danke!


    Ich markiere das Thema als erledigt, auch wenn die Hälfte davon technisch gesehen im falschen Unterforum ist. ;)