In Artikel gesetzte globale Variable erhält falschen Wert bei Übergabe an Modul

  • Hallo,


    ich habe eine drei-sprachige Webseite. Es geht um einen Kategorieblock, der Artikel immer gleichen Layouts anzeigt.

    Wegen dieses immer gleichen Aufbaus möchte ich den Code in einem "Eigenes Modul" packen und dieses dann im Artikel jeweils aufrufen.

    Der eigentliche Text wird über Sprachvariablen gesetzt, widerum in Abhängigkeit von der Projektnummer.


    Die Projektnummer würde ich also per PHP im Artikel zuweisen, und danach das HTML-Modul aufrufen.

    Das Problem ist, dass der Wert der Variablen nicht richtig übernommen wird.


    Ich habe eine lokale Erzeugung und Wertzuweisung probiert:

    Artikel:

    PHP
    {source 0}
    <?php
    $projectNo = '5';
    ?>
    {/source}
    {loadposition project-item}

    Modul:

    Code
    {source 0}
    <h2><?= JText::_('_HEADLINE'.$projectNo);?></h2>
    {/source}


    Hier wird die Variable zwar im Modul erkannt, erhöht sich der Wert aber im zweiten Artikel um 1 auf 2, wird trotzdem der Text 1_HEADLINE ausgegeben.

    ---

    Ich habe eine globale Erzeugung probiert:

    Artikel:

    PHP
    {source 0}
    <?php
    $app = JFactory::getApplication();
    $app->set('projectNo', '1');
    ?>
    {/source}
    {loadposition project-item}


    Modul:

    PHP
    {source 0}
    <?php
    $app = JFactory::getApplication();
    $projectNo = $app->get('projectNo');
    ?>
    <h2><?= JText::_('_HEADLINE'.$projectNo);?></h2>
    {/source}


    Hier wird die Variable auch erkannt, aber sie erhält bei allen Artikel-Ausgaben den Wert der Variablen der Zuweisung aus dem zuletzt angezeigten Artikel - also bei 8 Artikeln in der Kategorie hat projectNo den Wert 8.


    Das gleiche bei der Verwendung von Session, was mir aber ohnehin komplett unsinnig an dieser Stelle erscheint.


    Ich hoffe, ich konnte das einigermaßen nachvollziehbar ausdrücken.


    Es scheint ein Problem des Renderns zu sein - der Reihenfolge in der die Ausgabe zusammen gebastelt wird - wenn ich das richtig vermute.


    Wie kann ich das beeinflussen oder wie kann ich eine wirklich globale Variable setzen, die dann auch wirklich überall mit ihrem wirklich aktuellen Wert verfügbar ist?


    Ein Eintrag und Abruf per DB erscheint mir zu langsam und würde das Render-Problem vermutlch auch nicht ändern.


    Vielen Dank für Eure Geduld.

  • Kann dir nur sagen, wie ich das machen würde mit ausschließlich Joomla.

    1) Eigenes Modul-Layout "dingsbums.php" als Override ins Template-/html/ des verwendeten Mosuls.

    2) Mit Inhalt:

    PHP
    <?php
    
    defined('_JEXEC') or die;
    
    $style = $attribs['style'];
    $project = str_replace('item', '', $style);
    
    echo 'Projekt ist ' .  $project;

    3) Modul anlegen mit Position "project-item" und im Layout-Feld "dingsbums" wählen.

    4) Im Beitrag brauchst nur noch

    Code
    {loadposition project-item,item5}

    Und fertig. Sollen es mehr Variablen sein, kann man die missbrauchte Style-Angabe ja auch ausbauen und dann im Modul-Layout den style-String zerlegen, ähnlich wie ich das oben zeige.