Urdu Deutsch
English English Deutsch Deutsch Español Español Français Français Italiano Italiano Nederlands Nederlands Português Português Русский Русский Ελληνικά Ελληνικά
Login



 
Willkommen bei Jumi! Tutorial >> >> Eigener Aufruf Formen in einer Joomla! Inhalt

Es gibt eine Menge Leute, die ihre benutzerdefinierten Formularen in einer Joomla veröffentlichen möchten! Inhalte.

Um ihre Bedürfnisse zu erfüllen habe ich beschlossen, dieses Tutorial zu schreiben. Das Tutorial ist auf Joomla gewidmet! 1.0.x Codierung Anfänger, sondern Zwischenzertifizierungsstellen kann ein paar Tricks gefunden nützlich.

In diesem Schritt für Schritt Anleitung lernen Sie,

  • was selbst Colling Formen sind und zu welchem ​​Zweck sie dienen,
  • einige nützlichsten PHP und Joomla! 1.0.x Tricks, die für sich selbst Berufung Formen sind. Z. B.:
    • , wie ein Skript fängt, dass ein Benutzer Daten gesendet werden,
    • Wie erkenne ich einen URL-Adresse, unter der das Skript ausgeführt wird,
    • wie zum Ausschalten des spezifischen Joomla! Seiten-Cache ab,
    • was Joomla! bestimmtes Objekt $ database, $ sind meine, wo sie ihre Methoden und ihre Beschreibung zu finden,
    • usw.

Was selbst Berufung Formen sind und zu welchem ​​Zweck sie dienen

Jede Form speichert einige Daten von Respondern.

Die gesammelten Daten nicht in einer Form zu bleiben, aber sie sind - in der Regel nach dem Drücken Submit-Button - irgendwo geschickt. Nach Vorverarbeitung möglich - - schreibt Daten in die Datenbank oder / und sendet sie an eine E-Mail-Adresse Sie werden bis zu einem gewissen Verarbeitung Skript, das "sitzt" auf eine andere URL-Adresse und diesem übergeben.

Dies ist die häufigste Methode. Und auf diesem Ansatz beruhen Standard Joomla! Formen Komponenten.

Aber es möglich ist, ohne Formen Komponente leben, ist es möglich, unsere eigenen Formen müssen in ein Content-Artikel aufgenommen werden. Formulare können erhobenen Daten zur Selbsthilfe zu senden und zu verarbeiten. Sie werden so genannt, selbst Berufung Formen.

Es ist sogar möglich noch mehr: um die Ergebnisse in Form gleichem Inhalt Artikels anzeigen.

In diesem Tutorial zeige ich Ihnen wie.

Da muss es einen PHP-Script gibt, die mit Formulardaten manipuliert werde ich Gebrauch von Jumi-Plugin für die Aufnahme dieser Skripte in den Inhalt zu machen. Sollten Sie es vorziehen einen anderen Plug-in für PHP-Skript Aufnahme in Joomla! Inhalte können Sie es auch verwenden.

Demo Formularbeschreibung

Obwohl die folgende Demo-Form ist sehr konkret können Sie schreiben jedes Formular, das Sie durch den Ansatz in diesem Tutorial erklärt sich vorstellen können.

Machen Sie keine Tests auf Ihrer öffentlichen Produktions-Server, sondern auf Ihrem lokalen Host nur!

Nehmen wir an, wir wollen

  • ein Wahlzettel, die Antworten auf 3 gegenseitig ausschließen Fragen sammelt,
  • Antworten in einer Datenbank zusammen sparen mit Datum und Uhrzeit der Antwort und zusammen mit einer Benutzer-Identifikation,
  • um "Danke" Ankündigung und Zusammenfassung der Ergebnisse zeigen aber ausschließlich für diejenigen Nutzer, die gewählt haben.

Grundlegende Strategie

Splitten Sie den Code in mehrere Teile, funktionale und logische Blöcke bietet viele Vorteile. Obwohl ich nicht die Vorteile diskutiert wird hier werde ich diese allgemeine gute Praxis hier zu folgen.

