Subiendo archivos en Joomla 3


Aprovechando la serie de artículos de Joomla 3 en la que nos hemos sumergido te traigo un ejemplo interesante y que de seguro lo agradecerás. Imaginen importar de un XML de productos a nuestra base de datos, o compartir especificaciones de los determinados productos en los formatos PDF o PPT en nuestro portal. ¿Qué tienen todos en común? Todos los archivos se encuentran en la computadora del cliente y necesitan subirse a nuestro servidor para posteriormente realizarle el tratamiento que necesitamos.

Sabemos que en HTML existe un input de tipo file que nos levanta una ventana modal que explora los directorios y nos permite escoger múltiples archivos, siempre del lado del cliente. Pero luego de esto debemos implementar un método que se encargue de subirlo a un directorio temporal, chequear los permisos de lectura y escritura, inconsistencias en el proceso de copia entre otras muchas cosas necesarias para evitar que se corrompan los datos. Si estamos desarrollando sobre Joomla el proceso es básicamente igual pero existe una gran diferencia, el componente com_media.

El componente com_media es el encargado de implementar los métodos necesarios para el trabajo con los directorios del servidor, maneja todas las transacciones(borrar, editar y subir) e implementa todas las precauciones evitando así datos corruptos en nuestros servidores. Ahora, si ya este maravilloso componente hace el trabajo por nosotros solo quedaría utilizarlo a nuestro favor. Imaginen el siguiente escenario, un portal de promoción de productos de una tienda, donde debe existir un mecanismo de importación de los mismos desde un XML externo que el administrador del sitio subirá al servidor. Para ello hemos creado nuestro propio componente y solo nos queda desde el mismo proporcionar el mecanismo adecuado para que el componente com_media realice el trabajo por nosotros.

Para ello haremos lo siguiente:

  1. Creamos el formulario que contiene los input requeridos, pero más importante es el action. El action determina quien recibe el fichero que necesitamos subir, aqui es donde llamamos a com_media donde su parámetro mas importante es folder que establece en donde se guardará finalmente el archivo.
  2. De los dos input necesarios, primero creamos el de tipo file que lanzará la ventana modal para escoger los archivos a subir.
  3. Necesitamos un input de tipo hidden que no se mostrará pero que tiene como valor la dirección de retorno luego de terminada la subida al servidor.

Por supuesto y aunque no lo mencioné existe el botón que acciona el contenido del action en el formulario.

   <form action="<?php echo JUri::base(); ?>index.php?option=com_media&amp;task=file.upload&amp;tmpl=component&amp;&amp;<?php echo JSession::getFormToken();?>=1&amp;format=html&folder=cproducts/products/files" id="uploadForm" class="form-inline" name="uploadForm" method="post" enctype="multipart/form-data">
          <div id="uploadform">
              <fieldset id="upload-noflash" class="actions">
                   <label for="upload-file" class="control-label"><?php echo JText::_('Subir archivo'); ?></label>
                         <input type="file" id="upload-file" name="Filedata[]" /> <button class="btn btn-primary" id="upload-submit"><i class="icon-upload icon-white"></i> <?php echo JText::_('Subir'); ?></button>
                         </fieldset>
                         <input class="update-folder" type="hidden" name="folder" id="folder" value="cproducts/products/files" />
                         <input type="hidden" name="return-url" value="<?php echo base64_encode(JRoute::_('index.php?option=com_cproducts&view=cproduct', false)); ?>" />
               </div>
         </form>

Lo anterior crea un formulario con 2 botones, el primero lanza la ventana de selección de archivos a subir y el segundo ejecuta al componente com_media y le dice la ubicación destino del mismo en el servidor. Noten las posibilidades que presenta el poder establecer la dirección de retorno, por ejemplo mostrar el contenido o procesarlo de algún modo, hacerle chequeos de integridad o quizás enviarlo como adjunto en un correo.

Lo importante es la posibilidad de poder incluir componentes core de Joomla en los nuestros sin mayor esfuerzo, como en el ejemplo, todo el trabajo lo hacen los métodos ya existentes con la distribución, nosotros solo facilitamos la interface para ello.

Latest posts by Leroy Ley (see all)