Sine de asteptare formulare într-un Joomla! conţinut - tutorial

Există o mulţime de oameni care doresc să publice formele lor particularizate într-o Joomla! de conţinut.

Pentru a răspunde nevoilor lor am hotarat sa scriu acest tutorial. Tutorialul este dedicat Joomla! 1.0.x codare incepatori, dar cele intermediare, care pot găsit unele trucuri utile, de asemenea.

În acest pas cu pas tutorial vei invata

  • ce forme de sine Colling sunt şi în ce scop pe care le deservesc,
  • unele php cele mai utile şi Joomla! 1.0.x trucuri care sunt relevante pentru forme de asteptare de sine. De ex:
    • cum un script capturile că un utilizator a trimis date,
    • cum să recunoască o adresă URL la care script-ul ruleaza,
    • cum pentru a opri specifice Joomla! cache-ul de pe pagina,
    • ce Joomla! obiect specific bazei de date $, $ mele sunt, în cazul în care pentru a găsi metodele şi descrierea lor,
    • etc

Ce forme de asteptare de sine sunt şi cu ce scop pe care le deservesc

Fiecare formular colectează anumite date din răspuns.

Datele colectate nu rămân într-o formă, dar acestea sunt - de obicei, după apăsarea butonului submit - trimis undeva. Acestea sunt trimise la unele script de prelucrare care "sta" pe altă adresă URL şi că - după preprocesare posibil - scrie date în baza de date sau / şi le trimite către o adresă de e-mail.

Aceasta este abordarea cea mai comună. Şi pe care se bazează abordarea standard de Joomla! forme de componente.

Dar este posibil să trăieşti fără forme componente, este posibil să aibă formularele noastre proprii pentru a fi incluse într-un articol de conţinut. Formularele pot trimite datele colectate la sine şi le prelucrează. Ele sunt aşa-numitele forme de asteptare de sine.

Este chiar posibil chiar mai mult: pentru a afişa rezultatele în formularul articol acelaşi conţinut.

În acest tutorial am vă va arăta cum.

Pentru că trebuie să existe unele script php acolo, care manipuleaza cu datele din formular, voi face uz de plugin Jumi pentru aceasta, inclusiv script-urile în conţinut. În cazul în care preferaţi orice alt plugin pentru includerea script PHP în Joomla! conţinutul pe care îl puteţi folosi, de asemenea.

Demo formă descriere

Deşi formularul de demo-ul următor este foarte concret puteti scrie orice formă vă puteţi imagina de abordare a explicat în acest tutorial.

Nu face teste de pe server-ul dvs. de producţie publice, dar pe host-ul local numai!

Să presupunem că ne-o dorim

  • un formular de vot care colectează răspunsuri la 3 întrebări care se exclud reciproc,
  • pentru a salva răspunsuri într-o bază de date, împreună cu data şi ora de răspuns şi de identificare, împreună cu un utilizator, a
  • pentru a arăta "multumesc" si anuntul rezumat al rezultatelor, dar numai pentru acei utilizatori care au votat.

Strategia de bază

Divizarea codul în mai multe bucăţi, blocuri funcţionale şi logice oferă multe avantaje. Deşi eu nu va discutat avantajele aici mă va urma această practică generală bună aici.

Există două blocuri principale logice în sarcina noastră:

  • arată formularul de colectare a datelor + + + verificaţi-le salvaţi de date într-o bază de date (formular de asteptare auto)
  • citeşte datele dintr-o bază de date şi arată rezultatele.

Asa ca am va împărţi a aplicaţiei noastre în fişiere script două situaţii: self_call_form.php şi show_results.php.

Vom intra în detalii în următoarele.

Dar permiteţi-ne să înceapă cu o prima bază de date.

Bază de date

Să numele nostru tabelul bazei de date este xxx_mytable_test unde xxx reprezintă pentru Joomla! prefixul bazei de date. Unele Joomla! utilizatorii au Jos alţii au MOS prefix prefix. Eu va asuma prefix de Jos în următoarele.

Repet, sarcina noastră este de a stoca data de înregistrare şi de timp, de identificare a utilizatorului şi un răspuns.

Fără a intra în baza de date MySQL si detalii de design de masă, care poate fi găsit în altă parte structura a tabelului descris în limba MySQL vor fi:

CREATE TABLE IF NOT EXISTS `jos_mytable_test` (
`Id` int (11) NULL auto_increment,
`Recordtime` datetime NOT NULL default '0000-00-00 00:00:00 ',
NU `user_id` varchar (15) default NULL "gazdă",
`Raspuns` int (6) NULL default '0 ',
PRIMARY KEY (`id`)
) TYPE = MyISAM;

ID-ul a fost adaugat in teren doar pentru identificare tabel unic de înregistrare.

Trebuie să creaţi tabel din baza de date Joomla. Verificaţi, că prefixul dvs. este jos_. Dacă este încă mos_, schimba prefixul tabel.

Aveţi posibilitatea să creaţi tabel prin intermediul phpMyAdmin fie manual sau automat prin copy-paste din situaţia MySQL de mai sus.

Eu va asuma jos_mytable_test tabel este creat de acum.

self_call_form.php

Exista doua metode prin care un comunicat de forma cu mediul său: POST si GET. GET trimite (şi citeşte) date din apendicele URL. Noi nu va folosi metoda GET aici.