Es gibt zwei wesentliche logische Blöcke in unserer Aufgabe:

  • zeigen, bilden + + sammeln Daten zu verifizieren + Speichern von Daten in eine Datenbank (Selbst Berufung Formular)
  • Lesen von Daten aus einer Datenbank und zeigen die Ergebnisse.

Also werde ich unsere Anwendung in zwei Skript-Dateien zu spalten: self_call_form.php und show_results.php.

Wir werden in die Details im folgenden gehen.

Aber lassen Sie uns mit einer Datenbank zum ersten Mal starten.

Datenbank

Lassen Sie unsere Datenbank Name der Tabelle ist xxx_mytable_test wobei xxx für Ihre Joomla! Datenbank-Präfix. Einige Joomla! Benutzer haben Jos Präfix andere haben MOS-Präfix. Ich werde Jos Präfix im folgenden annehmen.

Ich wiederhole unsere Aufgabe ist das Aufzeichnen von Datum und Uhrzeit, Benutzer-Identifikation und eine Antwort zu speichern.

Ohne auf die MySQL-Datenbank und Tabellen-Design Details, die an anderer Stelle gefunden werden kann die Struktur der Tabelle in MySQL Sprache beschrieben werden:

CREATE TABLE IF NOT EXISTS `jos_mytable_test` (
`Id` int (11) NOT NULL AUTO_INCREMENT,
`Recordtime` datetime NOT NULL default '0000-00-00 00: 00: 00',
`User_id` varchar (15) NOT NULL default 'host',
`Beantworten` int (6) NOT NULL default '0',
PRIMARY KEY (`id`)
) TYPE = MyISAM;

Das Feld ID wurde nur für die Tabelle Datensatz eindeutige Identifikation hinzugefügt.

Sie müssen die Tabelle in Ihrer Joomla-Datenbank zu erstellen. Stellen Sie sicher, dass Ihr Präfix jos_ ist. Wenn es noch mos_, ändern Sie den Tabellen-Präfix.

Sie können eine Tabelle über phpMyAdmin entweder manuell oder automatisch durch copy-paste von der MySQL-Anweisung oben zu schaffen.

Ich nehme die Tabelle jos_mytable_test ab jetzt erstellt wird.

self_call_form.php

Es gibt grundsätzlich zwei Methoden, mit denen eine Form kommunizieren mit ihrer Umgebung: POST und GET. GET sendet (und liest) Daten aus URL-Anhang. Wir verwenden hier GET-Methode.

POST-Methode schreibt Daten auf globale PHP-Variable $ _POST. So haben wir vollen Zugriff auf die Daten gesendet hier.

Allgemeine Algorithmus der self_call_form.php

Wenn es keine relevanten Daten in $ _POST sind, dh es gibt keine Antwort von einem Benutzer, dann zeige Form. Wenn der Benutzer beantwortet, dann danke ihm und schreiben Sie die Antwort (und andere Daten) in die Datenbank.

Der obige Algorithmus in PHP-Sprache übersetzt sieht aus wie diesem Code:

Funktion self_form()
 // Optionsfeldname (hier "Antwort") muss auch ein Spaltenname in einer Datenbank sein !!!
{

 $ Anker = "myform"; / / Die Variable $ Anker werden wir später noch brauchen
 Echo "" ""; / / HTML-Anker die wir später noch brauchen
 Echo "" ""; / / Formular-Container

 if(!isSet($ _POST["Antwort"])) / / Wenn es keine Antwort schreiben dann die Form
 {
  $ Return_url = Get_return_url($ Anker);
  Echo "" "";
  Echo "" Haben Sie dieses Tutorial hilfreich gefunden? "";
  Echo "" Definitiv nein.\n";
  Echo "" So so.\n";
  Echo "" Ja. Danke dafür.\n";
  Echo "" "";
  Echo "" "";
 }

 sonst / / Wenn es eine Antwort danken und schreiben Sie die Antwort in die Datenbank
 {
  Echo " Danke für Ihre Abstimmung ";
  write_data($ _POST["Antwort"]);
 }

 Echo "" "";
}

