Dossiers dépliés
This commit is contained in:
parent
c4fc466876
commit
49180ab4ed
@ -36,9 +36,13 @@ class folder extends common
|
|||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
// Configuration de l'affichage
|
||||||
$config['showsubfolder'] = $this->getData(['module', $this->getUrl(0), 'subfolder']);
|
$config['showsubfolder'] = $this->getData(['module', $this->getUrl(0), 'subfolder']);
|
||||||
$config['sort'] = $this->getData(['module', $this->getUrl(0), 'sort']);
|
$config['sort'] = $this->getData(['module', $this->getUrl(0), 'sort']);
|
||||||
|
$config['showdetails'] = $this->getData(['module', $this->getUrl(0), 'details']);
|
||||||
|
$config['initialfolderstate'] = $this->getData(['module', $this->getUrl(0), 'folderstate']);
|
||||||
|
|
||||||
|
// Générer l'affichage
|
||||||
self::$folders = $this->getFolderContent($this->getData(['module', $this->getUrl(0), 'path']), $config);
|
self::$folders = $this->getFolderContent($this->getData(['module', $this->getUrl(0), 'path']), $config);
|
||||||
|
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
@ -66,7 +70,8 @@ class folder extends common
|
|||||||
'sort' => $this->getInput('folderConfigSort', helper::FILTER_BOOLEAN),
|
'sort' => $this->getInput('folderConfigSort', helper::FILTER_BOOLEAN),
|
||||||
'subfolder' => $this->getInput('folderConfigSubfolder', helper::FILTER_BOOLEAN),
|
'subfolder' => $this->getInput('folderConfigSubfolder', helper::FILTER_BOOLEAN),
|
||||||
'folder' => $this->getInput('folderConfigFolder', helper::FILTER_BOOLEAN),
|
'folder' => $this->getInput('folderConfigFolder', helper::FILTER_BOOLEAN),
|
||||||
|
'details' => $this->getInput('folderConfigDetails', helper::FILTER_BOOLEAN),
|
||||||
|
'folderstate' => $this->getInput('folderConfigFolderState', helper::FILTER_BOOLEAN),
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@ -88,74 +93,104 @@ class folder extends common
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getFolderContent($chemin, $config = [])
|
||||||
|
{
|
||||||
|
$showSubFolder = isset ($config['showsubfolder']) ? $config['showsubfolder'] : true;
|
||||||
|
$sort = isset ($config['sort']) ? $config['sort'] : true;
|
||||||
|
$showDetails = isset ($config['showdetails']) ? $config['showdetails'] : false;
|
||||||
|
$initialFolderState = isset ($config['initialfolderstate']) ? $config['initialfolderstate'] : 'collapsed';
|
||||||
|
|
||||||
private function getFolderContent($chemin, $config = [])
|
// Vérifier si le chemin existe et est un dossier
|
||||||
{
|
if (is_dir($chemin)) {
|
||||||
$showSubFolder = isset($config['showsubfolder']) ? $config['showsubfolder'] : true;
|
// Ouvrir le dossier
|
||||||
$sort = isset($config['sort']) ? $config['sort'] : true;
|
if ($dh = opendir($chemin)) {
|
||||||
|
// Initialiser les tableaux pour les sous-dossiers et les fichiers
|
||||||
|
$subDirectories = [];
|
||||||
|
$files = [];
|
||||||
|
|
||||||
// Vérifier si le chemin existe et est un dossier
|
// Parcourir les éléments du dossier
|
||||||
if (is_dir($chemin)) {
|
while (($element = readdir($dh)) !== false) {
|
||||||
// Ouvrir le dossier
|
// Exclure les éléments spéciaux
|
||||||
if ($dh = opendir($chemin)) {
|
if ($element != '.' && $element != '..') {
|
||||||
// Initialiser les tableaux pour les sous-dossiers et les fichiers
|
// Construire le chemin complet de l'élément
|
||||||
$subDirectories = [];
|
$cheminComplet = $chemin . '/' . $element;
|
||||||
$files = [];
|
|
||||||
|
|
||||||
// Parcourir les éléments du dossier
|
// Vérifier si c'est un dossier
|
||||||
while (($element = readdir($dh)) !== false) {
|
if (is_dir($cheminComplet)) {
|
||||||
// Exclure les éléments spéciaux
|
// Ajouter le dossier au tableau des sous-dossiers
|
||||||
if ($element != '.' && $element != '..') {
|
$subDirectories[] = $element;
|
||||||
// Construire le chemin complet de l'élément
|
} else {
|
||||||
$cheminComplet = $chemin . '/' .$element;
|
// Ajouter le fichier au tableau des fichiers
|
||||||
|
$files[] = $element;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Vérifier si c'est un dossier
|
// Fermer le dossier
|
||||||
if (is_dir($cheminComplet)) {
|
closedir($dh);
|
||||||
// Ajouter le dossier au tableau des sous-dossiers
|
|
||||||
$subDirectories[] = $element;
|
|
||||||
} else {
|
|
||||||
// Ajouter le fichier au tableau des fichiers
|
|
||||||
$files[] = $element;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fermer le dossier
|
// Trier les sous-dossiers et les fichiers si nécessaire
|
||||||
closedir($dh);
|
if ($sort) {
|
||||||
|
sort($subDirectories);
|
||||||
|
sort($files);
|
||||||
|
}
|
||||||
|
|
||||||
// Trier les sous-dossiers et les fichiers si nécessaire
|
// Initialiser la liste des éléments
|
||||||
if ($sort) {
|
$items = '<ul>';
|
||||||
sort($subDirectories);
|
|
||||||
sort($files);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initialiser la liste des éléments
|
// Ajouter les sous-dossiers à la liste si configuré pour les afficher
|
||||||
$items = '<ul>';
|
if ($showSubFolder) {
|
||||||
|
foreach ($subDirectories as $subDirectory) {
|
||||||
|
$folderClass = '';
|
||||||
|
if ($initialFolderState == 'collapsed') {
|
||||||
|
$folderClass = 'collapsible';
|
||||||
|
}
|
||||||
|
$items .= "<li class='directory $folderClass'><span class='toggle'>$subDirectory</span><ul class='sub-items'";
|
||||||
|
if ($initialFolderState == 'collapsed') {
|
||||||
|
$items .= " style='display:none;'";
|
||||||
|
}
|
||||||
|
$items .= '>';
|
||||||
|
// Appeler récursivement la fonction pour ce sous-dossier
|
||||||
|
$items .= $this->getFolderContent($chemin . '/' . $subDirectory, $config);
|
||||||
|
$items .= '</ul></li>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Ajouter les sous-dossiers à la liste si configuré pour les afficher
|
// Ajouter les fichiers à la liste
|
||||||
if ($showSubFolder) {
|
foreach ($files as $file) {
|
||||||
foreach ($subDirectories as $subDirectory) {
|
$fileFullPath = $chemin . '/' . $file;
|
||||||
$items .= "<li class='directory'>$subDirectory";
|
$fileInfo = '';
|
||||||
// Appeler récursivement la fonction pour ce sous-dossier
|
if ($showDetails) {
|
||||||
$items .= $this->getFolderContent($chemin . '/' . $subDirectory, $config);
|
$fileSize = filesize($fileFullPath);
|
||||||
$items .= '</li>';
|
$fileSizeFormatted = $this->formatSizeUnits($fileSize);
|
||||||
}
|
$fileInfo = "<span class='file-info'> " . date("Y-m-d H:i:s", filemtime($fileFullPath)) . ", $fileSizeFormatted</span>";
|
||||||
}
|
}
|
||||||
|
$items .= "<li class='file'><a href='$fileFullPath' data-lity>$file</a>$fileInfo</li>";
|
||||||
|
}
|
||||||
|
|
||||||
// Ajouter les fichiers à la liste
|
// Fermer la liste
|
||||||
foreach ($files as $file) {
|
$items .= "</ul>";
|
||||||
$items .= "<li class='file'><a href='" . $chemin . '/' . $file . "' data-lity>$file</a></li>";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fermer la liste
|
return $items;
|
||||||
$items .= "</ul>";
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return $items;
|
return '';
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
private function formatSizeUnits($bytes)
|
||||||
|
{
|
||||||
|
$units = array('octest', 'Ko', 'Mo', 'Go', 'To');
|
||||||
|
$i = 0;
|
||||||
|
while ($bytes >= 1024) {
|
||||||
|
$bytes /= 1024;
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
return round($bytes, 2) . ' ' . $units[$i];
|
||||||
|
}
|
||||||
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -34,16 +34,26 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col4">
|
<div class="col3">
|
||||||
<?php echo template::checkbox('folderConfigSort', true, 'Trier les dossiers et les fichiers', [
|
<?php echo template::checkbox('folderConfigSort', true, 'Trier les dossiers et les fichiers', [
|
||||||
'checked' => $this->getData(['module', $this->getUrl(0), 'sort'])
|
'checked' => $this->getData(['module', $this->getUrl(0), 'sort'])
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col4">
|
<div class="col3">
|
||||||
<?php echo template::checkbox('folderConfigSubfolder', true, 'Descendre dans l\'arboresence', [
|
<?php echo template::checkbox('folderConfigSubfolder', true, 'Descendre dans l\'arboresence', [
|
||||||
'checked' => $this->getData(['module', $this->getUrl(0), 'subfolder'])
|
'checked' => $this->getData(['module', $this->getUrl(0), 'subfolder'])
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col3">
|
||||||
|
<?php echo template::checkbox('folderConfigDetails', true, 'Date et poids', [
|
||||||
|
'checked' => $this->getData(['module', $this->getUrl(0), 'details'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
|
<div class="col3">
|
||||||
|
<?php echo template::checkbox('folderConfigFolderState', true, 'Dossiers pliés', [
|
||||||
|
'checked' => $this->getData(['module', $this->getUrl(0), 'folderstate'])
|
||||||
|
]); ?>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#dirindex article {
|
#dirindex article {
|
||||||
display: block;
|
display: block;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
width: 480px;
|
width: 600px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#dirindex a {
|
#dirindex a {
|
||||||
@ -43,3 +43,18 @@
|
|||||||
padding-left: 5px;
|
padding-left: 5px;
|
||||||
list-style-position : outside;
|
list-style-position : outside;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Style pour le pliage/dépliage des dossiers */
|
||||||
|
.toggle {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Style pour les sous-éléments des dossiers */
|
||||||
|
.sub-items {
|
||||||
|
list-style-type: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Style pour les informations de fichier */
|
||||||
|
.file-info {
|
||||||
|
float: right;
|
||||||
|
}
|
11
module/folder/view/index/index.js.php
Normal file
11
module/folder/view/index/index.js.php
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
// Gérer le clic sur les éléments avec la classe toggle
|
||||||
|
$('.toggle').click(function() {
|
||||||
|
// Trouver le prochain élément de type ul avec la classe sub-items
|
||||||
|
var subItems = $(this).next('ul.sub-items');
|
||||||
|
// Toggle pour afficher ou cacher les sous-éléments
|
||||||
|
subItems.slideToggle();
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in New Issue
Block a user