Ir al contenido


Foto

Ayuda con un Array en Javascript + PHP


  • Por favor identifícate para responder
3 respuestas en este tema

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 03 abril 2009 - 06:07

Pues eso, este script que muestra una imagen cada x tiempo:



html5
  1. <script type=\"text/javascript\">
  2.  
  3. var flashyshow=new flashyslideshow({ //create instance of slideshow
  4. wrapperid: \"myslideshow\", //unique ID for this slideshow
  5. wrapperclass: \"flashclass\", //desired CSS class for this slideshow
  6. imagearray: [
  7. [\"1.png\", \"http://www.installfest.net/\", \"_new\", \"\"],
  8. [\"2.png\", \"http://cl.sun.com/sunnews/events/2009/apr/sunvision/\", \"_new\", \"\"]
  9. ],
  10. pause: 10000, //pause between content change (millisec)
  11. transduration: 1000 //duration of transition (affects only IE users)
  12. })
  13.  



Como ven en la parte imagearray hay dos imagenes pero se insertan de manera directa, ahora, quisiera sacarla desde una base de datos MySQL con una consulta y hacer una especie de while y mezclarlo dentro de ese script y que en el último registro no incluya la coma. No sé si me hice entender las puedo repetir con gusto.

Saludos.
  • 0

#2 Héctor Randolph

Héctor Randolph

    501st Legion

  • Moderadores
  • PipPipPip
  • 664 mensajes
  • LocationMéxico

Escrito 04 abril 2009 - 12:47

Hola Fernando

Elaboré una clase en PHP que sirve para rellenar plantillas, me parece que puede servirte para lograr este script.

Te explico brevemente y espero no complicarme mucho.

Te estoy poniendo adjunto un archivo que contiene la clase plantilla y su única función es abrir un documento *.tpl en el cual tu colocas toda la estructura de tu página HTML. Después puedes añadir campos y bloques en esa plantilla que serán sustituidos en tiempo de ejecución por valores provenientes de una base de datos.

Por ejemplo, puedes crear una achivo digamos ejemplo.tpl con tu código HTML y para insertar un campo colocas el identificador de ese campo entre llaves 



html5
  1. <html> 
  2.   <p>{mi_campo}</p>
  3. </body>
  4. </html>



Luego desde PHP haces algo como esto:



php
  1.   $tpl = new plantilla('ejemplo.tpl');
  2.  
  3.   $tpl->SetVariable('mi_campo','Este es un texto que proviene de la base de datos');
  4.   echo $tpl; // Vuelca el contenido de la plantilla en pantalla



El resultado final es una página HTML de la siguiente forma:



html5
  1. <html> 
  2.   <p>Este es un texto que proviene de la base de datos</p>
  3. </body>
  4. </html>



Regularmente obtenemos múltiples filas desde una tabla y deseamos enviarlas a pantalla. Para resolver esto, inventé un mecanismo llamado 'bloques' en los cuales puedes crear un tipo de bloque que se repetirá N veces mientras recorres los registros de una tabla, por ejemplo:



html5
  1. <html> 
  2.   <table><tablebody>
  3.      <tr>
  4.        <th>Encabezado</th>
  5.     </tr>
  6. <!-- #define_bloque mis_datos -->
  7.     <tr>
  8.      <td>{una_celda}</td>
  9.     </tr>
  10. <!-- #end_bloque -->
  11.   </tablebody></table>
  12. </body>
  13. </html>



En este caso sobre el archivo ejemplo.tpl hemos creado un bloque llamado mis_datos, es importante respetar la sintaxis, es decir se deben usar las etiquetas <!-- #define_bloque nombre --> y <!-- end_bloque --> para que la plantilla reconozca este bloque. Se pueden agregar múltiples bloques en una misma plantilla

Ahora solo resta rellenar la plantilla desde PHP



php
  1.   $tpl = new plantilla('ejemplo.tpl');
  2.  
  3.   $block = $tpl->getBloque('mis_datos');
  4.   $str = '';
  5.  
  6.   //Ahora se rellenas las variables contenidas en el bloque
  7.   $block->SetVariable('una_celda','Esta es la fila 1');
  8.   $str.=$tpl->flush();
  9.   //El proceso se puede repetir N veces
  10.   $block->SetVariable('una_celda','Esta es la fila 2');
  11.   $str.=$tpl->flush();
  12.  
  13.   $block->SetVariable('una_celda','Esta es la fila 3');
  14.   $str.=$tpl->flush();
  15.  
  16.   $tpl->setBloque('mis_datos',$str);
  17.  
  18.   echo $tpl;



Lo que obtenemos al final es una página HTML con tres filas dentro de una tabla, obviamente los valores pueden ser tomados de una base de datos.



html5
  1. <html> 
  2.   <table><tablebody>
  3.      <tr>
  4.        <th>Encabezado</th>
  5.     </tr>
  6.     <tr>
  7.      <td>Esta es la fila 1</td>
  8.     </tr>
  9.     <tr>
  10.      <td>Esta es la fila 2</td>
  11.     </tr>
  12.     <tr>
  13.      <td>Esta es la fila 3</td>
  14.     </tr>
  15.   </tablebody></table>
  16. </body>
  17. </html>




  • 0

#3 Héctor Randolph

Héctor Randolph

    501st Legion

  • Moderadores
  • PipPipPip
  • 664 mensajes
  • LocationMéxico

Escrito 04 abril 2009 - 12:58

Después de tanta complicación vamos a lo importante, esto como dije lo puedes aplicar para resolver tu problema de la siguiente manera:

Primero creas tu archivo de plantilla (TPL)



html5
  1. <script type=\"text/javascript\">
  2.  
  3. var flashyshow=new flashyslideshow({ //create instance of slideshow
  4. wrapperid: \"myslideshow\", //unique ID for this slideshow
  5. wrapperclass: \"flashclass\", //desired CSS class for this slideshow
  6. imagearray: [
  7. <!-- #define_bloque datos_imagen -->
  8. [\"{nombre_archivo}\", \"{url}\", \"_new\", \"\"]{separador}
  9. <!-- #end_bloque -->
  10. ],
  11. pause: 10000, //pause between content change (millisec)
  12. transduration: 1000 //duration of transition (affects only IE users)
  13. })
  14.  
  15.  
  16. </body>
  17. </html>



Se puede observar que he creado un bloque llamado datos_imagen y este bloque tiene tres campos que son {nombre_archivo},{url},{separador}.

Ahora debemos rellenar la plantilla con los datos obtenidos desde la base de datos, sin embargo, para este ejemplo los voy a tomar desde un arreglo con dimensión fija.



php
  1. <?php
  2. require_once ('plantilla.class.php');
  3.  
  4. $datos = array( array( 'imagen'=>'1.PNG',
  5.                       'url'   =>'http://1.html'),
  6.                       array( 'imagen'=>'2.PNG',
  7.                       'url'   =>'http://2.html'),
  8.                       array( 'imagen'=>'3.PNG',
  9.                       'url'   =>'http://3.html'),
  10.                       array( 'imagen'=>'4.PNG',
  11.                       'url'   =>'http://4.html'));
  12.  
  13.        $tpl = new plantilla('mypagina.tpl');
  14.        $block = $tpl->getBloque('datos_imagen');
  15.        $str='';
  16.        $i=0;
  17.  
  18.         $cont=count($datos);
  19.  
  20.         foreach ($datos as $item){
  21.                 $block->setVariable('nombre_archivo',$item['imagen']);
  22.                 $block->setVariable('url',$item['url']);
  23.                 $i++;
  24.                 if ($i<$cont)
  25.                       $block->setVariable('separador',',');
  26.                 else
  27.                       $block->setVariable('separador','');
  28.                 $str .= $block->flush();
  29.  
  30.        }
  31.  
  32.        $tpl->setBloque('datos_imagen',$str);
  33.        echo $tpl;
  34.  
  35. ?>



Como puedes observar estoy enviando el nombre de la imagen, una url y además el campo {separador} me funciona para determinar cuando lleva una coma y cuando no la lleva.

El resultado final en HTML es el siguiente:




html5
  1. <script type=\"text/javascript\">
  2.  
  3. var flashyshow=new flashyslideshow({ //create instance of slideshow
  4. wrapperid: \"myslideshow\", //unique ID for this slideshow
  5. wrapperclass: \"flashclass\", //desired CSS class for this slideshow
  6. imagearray: [
  7.  
  8. [\"1.PNG\", \"http://1.html\", \"_new\", \"\"],
  9.  
  10. [\"2.PNG\", \"http://2.html\", \"_new\", \"\"],
  11.  
  12. [\"3.PNG\", \"http://3.html\", \"_new\", \"\"],
  13.  
  14. [\"4.PNG\", \"http://4.html\", \"_new\", \"\"]
  15.  
  16. ],
  17. pause: 10000, //pause between content change (millisec)
  18. transduration: 1000 //duration of transition (affects only IE users)
  19. })
  20.  
  21.  
  22. </body>
  23. </html>



Espero que te sea de utilidad, te dejo los fuentes que utilicé para el ejemplo incluida la clase plantilla.

Saludos


Archivos adjuntos


  • 0

#4 Héctor Randolph

Héctor Randolph

    501st Legion

  • Moderadores
  • PipPipPip
  • 664 mensajes
  • LocationMéxico

Escrito 04 abril 2009 - 01:23

Por cierto, el archivo de plantilla no debe ser por fuerza una página HTML completa. Al final estamos tratando con simples cadenas de texto.

Lo digo porque seguramente tu ya tienes una plantilla elaborada con cierto formato y entonces lo único que necesitas es crear tu plantilla con la parte que te interesa que es la de javascript y el arreglo de imagenes. Después esta cadena concatenada con otras cadenas en el orden correcto, te darán tu página completa.

Saludos
  • 0




IP.Board spam blocked by CleanTalk.