Modulparameter in der index.php abrufen

  • Hallo zusammen,


    ich möchte es diesmal ganz kurz halten :) ... Ich kann in der index.php mittels folgendem Aufruf:



    Code
    echo ModMeinModul::foo();


    Direkt auf eine Funktion eines Moduls zugreifen, vorausgesetzt es ist eine statische Funktion. Allerdings habe ich damit nicht die Möglichkeit auf die Parameter vom Modul zuzugreifen. In meinem Fall ist die Funktion foo() lediglich wie folgt definiert:



    Code
    static public function foo() { return "Jop..."; }



    Was ist jedoch, wenn ich auf ein Modulparameter zurückgreifen möchte.



    Code
    static public function foo()
    {
        $meinParameter = $params->get('wasAuchImmer');
        return $meinParameter;
    }



    Sowas geht ja nicht, da $params nicht definiert ist. Ich habe ja prinzipiell kein Objekt dieser Funktion. Daher weiß ich nicht, ob das überhaupt geht.
    Jeder Input ist willkommen.

  • Ganz einfach ist das nicht, da je mehrere Module der selben Art verwendet werden könnten. Welche Parameter fragt man also ab, von welchem Modul, das in ModMeinModul abgewickelt wurde.


    Sonst hätte ich plump eine static Variable in die Klasse eingebaut, die die Modul-Parameter beim Aufruf, wenn es gerendert wird, zwischenspeichert, so dass man sie dann in etwa so abfragen kann

    Code
    ModMeinModul::$meineGespeichertenParams;


    Irgendwie braucht man immer die Modul-ID zur eindeutigen Abfrage oder eine Kombination aus Modul-Namen und Titel. Letzteres kann zu Fehlern führen (falsches Modul abgefragt).


    Der ModuleHelper hat dafür ein paar Funktionen dabei.

    Dem

    Code
    getModuleById

    muss man die id als STRING übergeben. Etwas schräg und für mich unerwartet....

  • Kurze Rückfrage. Wann werden die Module den aufgerufen? Naja also prinzipiell ist das für mich recht einfach. Ich bau gerade an einer API für mein Buch bezüglich PayPal. Da haben wir ja diese langen ID`s. Prinzipiell kann ich diese direkt in den Code kopieren, wollte aber diesen Schlüssel im Modul eingeben (im Backend) und dann darauf zugreifen. Das <script> das ich lade, wollte ich nicht in den Body stellen, sondern über die JFactory::addScript(); einbauen. Nur hierfür müsste ich im Head Bereich auf das Modul zugreifen, um diesen Parameter auszulesen.


    Hoff das war verständlich :)
    Alternativen habe ich natürlich viele.

  • Nur der Vollständigkeit halber, noch erwähnt.


    Im PHP, z.B. dem Modul, einzelne Variablen definieren, die in Javascript dann später verwendet werden können:

    Code
    JFactory::getDocument()->addScriptOptions('meinIndividuellerBzeichner',
        array(
            'sagHallo' => 'Ich sage Hallo.',
            'sagGoodbye' => 'Ich sage auf Widersehen',
    ));

    Wenn du dann im Seitenquelltext der Seite nach meinIndividuellerBzeichner suchst, siehst, wie die Variablen von Joomla automatisch im HEAD bereit gestellt werden.


    Jedes nachfolgende JavaScript, was dann auch eine JS-Datei sein kann, kann dann eine der Variablen so verwenden:

    Code
    var meineMeldung = Joomla.getOptions('meinIndividuellerBzeichner').sagHallo;
    
    alert(meineMeldung);
    
    alert(Joomla.getOptions('meinIndividuellerBzeichner').sagGoodbye);

    Diese Variante/Technik findet man im Joomla-Core oft.

  • Kurze Rückfrage:


    Wenn ich in meiner index.php ganz zu Beginn folgende Zeile habe:


    Code
    Factory::getDocument()->addScript('https://www.paypal.com/sdk/js?client-id=foobar');

    Wird diese im Quelltext angezeigt. Verschiebe ich das jetzt in das Modul, dann wird dieses Skript nicht angehängt. Allerdings werden meine Meta-Parameter vom Modul im <head> übernommen:



    Code
    // Im mod_mein_modul.php
    JFactory::getDocument()->addScript('https://www.paypal.com/sdk/js?client-id=foobar');  // Macht nichts
    JFactory::getDocument()->setMetaData('viewport', 'width=device-width, initial-scale=1');
    JFactory::getDocument()->setMetaData('X-UA-Compatible', 'IE=edge', true);


    Erstes macht gar nix. Das Skript wird nicht hinzugefügt.

  • Kurze Frage hierzu noch. Wie bekomm ich gleich den richtigen Pfad zum JS welches sich im Module befindet:



    Code
    JFactory::getDocument()->addScript(__DIR__ . '/js/numericalSchemes.js');  


    __DIR__ resultiert ja im kompletten Pfad, den ich ja nicht benötige. Macht man hier dann immer gleich sowas; quasi ne fixe Angabe des Pfades weil man sowieso weiß, dass sich das Modul immer in diesem Pfad befindet (modules/module-name/).



    Code
    JFactory::getDocument()->addScript('modules/mod_numerical_schemes/js/numericalSchemes.js');