2010-01-21 3 views
0

J'essaie de générer une classe basée sur le nom du nom de répertoire le plus proche, mais je n'arrive pas à l'obtenir correctement. Toute aide sera la bienvenue. Il est un php_file_tree, s'il vous plaît voir la section numérotée # 39 ci-dessous:Comment obtenir le nom de répertoire le plus proche

function php_file_tree_dir($directory, $return_link, $extensions = array(), $first_call = TRUE) { 
    // Get and sort directories/files 
    if (function_exists("scandir")) { 
    $file = scandir($directory); 
    } 
    else { 
    $file = php4_scandir($directory); 
    } 
    natcasesort($file); 
    // Make directories first 
    $files = $dirs = array(); 

    foreach ($file as $this_file) { 
    if (is_dir("$directory/$this_file")) { 
     $dirs[] = $this_file; 
    } 
    else $files[] = $this_file; 
    } 

    $file = array_merge($dirs, $files); 

    // Filter unwanted extensions 
    if (!empty($extensions)) { 
    foreach (array_keys($file) as $key) { 
     if (!is_dir("$directory/$file[$key]")) { 
     $ext = substr($file[$key], strrpos($file[$key], ".") + 1); 
     if (!in_array($ext, $extensions))unset($file[$key]); 
     } 
    } 
    } 
    // Use 2 instead of 0 to account for . and .. "directories" 
    if (count($file) > 2) { 
    $php_file_tree = "<ul"; 
    if ($first_call) { 
     $php_file_tree .= " class=\"php-file-tree clearfix\""; 
     $first_call = FALSE; 
    } 

    // #39, Here needs to output a class based on innermost directory name 
    /* 
    else { 
     $php_file_tree .= " class=\"innertree ". htmlspecialchars(basename(rtrim($directory, '/'))) ." clearfix\""; 
    } 
    */ 

    $php_file_tree .= ">"; 
    foreach ($file as $this_file) { 
     if ($this_file != "." && $this_file != "..") { 
     if (is_dir("$directory/$this_file")) { 
      // Directory 
      $php_file_tree .= "<li class=\"pft-directory\"><a class=\"folder \" href=\"#\">". htmlspecialchars($this_file) ."</a>"; 
      $php_file_tree .= php_file_tree_dir("$directory/$this_file", $return_link, $extensions, FALSE); 
      $php_file_tree .= "</li>"; 
     } 
     else { 
      //$ext = "ext-". substr($this_file, strrpos($this_file, ".") + 1); // need to compare speed with native 
      $ext = "ext-". pathinfo($this_file, PATHINFO_EXTENSION); 
      $link = str_replace("[link]", base_path() ."$directory/". urlencode($this_file), $return_link); 
      $php_file_tree .= "<li class=\"pft-file ". strtolower($ext) ."\"><a class=\"screenshot\" title=". htmlspecialchars($this_file) ." href=\"$link\">". htmlspecialchars($this_file) ."</a></li>"; 
     } 
     } 
    } 
    $php_file_tree .= "</ul>"; 
    } 
    return $php_file_tree; 
} 

Le plus élevé répertoire aura toujours une classe « php-file-tree », alors que les suivants/répertoires suivants sous auront leurs cours en fonction de leur propre noms de dossier.

Répondre

1

En fait, c'était déjà bien. Semble le problème était cache ou quelque chose comme je l'ai placé dans la boîte de dialogue modale avec l'appel AJAX. J'ai essayé plusieurs possibilités auparavant, y compris "$ first_call = FALSE;" en vain. Mais quand j'ai revisité le répertoire, ajouté "$ first_call = FALSE;", et efface tout, il affiche maintenant correctement le nom du dossier.

Désolé de déranger, n'importe qui. Merci

+0

Ces «bogues» sont les pires! Je ressens ta douleur –

+0

Oui :) Les navigateurs tenaient toujours l'ancienne page je suppose. J'espère que j'ai bien fait les choses. Merci – swan

+0

Si c'est un appel AJAX ce n'est pas le navigateur qui met en cache, mais le serveur. Vous pouvez désactiver cela normalement. – Anonymous