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



 
Bienvenido a Jumi! Tutorial >> >> Formas de auto-llamada en un Joomla! contenido

Hay una gran cantidad de personas que deseen publicar sus formularios personalizados en Joomla! contenido.

Para satisfacer sus necesidades me decidí a escribir este tutorial. El tutorial está dedicado a Joomla! 1.0.x codificación de los principiantes, pero los intermedios pueden encontrar algunos trucos útiles.

En este tutorial paso a paso aprenderás

  • ¿Qué formas de auto enfriamiento del son y para qué sirven,
  • Algunos de los más útiles php y Joomla! Trucos 1.0.x que son relevantes para las formas de llamada auto. Por ejemplo:
    • cómo una secuencia de comandos de capturas que un usuario ha enviado los datos,
    • cómo reconocer una dirección URL en la que el script se ejecuta,
    • cómo apagar el Joomla específico! fuera de la página de caché,
    • lo que Joomla! objeto específico de base de datos $, $ mi, de dónde encontrar a sus métodos y su descripción,
    • etc.

¿Qué formas de auto de llamadas son y para qué sirven

Toda forma recoge algunos datos de respuesta.

Los datos recogidos no se quedan en una forma, pero son ellos - por lo general después de pulsar el botón de envío - enviado a algún lugar. Son enviados a una secuencia de comandos de procesamiento que "se sienta" en la otra dirección URL y que - después del preprocesamiento es posible - escribe datos en la base de datos y / o los envía a una dirección de correo electrónico.

Este es el método más común. Y en ese enfoque se basan norma Joomla! formas componentes.

Pero es posible vivir sin el componente de formularios, es posible tener nuestras propias formas de ser incluido en un artículo de contenido. Los formularios se pueden enviar los datos recogidos a la libre y procesarlos. Se les llama así llamadas formas de auto.

Es posible, incluso aún más: para mostrar los resultados del formulario en el artículo mismo contenido.

En este tutorial te mostraré cómo.

Porque tiene que haber algún script php ahí que manipula con los datos del formulario que hará uso del plugin Jumi para incluir estos scripts en el contenido. Si prefiere cualquier otro plugin para la inclusión script PHP en Joomla! el contenido se puede usar también.

Demostración descripción de la forma

A pesar de la forma siguiente demostración es muy concreto puede escribir cada formulario que se puede imaginar por el procedimiento descrito en este tutorial.

No haga pruebas en su servidor de producción pública, pero en el host local sólo!

Supongamos que queremos

  • un formulario de votación que recoge respuestas a las preguntas 3 mutuamente excluyentes,
  • para guardar las respuestas en una base de datos junto con la fecha y hora de la respuesta y junto con la identificación un usuario,
  • para mostrar "gracias" El anuncio y el resumen de los resultados, pero a aquellos usuarios que votaron.

La estrategia básica

Dividir el código en varios pedazos, bloques funcionales y lógicos ofrece muchas ventajas. A pesar de que no se discuten las ventajas que aquí voy a seguir esta buena práctica en general aquí.

Hay dos grandes bloques lógicos en nuestra tarea:

  • Mostrar formulario + + recopilar datos verificarlos + guardar los datos en una base de datos (formulario llamado auto)
  • leer datos de una base de datos y mostrar los resultados.

Así que voy a dividir nuestra aplicación en dos archivos de script también: self_call_form.php e show_results.php.

Vamos a entrar en los detalles en el siguiente.

Pero vamos a empezar con una primera base de datos.

base de datos

Deje que nuestro nombre de la tabla de base de datos es xxx_mytable_test donde xxx es tu sitio Joomla! prefijo de la base de datos. Algunos Joomla! los usuarios que los demás tienen el prefijo prefijo jos meses. Asumo prefijo Jos en el siguiente.

Repito, nuestra tarea es para almacenar la fecha y hora de grabación, la identificación de usuario y una respuesta.

Sin entrar en bases de datos MySQL y los detalles del diseño de tablas que se pueden encontrar en otras partes de la estructura de la tabla se describe en el lenguaje de MySQL serán los siguientes:

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 NO (15) default NULL 'host',
`NO` int responder (6) NULL default '0',
PRIMARY KEY (`id`)
) TYPE = MyISAM;

