Custom HTML Modul mit Parametern?

  • Hallo,


    für mein derzeitiges Projekt benötige ich ein Modul zur Bildervorschau.


    Dazu habe ich in einem CustomHTML Modul eine SVG erstellt in der drei Buttons und drei Bilder eingebettet sind.

    Per Javascript schalte ich die Sichtbarkeit der Bilder um, je nachdem welcher Button gedrückt wurde.

    Funktioniert soweit auch ganz gut.

    Das Ganze habe ich dann mit Moduleplant (https://extensions.joomla.org/extension/module-plant/) in einem Artikel plaziert.

    Jetzt müsste ich über den Artikel noch einen String für den Namen, und einen String für den Pfad der Bilder an das Modul übergeben.

    Es sollen viele Artikel werden die jeweils die Bilder aus einem anderen Pfad holen.


    Jetzt zu meiner Frage:

    Lässt sich das über die CustomHTML / Modulplant kombination realisieren, oder komme ich um eine eigene Modulentwicklung nicht herum.

    Vielen Dank schon mal im Vorraus.

    Mirko

  • Ich habe seit bei der Versionsnummer noch eine 1 vorne Stand nichts mehr mit Joomla gemacht.

    Bin gerade erst seit ein paar Tagen bei der Version 3.8.8 dabei. Wusste nicht das es mittlerweile so einfach ist ein Modul im Arikel zu haben.


    Mit Custom HTML meine ich mod_custom.

  • Wenn ich den Modulbutton im Editor benutze, und mehrere Artikel mit dem selben Modul habe wird der Modultitle so oft angezeigt wie viele Artikel es mit dem Modul gibt.

    Mit Moduleplant passiert das nicht.

    Allerdings funktioniert Javascript nur im ersten geladenen Modul. Alle anderen Instanzen verweigern ihren Dienst.

  • Modul im Beitrag geht mindestens schon seit J1.0 ;)

    Entweder mit den geschwiften Klammern:

    Code
    {loadmoudule position}

    Oder eben mit dem Button unter dme Editor, was das ganze noch leichter macht. Der Button ist denn auch erst seit J2.5 da.



    Zitat

    Wenn ich den Modulbutton im Editor benutze, und mehrere Artikel mit dem selben Modul habe wird der Modultitle so oft angezeigt wie viele Artikel es mit dem Modul gibt.

    Das verstehe ich nicht. Du meinst aber vermutlich, wnen anschließend eine Blogansicht angezeigt wird?

    Du kannst in den Modulen die ANzeige der Überschriften auch ausschalten.


    Ich denke, das einfachste ist, wenn du mal einen Link postest, damit man sich das mal anschauen kann.



    Axel

  • Jetzt müsste ich über den Artikel noch einen String für den Namen, und einen String für den Pfad der Bilder an das Modul übergeben.

    Du willst im Beitrag Infos hinterlegen, die das Modul dann verwendet. Da bieten sich vielleicht Eigene Felder an. Menü Inhalt > Felder (mit Einstellung "Beiträge") und "Keine automatische Anzeige".


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


    Dann würde ich das so machen:


    - Um ein bisschen (oder mehr) "Modulentwicklung" komm ich nicht drumrum, kann aber vermeiden, ein neues zu programmieren.


    - Ein eigenes Layout für das mod_custom, z.B.

    1) /templates/DEINTEMPLATENAME/html/mod_custom/mein-svg.php

    2) In diese Datei setze ich meinen SVG-Code ein und lasse im Modul selbst den Editor leer.

    3) Im Feld "Layout" der Moduleinstellungen wähle ich "mein-svg."

    4) Das probiere ich dann schon mal aus und wähle ggf. einen anderen System-Modulstil, wenn mir zu viel oder zu wenig HTML-Gerüst drumrum ausgegegeben wird.


    - Dem Modul gebe ich eine erfundene Modulposition "mein-svg"


    - 2 Eigene Felder für Beiträge:

    1) Name

    2) Pfad der Bilder

    3) Diese kann ich dann in Beiträgen füllen.


    - In den Beitrag setzte ich mit Editor-Modul-Button die Position "mein-svg" ein, was dann einen loadposition-Tag in den Editor einsetzt.


    - Mit diesem Code, Post #19, lese ich vor dem SVG-Code meiner "mein-svg.php" meine beiden Felder des gerade angezeigten Beitrags aus:

    Modulname als String in einen URL in einem Modul einbinden.

    - Und setze sie individuell in den SVG-Code ein oder breche frühzeitig ab, wenn im Beitrag diese Daten nicht abgelegt sind.


    Hinweis: Ich denke mir so Sachen selber aus, weil ich schnell was sehen will, und verwende die dann einfach bis Sankt Nimmerlein, aber freue mich natürlich immer, wenn andere mich auf effizientere Umsetzung, z.B. zum Auslesen eigener Felder in Modulen, hinweisen ;)

  • @time4mambo:

    Liegt derzeit lokal auf einem WAMP-Server. Link gibts also keinen.

    Ich habe aber Screenshots gemacht:

    Hier mit Modulplant:


    Und so über den Modul-Button im Editor:



    Re:Later:

    Der Tipp mit den Feldern klingt schon mal gar nicht schlecht.

    Ich habe jetzt mal das mod_custom kopiert und zu mod_material_view gemacht.

    Irgendwie will das aber auch nicht so richtig. Wie im Bild oben wird das Modul immer öfter eingetragen.

    Deswegen geht vermutlich auch Javascript ab dem 2ten Beitrag nicht mehr.


    Die PHP Datei sieht nun so aus:

    Den PHP Teil habe ich, bis auf den Modulnamen, so belassen wie er war. Irgendwelche Ideen wie ich das Modul pro Artikel nur ein mal laden kann??

  • Ich kann auf deinen Schrrenshot lkediglich erkennen, dass du immer wieder einen Holzhintergrund abbildest. Verstehen tue ich nix.


    Spiele das ganze Geraffel auf eine Website hoch, schalte es Offline und lege uns eine Benutzergruppe an, der du den Offlinezugang erlaubst. Die Zugangsdaten schreibst du hier ins Forum und wenn dein Problem gleöst ist, dann löscvhst du die Benutzergruppe wieder.




    Axel

  • Mit Modulplant geht trotzdem der Script nur in dem Modul das als erstes angezeigt wird.

    Also leider nicht wurst.

    Versuche jetzt noch mal per rumtüfteln eine Lösung zu finden. Wenn alles nichts brint kann ich die Seite immer noch hochladen.

  • Jetzt habe ich zumindest herausgefunden wo das Problem liegt.

    Das Modul verwendet in jeder Instanz die Selben ID's. Dadurch funktioniert logischerweise immer nur der zuletzt geladene

    Script.

    Ich denke am besten wäre einen Parameter als Suffix für die ID's festzulegen. Dann muss ich allerdings auch die SVG per PHP generieren.

    Das hat zwar nichts mehr mit der ursprünglichen Frage zu tun, aber ich komme darauf zurück wenn ich eine Lösung für mein

    Script-Problem gefunden habe.

    Bis dahin, vielen Dank an alle Beteiligten. Bis bald...

  • Mit Modulplant geht trotzdem der Script nur in dem Modul das als erstes angezeigt wird.

    Das hast du bisher so explizit nicht erwähnt. Ich dachte wir reden von 1 Modul je Beitragsseite.

    Dann muss ich allerdings auch die SVG per PHP generieren.

    Hast du doch eh schon im PHP-Umfeld.

    Ich denke am besten wäre einen Parameter als Suffix für die ID's festzulegen

    Macht man eigentlich eh immer, wenn man Module pro Seite mehrfach setzen können soll.


    Da die $module->id hier nicht reicht: Siehe auch https://secure.php.net/manual/de/function.uniqid.php

    Basiert auf Millisekunden. Sollte reichen.

  • Ich habe es nicht explizit erwähnt weil ich nicht wusste das es dabei Probleme geben kann.

    Bin nicht gerade der PHP Experte.

    Der Tipp mit uniqid ist wirklich Gold wert! Tausend Dank!

    Jetzt funktioniert es auch grundsätlich, aber ich habe ein anderes Problem.

    Das Modul wird (egal ob über loadmodule oder modulplant) öfter geladen.

    Beim ersten Artikel nur einmal, beim zweiten zwei mal und so weiter.

    Ich wollte eine Abfrage in den Script machen ob das Modul im Beitrag schon geladen ist, aber das EInzige das ich über Google gefunden habe

    war:

    PHP
     <?php if ($this->countModules( 'user1' )) : ?>
    // tue irgendetwas
    <?php endif; ?> 

    Wenn ich versuche die Abfrage einzubauen bekomme ich aber die Fehlermeldung.#0 Using $this when not in object context

    Leider habe ich keine Ahnung an welche Stelle die Abfrage muss und ob es überhaupt die richtige Funktion ist...


    Meine PHP Datei sieht jetzt so aus:

    Danke für eure Geduld :)

  • Vielleicht Themaverfehlung.

    Ich würde 1x die uniqid ziehen und in Variable ablegen.

    Code
    $myuniqid = uniqid();

    und in den Folgezeilen dann in der Art:

    Code
    $title_id="title" . $myuniqid;

    Die echo-Geschichten sowie die <script> in die ansonsten leere default.php auslagern. Die $title_id usw. bleiben dabei erhalten, können dort also weiterverwendet werden.


    Damit die Reihenfolge mal wie normal ist.


    Dann stell mal unter Modulstil im Modul "System > none" ein. Nicht wundern. Das zeigt nicht die Modulüberschrift an.


    Code
    countModules()

    bringt dich nicht weiter. Das liefert keine Aussage darüber, wie oft ein Modul bereits geladen wurde, sondern nur, wie viele Module im Backend einer Modul-Position zugeordnet wurden und auf der aktiven Seite angezeigt werden.


    ???

    Ganz kapiere ich immer noch nicht.

    Du fügst ein und das selbe Modul, das garantiert nur 1x angelegt ist, jeweils nur 1x je Beitrags-Editor ein.

    Und dann gehst du auf eine Seite, die nur 1 Beitrag anzeigt (keine Kategorieansicht oder so), sondern Menütyp "Einzelner Beitrag" oder eine Unterseite eines Menütyps "Kategorie Blog" oder "Kategorie Liste".

    Und Caches sind deaktiviert in Joomla-Konfiguration, sowie Cache-Plugin, sowie in den Meoduleinstellungen.

    ???


    Vielleicht machst mal einen Screenshot des ganzen Bereiches, wo das dann doppelt, dreifach ist.

  • Vielleicht habe ich es nicht richtig erklärt.

    Wenn ich das Modul in einem einzelnen Beitrag anzeige funktioniert alles. Dann ist es auch egal ob man eine uniqid hat oder nicht.

    Mir geht es aber darum in einer Blogansicht die Module anzuzeigen.

    Also ohne das man erst in den Artikel muss. Pro Modul soll man die Vorschaubilder (die später durch Felder pro Artikel festgelegt werden können) umschalten können.

  • Du hast das Problem bereits gelöst ohne das ich es bemerkt habe.

    Du hast geschrieben: Die echo-Geschichten sowie die <script> in die ansonsten leere default.php auslagern.

    Ich hatte ja das mod_custom kopiert.

    Da steht in der default.php

    PHP
    <div class="custom<?php echo $moduleclass_sfx; ?>" <?php if ($params->get('backgroundimage')) : ?> style="background-image:url(<?php echo $params->get('backgroundimage'); ?>)"<?php endif; ?> >
        <?php 
        echo $module->content;
        ?>
    </div>

    Ohne deinem oben genannten Satz wäre ich nie auf die Idee gekommen das mal auszukommentieren.

    Und siehe da nur ein Modul pro Artikel!

    Jetzt kann ich mich wieder der ursprünglichen Frage witmen.

    Ich versuche erst mal so klar zu kommen, aber die Wahrscheinlichkeit ist hoch das ich später noch mal Hilfe brauche.

    Danke nochmal für die Mühe!

  • Man findet ja viele Beispiele um Felder zu benutzen, aber immer ist ein $this im Spiel.

    Damit komme ich nicht klar. Ich weiß nicht wie ich auf den Artikel zugreifen kann in dem das Modul liegt.

    Habe es in der default.php und in meiner mod_material_view.php versucht.

    Oder muss ich die Feldabfrage wo anders hinschreiben?