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:
<html><h1>Pfadangabe</h1><p>Bitte den Pfad zur Datei angeben</p><form action="indexphp.php" method="post"> <p>Dateipfad: <input type="text" name="pfad" /></p> <p><input type="submit" /></p></form><?php//Fehler anezigen:ini_set('display_errors', 1);error_reporting(E_ALL);//Pfadeingabe-Formular in Variable übernehmen:$uebergabe=$_POST['pfad'];//Funktionsaufruf und Ausgabe des Inhalts:echo Dateiausgabe($uebergabe);function Dateiausgabe($dir){ //Prüfung: Wenn Übergebener String kein Verzeichnis ist: Ausgabe leerer String: if (!is_dir($dir)) { return ''; } //Variable mit leerem String generieren: $ausgabe =''; //Speichern des Pfad-/Ordner-Inhalts in ein Array $inhalt=scandir($dir); //Durchlaufen des Array und speichern des aktuellen Elements in Variable $ele)foreach($inhalt as $ele) { if($ele=='.' OR $ele=='..') { continue; } //Ausgabe des Elements als Listenpunkt in HTML if (is_dir($dir.'/'.$ele)) //Prüfen ob Element ein Verzeichnis ist { continue; } //Es sollen nur PDF-Dateien und Word-Dateien ausgegeben werden (Test): if (strtolower(pathinfo($dir.'/'.$ele,PATHINFO_EXTENSION))=='pdf' OR strtolower(pathinfo($dir.'/'.$ele,PATHINFO_EXTENSION))=='doc' OR strtolower(pathinfo($dir.'/'.$ele,PATHINFO_EXTENSION))=='docx') { if (is_file($dir.'/'.$ele)) //Prüfen ob Element ein File ist { $ausgabe .='<li><a href="'.$dir.'/'.$ele.'">'.$ele.'</a></li>'; } } } if($ausgabe) { $ausgabe ='<ul>'.$ausgabe.'</ul>'; } return $ausgabe;}?></html>
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:
<?php/** * Helper class for Dateiauflister module * * @package Joomla.Tutorials * @subpackage Modules * @link http://docs.joomla.org/J3.x:Creating_a_simple_module/Developing_a_Basic_Module * @license GNU/GPL, see LICENSE.php * 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. */class modTest2{ /** * Empfängt Übergabestring für den Pfad und schreibt als HTML-String Auflistung der Dateien * * @param array $params An object containing the module parameters * * @access public */ public static function getDatei($params) { //Wenn Übergebener String kein Verzeichnis ist: Ausgabe leerer String: $dir=$params; if (!is_dir($dir)) { return ''; } //Variable mit leerem String: $ausgabe =''; //Speichern des Inhalts in Array $inhalt=scandir($dir); //Durchlaufen des Array und speichern des aktuellen Elements in Variable $ele) foreach($inhalt as $ele) { if($ele=='.' OR $ele=='..') { continue; } //Ausgabe des Elements als Listenpunkt in HTML if (is_dir($dir.'/'.$ele)) //Prüfen ob Element ein Verzeichnis ist { continue; } if (strtolower(pathinfo($dir.'/'.$ele,PATHINFO_EXTENSION))=='pdf' OR strtolower(pathinfo($dir.'/'.$ele,PATHINFO_EXTENSION))=='doc' OR strtolower(pathinfo($dir.'/'.$ele,PATHINFO_EXTENSION))=='docx') { if (is_file($dir.'/'.$ele)) //Prüfen ob Element ein File ist { $ausgabe .='<li><a href="'.$dir.'/'.$ele.'">'.$ele.'</a></li>'; } } } if($ausgabe) { $ausgabe ='<ul>'.$ausgabe.'</ul>'; } return $ausgabe; }}
Meine mod_test2.php Eintrittspunkt-Datei beinhaltet diesen Code:
<?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 // 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:
<?xml version="1.0" encoding="utf-8"?>
<extension type="module" version="3.1.0" client="site" method="upgrade">
<name>Dateiauflister</name>
<author></author>
<version>1.0.0</version>
<description>Dateiauflister</description>
<files>
<filename>mod_test2.xml</filename>
<filename module="mod_test2">mod_test2.php</filename>
<filename>index.html</filename>
<filename>helper.php</filename>
<filename>tmpl/default.php</filename>
<filename>tmpl/index.html</filename>
</files>
<config>
</config>
</extension>
Alles anzeigen
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:
ZitatNotice: 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.