Como listar los directorios de un directorio con el framework de Joomla

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:

jimport( 'joomla.filesystem.folder' );
//Importamos los ficheros necesarios

$carpetas = JFolder::folders(JPATH_COMPONENT.DS.'miDirectorio');

//Obtenemos los directorios, el metodo folders devuelve un array con el nombre de los //directorios

if(count($carpetas > 0))
{
    foreach ($carpetas as $carpeta)
    {
	       	echo "Nombre del directorio: " . $carpeta ;
    }
}else{
	echo "No hay directorios en ".  JPATH_COMPONENT.DS.'miDirectorio';
}

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

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

$ruta = /path/a/tu/directorio
   // abrir un directorio y listarlo recursivo
   if (is_dir($ruta)) {
      if ($dh = opendir($ruta)) {
         while (($file = readdir($dh)) !== false) {
            //esta línea la utilizaríamos si queremos listar todo lo que hay en el directorio
            //mostraría tanto archivos como directorios
            //echo "Nombre de archivo: $file : Es un: " . filetype($ruta . $file);
            if (is_dir($ruta . $file) && $file!="." && $file!=".."){
               //solo si el archivo es un directorio, distinto que "." y ".."
               echo "Directorio: $ruta$file";
               listar_directorios_ruta($ruta . $file . "/");
            }
         }
      closedir($dh);
      }
   }else
      echo "No es ruta valida";
}

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:

function folders($path, $filter = '.', $recurse = false, $fullpath = false, $exclude = array('.svn', 'CVS'))
	{
		// Initialize variables
		$arr = array ();

		// Check to make sure the path valid and clean
		$path = JPath::clean($path);

		// Is the path a folder?
		if (!is_dir($path)) {
			JError::raiseWarning(21, 'JFolder::folder: '.JText::_('Path is not a folder').' '.$path);
			return false;
		}

		// read the source directory
		$handle = opendir($path);
		while (($file = readdir($handle)) !== false)
		{
			$dir = $path.DS.$file;
			$isDir = is_dir($dir);
			if (($file != '.') && ($file != '..') && (!in_array($file, $exclude)) && $isDir) {
				// removes SVN directores from list
				if (preg_match("/$filter/", $file)) {
					if ($fullpath) {
						$arr[] = $dir;
					} else {
						$arr[] = $file;
					}
				}
				if ($recurse) {
					if (is_integer($recurse)) {
						$recurse--;
					}
					$arr2 = JFolder::folders($dir, $filter, $recurse, $fullpath);
					$arr = array_merge($arr, $arr2);
				}
			}
		}
		closedir($handle);

		asort($arr);
		return $arr;
	}

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

Compartir:
Abrir chat
¿Tienes alguna duda que podamos aclarar?