1. Modul-Entwicklung: Frontend Eingabefeld mit Ausgabe im Frontend

  • Hallo liebe Mitglieder,
    ich bin neu hier, auch neu in der Joomla-Welt und schon habe ich die erste Frage, welche sich um die Modul-Entwicklung dreht.


    Um die Module-Erstellerung zu verstehen habe ich bereits das Simple Module vom joomla-Tutorial durchgemacht.
    https://docs.joomla.org/J3.x:C…Developing_a_Basic_Module


    Der nächste Schritt in den Tutorials geht mir jedoch viel zu weit (Datenbankzugriff).


    Ich möchte für meine Test-Joomla-Seite ein Module entwickeln, welches mir ein Eingabefeld im Frontend anzeigt, hier schreibe ich einen Laufwerkspfad rein und via Button „senden“ wird dieser Pfad an eine Funktion geschickt, welche aus mir aus dem Pfad sämtliche Dateien auflistet.


    In PHP direkt habe ich diese Funktion und Seite letztlich schon geschrieben und sie funktioniert.


    Jetzt möchte ich diese Funktion in ein Modul für joomla packen.
    Leider komme ich gerade nicht weiter.


    Die reine PHP-Funktion/Seite ist diese hier:



    Ich habe nach meinen Überlegungen die reine PHP-Funktion (Übernahme Pfad und Generierung des Strings (beinhaltet Namen der im Pfad enthaltenen Dateien) für die spätere Ausgabe in die helper.php geschrieben.
    Code der helper.php:


    Meine mod_test2.php Eintrittspunkt-Datei beinhaltet diesen Code:


    PHP
    <?php/** * Dateiauflister Module Entry Point *  * @package    Joomla.Tutorials * @subpackage Modules * @license    GNU/GPL, see LICENSE.php * @link       http://docs.joomla.org/J3.x:Creating_a_simple_module/Developing_a_Basic_Module * mod_helloworld is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses. */ // No direct accessdefined('_JEXEC') or die;// Include the syndicate functions only oncerequire_once dirname(__FILE__) . '/helper.php'; $ausgabevariable = modTest2::getDatei($uebergabe);//$hello = modHelloWorldHelper::getHello($params);require JModuleHelper::getLayoutPath('mod_test2');



    Meine default.php (Ausgabedatei im tmpl-Verzeichnis des Moduls) habe ich mit dem Eingabefeld als HTML-Formular und dem Button versehen.
    Ebenso erfolgt im PHP-Tag die Übergabe des Pfades in eine Variable und die Ausgabe der Ausgabevariable.
    Die default.php im tmpl-Verzeichnis (Ausgabe Frontend) beinhaltet diesen Code:

    PHP
    <?php // No direct accessdefined('_JEXEC') or die; ?><h1>Pfadangabe</h1><p>Bitte den Pfad zur Datei angeben</p><form action="default.php" method="post"> <p>Dateipfad: <input type="text" name="pfad" /></p> <p><input type="submit" /></p></form><?php $uebergabe=$_POST['pfad'];echo $ausgabevariable;?>


    Zur Vollständigkeit meine mod_test2.xml Inhaltsbeschreibung:



    Im Frontend wird mir, nach Installation und Konfiguration des Moduls, zwar das Eingabefeld und der Button angezeigt, jedoch erhalte ich Fehlermeldungen und es funktioniert letztlich nicht - obwohl es ohne CMS in PHP funktionierte.
    Fehler:

    Zitat

    Notice: Undefined variable: uebergabe in C:\inetpub\wwwroot\Joomla\modules\mod_test2\mod_test2.php on line 20




    Mein Modul-Ordner "mod_test2)beinhaltet die Strukur:

    • tmpl-Verzeichnis/index.html (blanko Seite wegen Sicherheitsaspekt)
    • tmpl-Verzeichnis/default.php (Ausgabe PHP-Seite)
    • helper.php (Berechnung)
    • index.html(Blanko-Seite Sicherheitsaspekt)
    • mod_test2.php (Verknüpfungsphp für joomla)
    • mod_test2.xml (Beschreibungsxml für joomla) welche auch als vorlage für eine Intranetseite dienen soll, welche die Möglichkeit bietet Usern im Frontend Dateienhochzuladen und anzuzeigen.

    Wo liegt der Fehler?
    Bzw. wo rufe ich meine PHP-Funktion auf, wo übergebe ich ihm die Variable des Eingabefeldes, wo kann ich die Berechnung ausgeben bzw. wo liegen die Verknüpfungspunkte?


    Ich habe leider kein Tutorial gefunden, welches z. B. als Modul im Frontend ein Eingabefeld anzeigt, der User kann dort etwas reinschreiben, via Button wird die Eingabe im Frontend als HTML-Ausgabe wieder ausgegeben und ggf. mit einem Datum versehen (damit in helper.php irgendwas berechnet wird und ggf. Übergabevariablen behandelt werden).
    Leider greifen die bisherigen Tutorials entweder nur "Hallo Welt" auf oder aber führen mit Datenbankanbindung/auslesung etc. zu weit.


    Um Hilfe wäre ich für diesen Einstieg sehr dankbar.
    Beste Grüße
    Maximilian

    Edit by @Indigo66: Langen Code im Spoiler formatieren.

  • das ist schon mal falsch woher soll denn die '$uebergabe' Kommen du wirst hier auch ein notis Meldung beckommen.

    Code
    $ausgabevariable = modTest2::getDatei($uebergabe);


    du musst $params übergeben das kommt von Joomla direckt

    Code
    $ausgabevariable = modTest2::getDatei($params);


    und diene werde holst du dir Über;

    Code
    $dir=$params->get('pfad', 'opsolaner default wert');


    alternativ kannst du auch

    Code
    $params->getString();


    Code
    $params->getInt();


    Code
    $params->getArray;


    benützen

  • Du hast mehrere Denkfehler.


    Der gravierendste:
    Zuerst wird mod_test2.php ausgeführt, dann erst default.php. Eine Variablenermittlung $uebergabe in default.php wird deshalb nie in mod_test2.php ankommen.
    Den Teil musst also nach mod_test2.php verschieben (wenn du bei deinem eingeschalgenen Weg bleiben willst) und anschließend kann default.php das dann ausgeben.
    (Ich würde die POST-Abfrage wahrscheinlich gleich in die helper.php verschieben, weil dann kannst die modTest2::getDatei() sowohl in der mod_test2.php als auch default.php direjt und ohne Übergabeparameter aufrufen. Dabei auch gleich prüfen, ob der POST-Wert überhaupt existiert und ggf. abbrechen.


    Und wegen Hinweis zu $params oben. $params enthält NICHT Formulardaten, die im Frontend eingegeben wurden, sondern Konfigurationsdaten des Moduls.
    Klar könnte man in $params temporär auch den im Frontend eingeg. Pfad ablegen. (Muss man aber bei diesem Code-Schnipsel nicht, da getDatei() sowieso keine weiteren Konfigurationsparameter verwendet.

    Code
    $params->set('uebergabe', $_POST['pfad']);$ausgabevariable = modTest2::getDatei($params);


    und kannst dann wie Robox schreibt in getDatei() auslesen.


    Das hier wird nebenbei ziemlich sehr vermutlich auch nicht funktionieren, da du die deafult.php des Moduls gar nicht direkt aufrufen kannst, selbst wenn der Pfad stimmen würde, was er nicht tut

    Code
    <form action="default.php" method="post">


    Du musst unter der action den Pfad der aktuellen Seite hinterlegen, wo das Modul angezeigt wird. Gar nichts geht glaub ich auch.


    Und noch als Tipp, da arbeiten mit $_POST in Joomla "unschön" ist: So macht man korrekt und hat den Vorteil, dass man $_POST['xaz'] gar nicht mehr prüfen muss, sondern einfach einen leeren Wert als Defaultwert eintragen kann und Joomla prüft für dich.
    https://docs.joomla.org/Retrieving_request_data_using_JInput

  • $_POST alleine ohne entsprechende Überprüfung wird so auch nicht Funktionieren das hat aber nichts mit joomla Zutun sondern hat mit php.

    Code
    $params->set('uebergabe', $_POST['pfad']);


    am einfachsten machst du das mit

    Code
    $app = JFactory::getApplication();
    $app->input->get('name', ''Defaultwert');