El identificador de campo se acaba de agregar para la identificación de la tabla de registro único.

Usted tiene que crear la tabla en su base de datos de Joomla. Verifique que su prefijo es jos_. Si todavía está mos_, cambiar el prefijo de la tabla.

Usted puede crear la tabla a través de phpMyAdmin, ya sea manualmente o automáticamente por copiar y pegar de la declaración de MySQL por debajo.

Voy a asumir la jos_mytable_test tabla se crea a partir de ahora.

self_call_form.php

Existen básicamente dos métodos por los cuales se comunican formulario con su entorno: POST y GET. GET envía (y lee) los datos de apéndice de la URL. No vamos a utilizar el método GET aquí.

El método POST escribe datos en la variable global de php $ _POST. Así que tenemos pleno acceso a los datos enviados.

Algoritmo general de la self_call_form.php

Si no hay datos relevantes en $ _POST, es decir, no hay una respuesta de un usuario, a continuación, mostrar la forma. Si el usuario responde, y luego darle las gracias y escribir la respuesta (y otros datos) en la base de datos.

El algoritmo anterior traducido a lenguaje PHP se parece a este código:

función self_form()
 // ¡El nombre del botón de opción (aquí "respuesta") debe ser un nombre de columna en una base de datos también!
{

 $ Anclaje = "myform"; / / La variable $ anclaje vamos a necesitar más adelante
 eco " "; / / El ancla HTML que necesitaremos más adelante
 eco " "; / / Forma de contenedor

 if(!isSet($ _POST['Respuesta'])) / / Si no hay respuesta, entonces escribir la forma
 {
  $ Return_url = Get_return_url($ Anclaje);
  eco " ";
  eco " ¿Te ha resultado útil este tutorial? ";
  eco " Absolutamente no.\n";
  eco " Regular.\n";
  eco " Si. Gracias por eso.\n";
  eco " ";
  eco " ";
 }

 más / / Si no hay una respuesta gracias y escribir la respuesta en la base de datos
 {
  eco " Gracias por tu voto ";
  write_data($ _POST['Respuesta']);
 }

 eco " ";
}

La explicación y algunos trucos

Función de PHP isSet ("respuesta") comprueba "respuesta" el clima que existe en $ _POST.

Queremos que el formulario para enviar los datos a sí mismo. Eso significa que a la dirección URL misma (forma y su secuencia de comandos de procesamiento se puede encontrar en la misma URL). Podemos utilizar la dirección URL codificada duro de una página o, como en nuestro caso, podemos obtener la URL de un entorno de Joomla utilizando un simple truco. Utilizando el truco es mejor que el primer enfoque de código duro, porque nuestro código se puede reutilizar en varias páginas sin ningún tipo de contacto.

Así que aquí viene el truco que figura en el get_return_url función ($ ancla).

Función get_return_url ()
función get_return_url($ Anclaje)
{
 if ($ QUERY_STRING = MosGetParam( $ _SERVER, 'QUERY_STRING', '' ))

 {
  $ Regresar = 'Index.php? . $ QUERY_STRING;
 }
 más
 {

  $ Regresar = 'Index.php';
 }
 / / URL comienza con un index.php ahora
 
 // convertir & a & para conformidad con xtml

 $ Regresar = str_replace( '&', '&', $ Regresar );
 / / Añadiendo ancla hasta el final de url

 $ Regresar .="# $ ancla"; / / Suma de anclaje para url
 / / Prepand http:// al principio de la URL
 retorno sefRelToAbs($ Regresar);

}

No hay milagro en él. La función sólo devuelve la dirección URL donde se ejecuta (en el formato). Incluyendo el ancla.

¿Por qué he incluido el ancla (html) en la dirección de retorno?

Imagínese que nuestra forma es en la parte inferior de una página muy larga. Si no fuera por el ancla a continuación, después de enviar los datos del usuario se ve la parte superior de la página y tiene que desplazarse hacia abajo. Con el anclaje de usuario se vuelva al lugar que votó a favor.

Me gustaría llamar su atención a Joomla! mosGetParam función específica () también. Es la función más útil. Y se debe utilizar en forma intensiva a.