Die Erklärung und ein paar Tricks

PHP-Funktion isset ("Antwort") prüft Wetter "Antwort" existiert in $ _POST.

Wir wollen, dass das Formular, um Daten an sich selbst senden. Das heißt, auf den gleichen URL-Adresse (Form und ihrer Verarbeitung Skript kann unter der gleichen URL zu finden). Wir können hart codierte URL-Adresse einer Seite oder, wie in unserem Fall, können wir die URL von Joomla Umwelt gelangen mit einem einfachen Trick. Mit dem Trick ist besser als der erste hart codierten Ansatz, weil unser Code ist wiederverwendbar in verschiedenen Seiten ist jedoch ohne Berührung.

So, hier kommt der Trick in der Funktion get_return_url ($ Anker) enthalten sind.

Get_return_url Funktion ()
Funktion get_return_url($ Anker)
{
 if ($ QUERY_STRING = MosGetParam( $ _SERVER, 'QUERY_STRING', '' ))

 {
  $ Zurück = 'Index.php?' . $ QUERY_STRING;
 }
 sonst
 {

  $ Zurück = 'Index.php';
 }
 / / Ein URL beginnt mit index.php jetzt
 
 // Konvertieren von & nach & für xtml-Konformität

 $ Zurück = str_replace( '&', '&', $ Zurück );
 / / Hinzufügen von Anker bis zum Ende der URL

 $ Zurück .="# $ anchor"; / / Hinzufügen Anker zu url
 / / Prepand http:// dem Anfang der URL
 Rückkehr sefRelToAbs($ Zurück);

}

Es gibt keine Wunder in ihm. Die Funktion liefert nur URL-Adresse, wo es läuft (in unserem Formular). Inklusive den Anker.

Warum habe ich die (HTML) Anker in die Absender-Adresse enthalten?

Stellen Sie sich vor, dass unser Formular am Ende eines sehr langen Seite ist. Wenn es nicht für den Anker dann nach dem Senden von Daten Anwender sehen den oberen Rand der Seite und hat nach unten zu scrollen. Mit Verankerung Benutzer wird an den Ort, den er gewählt werden, zurückzukehren.

Ich will Sie darauf aufmerksam zu machen Joomla! spezifische Funktion mosGetParam () zu. Es ist die nützlichste Funktion. Und sollten Sie bildet in intensiver genutzt werden.

Die allgemeine Beschreibung der mosGetParam () gefunden werden kann hier. Eines der praktischen Anwendung folgt:

Anstelle der Verwendung von:

$ _POST ['Somename']

Es ist besser zu nutzen:

mosGetParam ($ _POST, 'somename')

weil es nicht nur einige Trimmen unerwünschter Benutzereingaben aber es gibt einige andere nützliche Optionen in ihm.

Allerdings, wenn Sie viele Daten verarbeitet werden müssen, kann sehr viel Zeit in konsumtive, um alle Werte aus $ _POST eins nach dem Rücktritt sein: entweder durch direkte Zugriff auf sie oder über mosGetParam ()-Funktion. Es ist ein weiterer Trick: Verwendung von PHP-Funktion extract ($ _POST), die Variablen baut und weist sie Namen von allen Inhalten von $ _POST.

Beachten Sie, wir verwenden $ _SERVER in der Funktion get_return_url (). $ _SERVER Ist ein weiteres PHP globale Variable wie $ _POST und kann von einem gewissen Einsatz in Ihren Skripts zu sein. Wenn Sie nicht wissen, den Inhalt von Variablen können Sie sie in Ihre Skripte mit var_dump ($ somoevaribale) Funktion zu zeigen.

Function checkForm ()

Dies ist die Validierung Javascript-Funktion, die Benutzereingaben gegen einige Regeln validiert. Das E-Mail ist wirklich eine E-Mail-Adresse, der Name ist, dass nicht leer, etc.

Nochmals: Sie können verschiedene Validierungsskripts auf hunderten Internet-Quellen zu finden.

