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



 
Bienvenue à Jumi! Tutoriel >> >> Location formes d'appel dans un Joomla! teneur

Il ya beaucoup de gens qui souhaitent publier leurs formulaires personnalisés dans un Joomla! contenu.

Pour répondre à leurs besoins, j'ai décidé d'écrire ce tutoriel. Le tutoriel est dédié à Joomla! 1.0.x de codage les débutants, mais ceux intermédiaires peuvent trouver quelques trucs utiles.

Dans cette étape par étape tutoriel, vous apprendrez

  • quelles formes refroidissement de l'auto sont et pour quoi ils servent,
  • certains des plus utiles php et Joomla! Astuces 1.0.x qui sont pertinentes à des formes d'appel auto. EX.:
    • comment un script attrape qu'un utilisateur a envoyé des données,
    • comment reconnaître une adresse URL à laquelle le script s'exécute,
    • comment éteindre le Joomla spécifique! hors cache de la page,
    • ce que Joomla! objet spécifique $ de base de données, my $ sont, où trouver leurs méthodes et leur description,
    • et ainsi de suite

Quelles sont les formes d'appel sont auto et pour quoi ils servent

Toute forme recueille des données à partir de répondeurs.

Les données recueillies ne restent pas dans une forme, mais ils sont - en général après avoir appuyé sur le bouton d'envoi - envoyé quelque part. Ils sont envoyés à un script de traitement qui "siège" sur une autre adresse URL et que - après prétraitement possible - écrit les données dans la base de données et / ou les envoie à une adresse e-mail.

C'est l'approche la plus commune. Et sur cette approche compter Joomla standard! formes de composants.

Mais il est possible de vivre sans composante formes, il est possible d'avoir nos propres formes d'être inclus dans un article contenu. Les formulaires peuvent envoyer des données recueillies à l'auto et de les traiter. Ils sont appelés ainsi les formes d'appel auto.

Il est même possible encore plus: pour afficher les résultats de formulaire dans l'article même contenu.

Dans ce tutoriel, je vais vous montrer comment.

Parce que il doit y avoir un script php là que manipule avec des données de formulaire je ferai usage de plug-in Jumi pour inclure ces scripts dans le contenu. Si vous préférez une autre plugin pour l'inclusion script php dans Joomla! contenu que vous pouvez l'utiliser aussi bien.

Description sous forme de démonstration

Bien que la forme suivante démo est très concret, vous pouvez écrire toutes les formes que vous pouvez imaginer par l'approche expliquée dans ce tutoriel.

Ne pas faire des tests sur votre serveur de production du public, mais sur votre hôte local uniquement!

Supposons que nous voulons

  • un formulaire de vote qui recueille des réponses sur des questions 3 mutuellement exclusives,
  • pour sauver des réponses dans une base de données avec la date et l'heure de la réponse et en même temps que d'identification d'un utilisateur,
  • pour voir "merci" annonce et résumé des résultats, mais uniquement. à ces utilisateurs qui ont voté.

La stratégie de base

Fractionnement du code en plusieurs morceaux, des blocs fonctionnels et logiques offre de nombreux avantages. Bien que je ne vais pas discuté des avantages ici, je vais suivre cette bonne pratique générale ici.