La descripción general de mosGetParam () se pueden encontrar aquí. Uno de los uso práctico sigue:

En lugar de usar:

$ _POST ['Algunnombre']

es mejor utilizar:

mosGetParam ($ _POST, 'algunnombre')

porque no sólo hace algo de limpieza de la entrada del usuario no deseada, pero hay algunas otras opciones útiles en él.

Sin embargo, si usted tiene muchos datos para ser procesados ​​puede ser bastante tiempo consuntivo de retirar todos los valores de $ _POST, uno por uno: ya sea por contacto directo oa través de ellas el acceso a mosGetParam () función. Hay un truco a otro: el uso de extracto de la función de PHP ($ _POST) que construye las variables y les asigna los nombres de todo el contenido de $ _POST.

Notificación que utilizar $ _SERVER en el get_return_url function (). $ _SERVER Es una variable php mundial como $ _POST y puede ser de algún uso en las secuencias de comandos también. Si usted no conoce el contenido de las variables que pueden mostrar en sus scripts usando var_dump ($ somoevaribale) función.

Función checkForm ()

Esta es la función de validación de Javascript que valida la entrada del usuario en contra de algunas normas. Este correo electrónico es en realidad una dirección de correo electrónico, que el nombre no está vacío, etc

Una vez más: usted puede encontrar varios scripts de validación de las fuentes de cientos de internet.

En nuestra forma de demo vamos a validar que el usuario ha seleccionado una "respuesta" botón de radio. Si no hay una "respuesta" no presentar los datos, pero muestran un mensaje de alerta:

<SCRIPT type="texto / javascript">
función checkForm(theform) {
 var por eso = "";
  para buscar (i=0; yo) {

   if (theForm.answer[i]. Comprobar) {
    var checkvalue = theForm.answer[i]. Valor;
     descanso;
    }
  }

  por + = checkRadio(checkvalue);
  if (por qué! = "") {
   por + = "\nSi cree que es nuestro error, háganoslo saber ".;
   alerta(¿ por qué);
   retorno false;
  }

  retorno verdadero;
}
 
función checkRadio(checkvalue) {
 var error = "";
  if (!(checkvalue)) {

   error = "No ha seleccionado ninguna opción.\n";
   }
   retorno el error;
}
->

No hay trucos ni milagros aquí, así que vamos a ir a la escritura de datos en la base de datos.

Función write_data ()

Usted puede ahorrar mucho tiempo si usa Joomla! objetos y métodos en lugar de utilizar la función estándar de base de datos MySQL. Me refiero a utilizar la base de datos-> load ..., base de datos-> query, manual, etc Muy descriptivo se puede encontrar aquí.

función write_data($ Valor)
/ / Si el usuario se registra salvar su Identificación de otro modo salvar a 'host'

