Cómo listar los directorios de un directorio con el framework de Joomla

Frameworks, Joomla, Programación

7 de Mayo del 2008

Esta vez voy a anotar un pequeño trozo de código que me ha servido de mucho en mi último trabajo.

No es ningún secreto saber cómo se listan los directorios, pero gracias al API de de Joomla! es mucho más sencillo, además se integra con la capa FTP para solucionar problemas cuando no tengamos permisos de escritura en nuestro script.

Para listar los directorios simplemente puse en siguiente código en el fichero view.html.php de mi componente:

  1. jimport( ‘joomla.filesystem.folder’ );
  2. //Importamos los ficheros necesarios
  3.  
  4. $carpetas = JFolder::folders(JPATH_COMPONENT.DS.‘miDirectorio’);
  5.  
  6. //Obtenemos los directorios, el metodo folders devuelve un array con el nombre de los //directorios
  7.  
  8. if(count($carpetas > 0))
  9. {
  10.     foreach ($carpetas as $carpeta)
  11.     {
  12.             echo "Nombre del directorio: " . $carpeta ;
  13.     }
  14. }else{
  15.     echo “No hay directorios en ” .  JPATH_COMPONENT.DS.‘miDirectorio’;
  16. }
  17.  

Ahora veamos como hacer lo mismo con php sin usar el framework:

(código sacado de la web www.desarrolloweb.com )

  1. $ruta = /path/a/tu/directorio
  2.    // abrir un directorio y listarlo recursivo
  3.    if (is_dir($ruta)) {
  4.       if ($dh = opendir($ruta)) {
  5.          while (($file = readdir($dh)) !== false) {
  6.             //esta línea la utilizaríamos si queremos listar todo lo que hay en el directorio
  7.             //mostraría tanto archivos como directorios
  8.             //echo "Nombre de archivo: $file : Es un: " . filetype($ruta . $file);
  9.             if (is_dir($ruta . $file) && $file!="." && $file!=".."){
  10.                //solo si el archivo es un directorio, distinto que "." y ".."
  11.                echo "Directorio: $ruta$file";
  12.                listar_directorios_ruta($ruta . $file . "/");
  13.             }
  14.          }
  15.       closedir($dh);
  16.       }
  17.    }else
  18.       echo "No es ruta valida";
  19. }
  20.  

Como puedes ver, se comprueba manualmente si el directorio existe con la función is_dir(), esto ya lo lleva implementado el API de Joomla y no hace falta que lo volvamos a hacer si usamos el método folders.

Este es el código del método folders:

  1. function folders($path, $filter = ‘.’, $recurse = false, $fullpath = false, $exclude = array(‘.svn’, ‘CVS’))
  2.     {
  3.         // Initialize variables
  4.         $arr = array ();
  5.  
  6.         // Check to make sure the path valid and clean
  7.         $path = JPath::clean($path);
  8.  
  9.         // Is the path a folder?
  10.         if (!is_dir($path)) {
  11.             JError::raiseWarning(21, ‘JFolder::folder: ‘.JText::_(‘Path is not a folder’).‘ ‘.$path);
  12.             return false;
  13.         }
  14.  
  15.         // read the source directory
  16.         $handle = opendir($path);
  17.         while (($file = readdir($handle)) !== false)
  18.         {
  19.             $dir = $path.DS.$file;
  20.             $isDir = is_dir($dir);
  21.             if (($file != ‘.’) && ($file != ‘..’) && (!in_array($file, $exclude)) && $isDir) {
  22.                 // removes SVN directores from list
  23.                 if (preg_match("/$filter/", $file)) {
  24.                     if ($fullpath) {
  25.                         $arr[] = $dir;
  26.                     } else {
  27.                         $arr[] = $file;
  28.                     }
  29.                 }
  30.                 if ($recurse) {
  31.                     if (is_integer($recurse)) {
  32.                         $recurse–;
  33.                     }
  34.                     $arr2 = JFolder::folders($dir, $filter, $recurse, $fullpath);
  35.                     $arr = array_merge($arr, $arr2);
  36.                 }
  37.             }
  38.         }
  39.         closedir($handle);
  40.  
  41.         asort($arr);
  42.         return $arr;
  43.     }
  44.  

Como puedes comprobar se hacen todo tipo de comprobaciones y nos libra de realizarlas a mano.

Puedes ver más métodos interesantes en la documentación oficial del API de Joomla

Subir ficheros al servidor con el API de Joomla!