Il existe deux principaux blocs logiques dans notre tâche:

  • Afficher le formulaire + collecter des données + + les vérifier enregistrer des données sur une base de données (sous forme d'appel auto)
  • lire les données à partir d'une base de données et afficher les résultats.

Je vais donc diviser notre application en deux fichiers de script trop: self_call_form.php et show_results.php.

Nous allons entrer dans les détails dans ce qui suit.

Mais laissez-nous commencer par une première base de données.

Base de données

Que notre nom de la table de base de données est xxx_mytable_test où xxx représente votre site Joomla! préfixe de base de données. Certains Joomla! les utilisateurs ont d'autres préfixes jos ont le préfixe mos. Je vais supposer préfixe jos dans le suivant.

Je le répète, notre tâche est de stocker la date de référence et l'heure, identification de l'utilisateur et une réponse.

Sans entrer dans les bases de données MySQL et les détails de conception de tableaux qui peuvent être trouvés ailleurs la structure de la table décrite dans MySQL langue sera:

CREATE TABLE IF NOT EXISTS `jos_mytable_test` (
`Id` int (11) NOT NULL auto_increment,
`Recordtime` datetime NOT NULL par défaut '0000-00-00 00: 00: 00 »,
`User_id` varchar (15) NOT NULL default 'host',
`Répondre` int (6) NOT NULL default '0 »,
PRIMARY KEY (`id`)
) TYPE = MyISAM;

Le champ id a été ajouté juste pour identification de l'enregistrement de table unique.

Vous devez créer la table dans votre base de données Joomla. Vérifiez que votre préfixe est jos_. Si elle est toujours mos_, changer le préfixe de table.

Vous pouvez créer une table via phpMyAdmin soit manuellement, soit automatiquement par copier-coller de la déclaration ci-dessus MySQL.

Je vais assumer la jos_mytable_test table est créée à partir de maintenant.

self_call_form.php

Il existe essentiellement deux méthodes par lesquelles une forme de communiquer avec son environnement: POST et GET. GET envoie (et lit) les données de l'annexe URL. Nous n'utiliserons pas ici la méthode GET.

La méthode POST écrit les données à php variable globale $ _POST. Nous avons donc un accès complet aux données envoyées ici.

Algorithme général de l'self_call_form.php

S'il n'y a pas de données pertinentes dans $ _POST, c'est à dire qu'il n'ya pas de réponse d'un utilisateur, alors montrez-forme. Si l'utilisateur a répondu, puis le remercier et d'écrire la réponse (et d'autres données) dans la base de données.

L'algorithme ci-dessus traduit en langage php ressemble à ce code:

fonction self_form()
 / / Nom du bouton radio (ici "réponse") doit être un nom de colonne dans une base de données trop!
{

 $ Ancre  =  "Myform";  / / La variable $ ancre, nous aurons besoin plus tard
 écho "Nom de  ";  / / L'ancre html, nous aurons besoin plus tard
 écho "
"; / / Forme de contenant if(!isSet($ _POST[«Réponse»])) / / Si la réponse n'est pas alors écrire sous la forme { Return_url $ = Get_return_url($ Ancre); écho "
"; écho "

Avez-vous trouvé ce tutoriel utile? "; écho "Value='1'> \n"; écho "Value='2'> \n"; écho "Value='3'> \n"; écho " "; écho ""; } d'autre / / Si il ya une réponse merci et à écrire la réponse dans la base de données { écho " Merci pour votre vote ";   write_data($ _POST[«Réponse»]); } écho ""; }

L'explication et quelques astuces

PHP fonction isset («réponse») vérifie «réponse» temps existe dans $ _POST.

Nous voulons que le formulaire pour envoyer des données à l'auto. Cela signifie que la même adresse URL (forme et son script de traitement peut être trouvé à la même adresse). Nous pouvons utiliser dur adresse URL codé d'une page ou, comme dans notre cas, nous pouvons obtenir le URL de l'environnement de Joomla en utilisant une astuce simple. En utilisant l'astuce est mieux que la première approche codée en dur parce que notre code est réutilisable dans différentes pages sans le toucher.

Donc voici l'astuce contenue dans le get_return_url fonction ($ ancre).

Fonction get_return_url ()
fonction get_return_url($ Ancre)
{
 if ($ QUERY_STRING = MosGetParam( $ _SERVER,  'QUERY_STRING',  '' ))

 {
  $ Retour  =  'Index.php?  .  $ QUERY_STRING;
 
 }
 d'autre
 {

  $ Retour  =  'Index.php';
 
 }
 / / Une url commence par index.php maintenant

 
 
 / / Conversion et à la conformité & XTML

 $ Retour  =  str_replace( '&',  '&',  $ Retour );
 
 / / Adjonction d'ancrage à la fin de URL

 $ Retour  .="# $ Ancre";  / / Ajout d'ancrage à l'url
 / / Prepand http:// au début de l'URL
 retour sefRelToAbs($ Retour);



}

Il n'ya pas de miracle. La fonction retourne simplement l'adresse URL où il fonctionne (dans notre formulaire). Y compris l'ancre.

Pourquoi j'ai inclus l'ancre (html) dans l'adresse de retour?

Imaginez que notre forme est au fond d'une très longue page. Si ce n'était pas pour l'ancre, puis après l'envoi de données de l'utilisateur verra le haut de la page et doit faire défiler vers le bas. Avec l'utilisateur d'ancrage sera retourner à l'endroit où il a voté.

Je tiens à attirer votre attention sur Joomla! mosGetParam fonction spécifique () aussi. Il est la fonction la plus utile. Et devrait être utilisé en vous formant intensivement.

La description générale de mosGetParam () peut être trouvé ici. Un de l'utilisation pratique suit:

Au lieu d'utiliser:

$ _POST ['Abc']

il est préférable d'utiliser:

mosGetParam ($ _POST, 'abc')

non seulement parce qu'il fait un peu de rognage de l'entrée utilisateur non désirées, mais il ya d'autres options utiles en elle.

Toutefois, si vous avez beaucoup de données à traiter, il peut être plutôt le temps de consommation de retirer toutes les valeurs de $ _POST, un par un: soit par contact direct ou par l'intermédiaire d'y accéder mosGetParam () la fonction. Il ya un truc l'autre: extrait fonction php utilisation ($ _POST) qui construit des variables et leur attribue les noms de tout le contenu de $ _POST.

Remarquez que nous utilisons la variable $ _SERVER dans le get_return_url function (). $ _SERVER Est une autre variable php mondiale comme $ _POST et peut être d'une certaine utilisation de vos scripts trop. Si vous ne connaissez pas le contenu des variables, vous pouvez les afficher dans vos scripts à l'aide var_dump ($ somoevaribale) la fonction.

Fonction checkForm ()

Il s'agit de la fonction de validation javascript qui valide les entrées utilisateur contre certaines règles. Ce courriel est vraiment une adresse e-mail, ce nom n'est pas vide, etc

Encore une fois: vous pouvez trouver des scripts de validation diverses sur des centaines de sources Internet.

Dans notre formulaire démo nous permettra de valider que l'utilisateur a sélectionné un bouton "réponse" de radio. S'il n'ya pas de «réponse» ne présentent pas de données, mais affiche une alerte:

Type de SCRIPT <="Text / javascript">
fonction checkForm(LaFeuille) {
 var pourquoi = "";
  
  pour (i=0; I ) {

   if (theForm.answer[i]. Vérifier) {
    var checkvalue = theForm.answer[i]. Valeur;
     pause;
    
    }
  }

  pourquoi + checkRadio =(checkvalue);
  
  if (pourquoi! = "") {
   pourquoi + = "\nSi vous pensez que c'est de notre faute, s'il vous plaît laissez-nous connaître. ";
   alerter(Pourquoi);
   
   retour faux;
  
  }

  retour vrai;

}

 

fonction checkRadio(checkvalue) {
 var error = "";
  
  if (!(checkvalue)) {

   error = "Vous n'avez pas sélectionné une option.\n";
   
   }
   retour erreur;
}
->

Il n'y a pas des trucs et pas de miracles ici, donc laissez-nous aller à la gravure de données sur la base de données.

Fonction write_data ()

Vous pouvez épargner beaucoup de temps si vous utilisez Joomla! objets et des méthodes au lieu d'utiliser la fonction standard base de données MySQL. Je veux dire en utilisant la base de données-> load ..., base de données-> query, manuel, etc Très descriptif peut être trouvé ici.

fonction write_data($ Valeur)
/ / Si l'utilisateur est connecté sauver son Identifiant contraire sauver «l'hôte»

{
 global Base de données $,  My $;
 
 if (My $->id)
  User_id $  =  My $->id;
 
 d'autre

  User_id $  =  «Hôte»;
 
 Base de données $->setQuery( "INSERT INTO # __mytable_test
   (Id, recordtime, user_id, réponse)
    VALEURS ('', '".  données('Y-m-d H: i: s')."", "".User_id $."", "".$ Valeur."');" );
 
 Base de données $->question();  / / Écriture de données

}

Rien d'intéressant ici, sauf Joomla mondiale! ma variable $. Il contient l'ID utilisateur, nom, son adresse e-mail, etc Encore une fois: essayez d'utiliser var_dump ($ mon) dans votre code et vous verrez la structure et le contenu.

Validation requête:

Je n'ai pas inclus aucune validation que les données ont été effectivement écrit. Vous pouvez le faire si vous voulez. Il suffit de remplacer la ligne de base de données $-> query (); par
if (!Base de données $->question()) { / / Écriture de données et en cas d'erreur d'alerte

  écho "