{
 global $ Base de datos, My $;
 if (My $->id)
  $ User_id = My $->id;
 más

  $ User_id = "anfitrión";
 $ Base de datos->setQuery( "INSERT INTO #__mytable_test (id, recordtime, user_id, answer) VALUES ('', '". datos('Y-m-d H: i: s ")."','".$ User_id."','".$ Valor."');" );
 $ Base de datos->pregunta(); / / Escribir datos

}

No hay nada interesante aquí, excepto Joomla mundial! variables my $. Contiene la identificación del usuario, nombre, su correo electrónico, etc Una vez más: tratar de usar var_dump (mi $) en el código y podrás ver la estructura y el contenido.

Validación de consulta:

No he incluido ningún tipo de validación que los datos en realidad fue escrito. Usted puede hacerlo si lo desea. Sólo hay que sustituir la línea de base de datos $-> query (); por
if (!$ Base de datos->pregunta()) { / / Escribir datos, y si el error se produce alerta

  eco " alert('".$ Base de datos->getErrorMsg()."'); ";
 }

Así que tenemos todos los componentes básicos de nuestro formulario de auto llamando ahora.

Puedes probarlo de inmediato (siempre y cuando tengas jos o creado la tabla mos_mytable_test).

Pero hay una cosa más ...

No es para todos nosotros, el comportamiento de la aplicación serán las que se espera en general: después de enviar el formulario será todavía visible y que no habrá "gracias" el anuncio.

Esto ocurrirá para aquellos cuya Joomla! caché está activado.

Y aquí viene otro truco: apagar todo el caché de Joomla es fácil, pero apagar el caché de una de las páginas de Joomla parece ser el problema.

El gran problema con una solución muy simple.

El hack de caché se describe en el Joomla! foro:

Editar / includes / cache / Lite.php
Vas a ver "la función ($ datos ..."
cambiar

función ahorrar($ Datos, $ Id = NULL, $ Grupo = 'Default')

{
 if ($ This-> _ almacenamiento en caché) {

a

función ahorrar($ Datos, $ Id = NULL, $ Grupo = 'Default')

{
 if(strpos($ Datos,' ') ! == false) {
  $ This-> _ almacenamiento en caché = 0;
 }

 if ($ This-> _ almacenamiento en caché ) {

a continuación, crear un módulo con


en el cuerpo, y publicarlo en cualquier posición en pantalla (los usuarios no lo vean) ... A continuación, sólo permiten que el módulo en cualquier página que no desea en caché ...

Estoy agregando que "la Directiva nocache" pueden ser incluidos en el contenido.

Resumen de self_call_form.php

Así que no todo el contenido de self_call_form.php:


se define( '_VALID_MOS' ) or morir( 'Acceso restringido' ); / / Razones de seguridad

?>
<SCRIPT type="texto / javascript">
función checkForm(theform) {
 ...
}
función checkRadio(checkvalue) {

...
}
->

 


función self_form()
{
...

}
función get_return_url($ Anclaje){
 ...
}
función write_data($ Valor){
...
}
 

/ / Código ejecutivo comienza aquí
self_form();
/ / Código ejecutivo termina aquí
?>

Nota: todo el guión está "envuelto" en el self_form ejecutivo () funciones. No hay variables de secuencia de comandos se definen fuera de cualquier función de lo que no hay riesgo de las variables van a interactuar con otras partes 3rd o Joomla! las variables de una manera impredecible.

Uff ...

Eso es todo por la forma vocación propia: forma de espectáculo + + recopilar datos verificarlos + guardar los datos en una base de datos.

Ahora escribe en su artículo

{jumi [somepathway / self_call_form.php]}

y probar.

En primer lugar se verá

entrada de forma jumi

y después de la votación (sólo después de la votación) se puede ver el resultado de la segunda parte (show_results.php):

salida de forma jumi

La segunda parte - la presentación de los resultados obtenidos de la base de datos - es mucho más fácil que la parte anterior.

show_results.php


se define( '_VALID_MOS' ) or morir( 'Acceso restringido' );

 
función mostrar_resultados()
{
 global $ Base de datos;
 eco " "; / / No es necesario pero útil aquí

 $ Radios_name = "responder"; / / Debe ser una columna en una base de datos también!
 if(isSet($ _POST[$ Radios_name])) {/ / Mostrar los resultados de los que votaron sólo
  eco " ";
  eco " Este tutorial fue ";
  $ Base de datos->setQuery( "SELECT $ radios_name, COUNT (id) AS numitems FROM #__myform_test GROUP BY $ radios_name");
  $ Filas = $ Base de datos->loadObjectList();
  foreach ( $ Filas as $ Fila ){ / / Caminar a través de respuestas

   cambiar ($ Fila->https://www.youtube.com/watch?v=xB-eutXNUMXJtA&feature=youtu.be){
    caso 1:
     eco "no es útil para".$ Fila->numItems."lectores,\n";
    descanso;
    caso 2:
     eco "tan útil para".$ Fila->numItems."lectores y\n";
    descanso;
    caso 3:
     eco "muy útil para".$ Fila->numItems."lectores\n";
    descanso;
    Por defecto:
   }

 }
 eco " ";
 }
}
mostrar_resultados();
?>

Ahora escribe en tu sitio un poco menos de la declaración previa plugin de Jumi:

{jumi [somepathway / show_results.php]}

y probar.

No creo que hay mucho para una explicación, excepto la manipulación de bases de datos y objetos de filas. Una vez más: ir a Joomla! Descripción del API.

Conclusión

Todo estaba resuelto, todo estaba escrito. Puede descargar todo el guión aquí.