Joomla, Programación

13 de Marzo del 2008

Vamos a ver como subir un fichero al servidor usando el API de Joomla!.

La ventaja de usar el API de Joomla! es que internamente comprueba si se esta usando la capa FTP y si esta configurada se usará para subir el fichero.

Primero creamos una vista donde mostraremos un formulario con un input de tipo “file”. El formulario ha de tener enctype=”multipart/form-data” como atributo, de lo contrario, apache no sabrá interpretar los datos recogidos en la variable post como ficheros. El enctype multipart/form-data especifica que vamos a poder enviar tanto texto como ficheros.

Código de la vista

  1.  
  2. <form name="registro" id="registro"  action="index.php" method="POST" enctype="multipart/form-data"  >
  3.  
  4.     Introduce el fichero :
  5. <input type="file" name="fichero"  />
  6. <input type="submit" value="Subir Fichero" />
  7. <input type="hidden" name="option" value="com_aplicacion" />
  8. <input type="hidden" name="task" value="subirFichero" />
  9. </form>
  10.  

La vista es enviada a un task, en este caso el task se llama subirFichero, así que creamos un método en el controlador con este nombre e introducimos el siguiente código :
(Si no entiendes lo que es un task, vista, etc… hay un tutorial bastante extenso sobre componentes donde se explica)

Código del task

  1.  
  2. $file = JRequest::getVar( ‘fichero’, null, ‘files’, ‘array’ );
  3.  
  4. jimport(‘joomla.filesystem.file’);
  5.  
  6.         if(!is_array($file)){
  7.             $mensaje .= "NoSeHaSubido";
  8.          }
  9.          if($file[‘error’] || $file[’size’] < 1 ){
  10.             $mensaje .= " NoExisteFichero";
  11.         }
  12.          if( $file[’size’] > 100  ){
  13.             $mensaje .=" FicheroDemasiadoGrande";
  14.              }
  15.  
  16.         if(!JFile::upload($file[‘tmp_name’],"/directorioLocal".DS. $file[‘name’])){
  17.  
  18.             $mensaje .= " ErrorAlSubirElFichero";
  19.         }
  20.  

En la primera línea obtenemos el fichero de la petición proveniente del formulario. Investiga más sobre los métodos de JRequest , te será muy útil!!.

La segunda línea sirve para importar el objeto JFile que usaremos para introducir el fichero en nuestro sistema de ficheros local.

Por último llevamos a cabo algunas comprobaciones para ver si el fichero es demasiado grande ,demasiado pequeño o si no se ha subido ningún fichero y vamos guardando en una variable el mensaje de error correspondiente, para que después solo haya que invocar el método upload del objeto JFile al cual le pasamos como primer parámetro el fichero temporal que aún se encuentra en la petición y como segundo parámetro la ruta completa en el disco local (incluyendo el nombre del fichero) donde queremos guardar el fichero.

Ya debería de estar fichero correctamente subido en el disco duro del servidor ;-)

Nueva API de Google: Google Contacts API

APIs

13 de Marzo del 2008

Google ha sacado su nueva API para administrar contactos, con esta Api se posibilita a los programadores acceder a la lista de contactos de Google, que es compartida entre Gmail, Google Calendar y Google Reader entre otras…

Si te apetece trastear con ella, échale un ojo a la guía para desarrolladores y a la referencia

En el blog de Dirson ya han hecho un primer ejemplo usando el API.

Otra nueva API interesante que nos ofrece Google y que habrá que aprender…

Tutorial: Componente para Joomla 1.5 IV

Frameworks, Joomla, Programación

7 de Febrero del 2008

El tutorial anterior fue una introducción a la creación de componentes en Joomla 1.5, pero aun faltan muchas cosas.

Faltan cosas como el acceso a datos mediante el framework de Joomla, los tasks y más cosas que se me escapan he iré completando más adelante.

Para la parte de back-end, el sistema es el mismo, lo único que deberemos de ubicar el componente en la carpeta administrator/components . El acceso al componente es por la URL …tuSitio/administrator/index.php?option=com_prueba .

El api de Joomla! nos provee de unos objetos específicos para operar con bases de datos.

Siempre que se pueda es recomendable usar estos objetos, en lugar de conectar directamente con las funciones de mysql que tiene php, ya que el API de Joomla! hace mucho trabajo por debajo, como protección contra inyección Sql, optimización, etc…

Lee el resto de esta entrada »

blank
[x] Cerrar
E-mail