Metoda POST scrie date la nivel mondial php variabila $ _POST. Aşa că au acces deplin la datele trimise aici.

Algoritmul general al self_call_form.php

Dacă nu există date relevante în $ _POST, adică nu există nici un raspuns de la un utilizator, arată apoi formularul. În cazul în care utilizatorul a răspuns, mulţumesc apoi el şi scrie răspunsul (şi alte date), în baza de date.

Algoritmul de mai sus traduse în limba php arata ca acest cod:

funcţie self_form()
 / Numele butonului / Radio (aici "answer") trebuie să fie un nume de coloană într-o bază de date de asemenea!
{

 $ Ancora = "Myform"; / / Variabila $ ancora vom avea nevoie mai târziu
 ecou "Name =  "; / / Ancora html vom avea nevoie mai târziu
 ecou "
"; / / Formularul de container în cazul în care(!isset($ _POST["Answer"])) / / Dacă nu există nici un răspuns a scrie apoi formularul { $ Return_url = Get_return_url($ Ancora); ecou "
"; ecou "

Ai gasit acest tutorial de ajutor ?"; ecou " type='radio' Absolut nr.\ N"; ecou " type='radio' Deci aşa.\ N"; ecou " type='radio' Da. Multumesc pentru aceasta.\ N"; ecou "; ecou ""; } altfel / / Dacă există un răspuns mulţumesc şi scrie răspunsul în baza de date { ecou "Va multumesc pentru vot vă dvs. ";   write_data($ _POST["Answer"]); } ecou ""; }

Explicaţia şi unele trucuri

Funcţia PHP isset ("răspunsul"), controalele "answer" vreme exista in $ _POST.

Vrem formularul pentru a trimite date la sine. Asta înseamnă că la următoarea adresă aceeaşi adresă URL (formă şi script-ul de procesare pot fi găsite la aceeaşi adresă URL). Putem folosi adresa URL greu codificate ale unei pagini sau, la fel ca în cazul nostru, putem obţine adresa URL din mediul Joomla folosind un truc simplu. Utilizarea truc este mai bine, atunci prima abordare greu codificate, deoarece codul nostru este reutilizabil în diferite pagini fără nici o atingere.

Deci, aici vine truc conţinute în get_return_url funcţia ($ ancora).

Funcţia get_return_url ()
funcţie get_return_url($ Ancora)
{
 în cazul în care ($ QUERY_STRING = MosGetParam( $ _SERVER, "QUERY_STRING", '' ))

 {
  $ Retur = "Index.php? ' . $ QUERY_STRING;
 }
 altfel
 {

  $ Retur = "Index.php";
 }
 / / Un URL-ul începe cu index.php acum
 
 / / Conversia şi pentru a & pentru respectarea xtml

 $ Retur = str_replace( "&", "&", $ Retur );
 / / Adaugarea ancora la sfârşitul URL-ul

 $ Retur .="# $ Ancora"; / / Adaugarea ancora la URL-ul
 / / Prepand http:// la începutul url
 întoarcere sefRelToAbs($ Retur);

}

Nu există nici un miracol în ea. Funcţia returnează doar adresa de URL-ul în cazul în care se execută (în formularul nostru). Inclusiv ancora.

De ce am inclus ancora (html) în adresa de retur?

Imaginaţi-vă că formularul nostru se află în partea de jos a unei pagini foarte lungi. În cazul în care nu au fost pentru ancora de atunci, după trimiterea datelor de utilizator va vedea în partea de sus a paginii şi trebuie să defilaţi în jos. Cu ghidul de ancorare vor fi reveni la locul a votat.

Voi dori să-şi îndrepte atenţia dvs. pentru a Joomla! mosGetParam funcţie specifică () prea. Este funcţia cea mai utila. Şi ar trebui să fie utilizate în voi face intens.

Descriere generală a mosGetParam () pot fi găsite aici. Una dintre cele mai practice de utilizare urmează:

În loc de a utiliza:

$ _POST ['Somename']

este mai bine să utilizaţi:

mosGetParam ($ _POST, "somename")

deoarece nu numai că unele tunderea de intrare de ghidul de nedorit, dar există şi alte opţiuni utile în ea.

Cu toate acestea, dacă aveţi multe date pentru a fi prelucrate poate fi destul de epuizant timp să-şi retragă toate valorile din $ _POST, unul câte unul: fie prin accesarea directă ei sau prin intermediul funcţiei mosGetParam (). Există un truc alta: extract de utilizare php funcţia ($ _POST), care se bazează variabile şi le atribuie numele de la tot conţinutul de $ _POST.

Notă vom folosi $ _SERVER în get_return_url function (). $ _SERVER Este o alta variabila php la nivel mondial cum ar fi $ _POST şi poate fi de utilizare în unele script-uri prea. Dacă nu cunoaşteţi conţinutul variabilelor le puteţi arăta în script-ul, folosind var_dump ($ somoevaribale) funcţia.

Funcţia checkForm ()

Aceasta este funcţia de validare javascript care validează datele introduse de utilizator la adresa unor reguli. Acest e-mail este într-adevăr o adresă de e-mail, această denumire nu este gol, etc

Din nou: puteţi găsi diverse scripturi validare anunturi pe Internet sute de surse.

În forma demo noastre, vom valida faptul că utilizatorul a selectat un "răspuns" buton radio. Dacă nu există nici un "răspuns" nu prezintă date, dar arată o alertă: