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