In unserem Demo-Form werden wir überprüfen, dass Benutzer eine "Antwort" Radio-Button ausgewählt. Wenn es keine "Antwort" werden keine Daten, sondern zeigen eine Warnung:

<SCRIPT type="Text / Javascript">
Funktion checkForm(theForm) {
 jung warum = "";
  die (i=0;; ich) {

   if (theForm.answer[i]. Geprüft) {
    jung CheckValue = theForm.answer[i]. Wert;
     brechen;
    }
  }

  Warum + = checkRadio(CheckValue);
  if (warum! = "") {
   Warum + = "\nWenn Sie denken, dass es unser Fehler ist, lassen Sie es uns bitte wissen. ";
   alarmieren(warum);
   Rückkehr falsch;
  }

  Rückkehr was immer dies auch sein sollte.;
}
 
Funktion checkRadio(CheckValue) {
 jung Fehler = "";
  if (!(CheckValue)) {

   Fehler = "Sie haben keine Option ausgewählt.\n";
   }
   Rückkehr Fehler;
}
->

Es gibt keine Tricks und keine Wunder hier, also lasst uns zu den Schreiben von Daten in der Datenbank zu gehen.

Write_data Funktion ()

Sie können viel Zeit ersparen, wenn Sie Joomla! Objekte und Methoden anstelle von Standard-MySQL-Datenbank-Funktion. Ich meine mit Datenbank-> load ..., Datenbank-> query, etc. können sehr anschaulich Handbuch hier.

Funktion write_data($ Value)
/ / Wenn der Benutzer seine save ID angemeldet ist nichts anderes zu retten 'host'

{
 globale  $ Database, $ My;
 if ($ My->id)
  $ User_id = $ My->id;
 sonst

  $ User_id = "Gastgeber";
 $ Database->setQuery( "INSERT INTO #__mytable_test (ID, Aufnahmezeit, Benutzer-ID, Antwort) VALUES ('', '". Datum('Y-m-d H: i: s')."','".$ User_id."','".$ Value."');" );
 $ Database->query(); / / Schreiben von Daten

}

Nichts Interessantes hier außer globalen Joomla! Variable $ meine. Es enthält Benutzer-ID, Name, seine E-Mail usw. Auch hier: Versuchen Sie var_dump ($ my) in Ihrem Code verwenden, und Sie werden die Struktur und den Inhalt zu sehen.

Validating-Abfrage:

Ich habe noch keine Bestätigung, dass die Daten tatsächlich geschrieben wurde, enthalten. Sie können es tun, wenn Sie wollen. Ersetzen Sie einfach die Zeile $ database-> query (); durch
if (!$ Database->query()) { / / Schreiben von Daten und im Fehlerfall Alarm

  Echo "" alert('".$ Database->getErrorMsg()."'); "";
 }

So haben wir alle Bausteine ​​unseres Selbst aufrufende Formular jetzt.

Sie können es sofort versuchen (vorausgesetzt, Sie haben jos oder mos_mytable_test Tabelle erstellt).

Aber es gibt noch eine Sache ...

Nicht für uns alle das Verhalten der Anwendung wird als allgemein erwartet werden: Nach Absenden des Formulars wird immer noch sichtbar und es wird kein "Danke" Ankündigung sein.

Dies wird für diejenigen, deren Joomla auftreten! Cache ist eingeschaltet.

Und noch ein Trick: Abschalten des gesamten Joomla-Cache ist einfach, aber das Abschalten der Cache für einen der Joomla-Seiten scheint das Problem sein.

Das große Problem mit sehr einfache Lösung.

Der Cache-Hack wurde beschrieben Joomla! Forum:

Bearbeiten / includes / Cache / Lite.php
Du wirst sehen "-Funktion save ($ Daten ..."
Übernehmen

Funktion Speichern($ Data, $ Id = NULL, $ Gruppe = 'Default')

{
 if ($ This-> _ Caching) {

zu

Funktion Speichern($ Data, $ Id = NULL, $ Gruppe = 'Default')

{
 if(strpos($ Data,' ') ! == falsch) {
  $ This-> _ caching = 0;
 }

 if ($ This-> _ Caching ) {

Erstellen Sie dann ein Modul mit


im Körper, und veröffentlichen Sie es auf jeder Position angezeigt (Die Nutzer werden es nicht sehen) ... Dann einfach ermöglichen, dass die Modul auf jeder Seite Sie nicht wollen, zwischengespeichert ...

Ich bin nur hinzu, dass "nocache-Richtlinie" in den Inhalten enthalten kann als gut.

Zusammenfassung der self_call_form.php

Es gibt also der gesamte Inhalt der self_call_form.php:


definiert( '_VALID_MOS' ) or sterben( 'Eingeschränkter Zugriff' ); / / Aus Sicherheitsgründen

?>
<SCRIPT type="Text / Javascript">
Funktion checkForm(theForm) {
 ...
}
Funktion checkRadio(CheckValue) {

...
}
->

 


Funktion self_form()
{
...

}
Funktion get_return_url($ Anker){
 ...
}
Funktion write_data($ Value){
...
}
 

/ / Executive-Code beginnt hier
self_form();
/ / Executive-Code endet hier
?>

NB: das ganze Skript wird "verpackt" in der Exekutive self_form ()-Funktionen. Keine Skript-Variablen werden außerhalb aller Funktionen definiert, so besteht keine Gefahr, die Variablen mit anderen 3rd Partei oder Joomla interagieren! Variablen in einer unvorhersehbaren Art und Weise.

Uff ...

Das ist alles für das Selbstverständnis Berufung Form: Show-Formular + + sammeln Daten zu verifizieren + Speichern von Daten in einer Datenbank.

Jetzt in Ihrem Artikel schreiben

{Jumi [somepathway / self_call_form.php]}

und testen Sie es.

Zuerst werden Sie sehen,

Jumi Formulareingabe

und nach Ihrer Wahl (nur nach Abstimmung) Sie können das Ergebnis des zweiten Teils (show_results.php):

Jumi Formularausgabe

Der zweite Teil - die Darstellung der Ergebnisse aus der Datenbank zu erhalten - ist viel einfacher als der vorherige Teil.

show_results.php


definiert( '_VALID_MOS' ) or sterben( 'Eingeschränkter Zugriff' );

 
Funktion show_results()
{
 globale  $ Database;
 Echo "" ""; / / Nicht notwendig, aber nützlich, hier

 $ Radios_name = "Antworten"; / / Muss eine Spalte in einer Datenbank zu sein!
 if(isSet($ _POST[$ Radios_name])) {/ / Ergebnisse zeigen für diejenigen, die nur gewählt
  Echo "" "";
  Echo "" Dieses Tutorial war "";
  $ Database->setQuery( "SELECT $ radios_name, COUNT (id) AS numitems FROM #__myform_test GROUP BY $ radios_name");
  $ Rows = $ Database->loadObjectList();
  foreach ( $ Rows as $ Row ){ / / Zu Fuß durch Antworten

   wechseln ($ Row->beantworten){
    Häuser 1:
     Echo "nicht nützlich für".$ Row->numitems."Leser,\n";
    brechen;
    Häuser 2:
     Echo "so so nützlich für".$ Row->numitems."Leser und\n";
    brechen;
    Häuser 3:
     Echo "sehr nützlich für".$ Row->numitems."Leser\n";
    brechen;
    Standard:
   }

 }
 Echo "" "";
 }
}
show_results();
?>

Jetzt schreiben Sie in Ihre Inhalte nur im Rahmen der vorangegangenen Jumi-Plugin Erklärung:

{Jumi [somepathway / show_results.php]}

und testen Sie es.

Ich glaube nicht, es gibt viel, um Erläuterungen zu manipulieren, außer Datenbank-und Reihen-Objekte. Noch einmal: gehen Sie zu Joomla! API-Beschreibung.

Fazit

Alles wurde gelöst, alles, was geschrieben wurde. Sie können das ganze Skript hier.