Implement directory content detection for list views
Add support for custom list-grid template Load directory metadata and page content Improve directory handling logic
This commit is contained in:
parent
d937ca6166
commit
60ba4b5545
1 changed files with 34 additions and 1 deletions
|
@ -129,7 +129,15 @@ function parseRequestPath(string $requestPath, string $contentDir, array $patter
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_dir($contentPath)) {
|
if (is_dir($contentPath)) {
|
||||||
if ($file = findMatchingFile($contentPath, $patterns['single']) ?: findMatchingFile($contentPath, $patterns['page'])) {
|
// Check if directory has subdirectories
|
||||||
|
$hasSubdirs = !empty(array_filter(
|
||||||
|
scandir($contentPath) ?: [],
|
||||||
|
fn($item) => !in_array($item, ['.', '..']) && is_dir("$contentPath/$item")
|
||||||
|
));
|
||||||
|
|
||||||
|
// If directory has subdirectories, treat as directory (for list views)
|
||||||
|
// Otherwise, if it has a content file, treat as file
|
||||||
|
if (!$hasSubdirs && ($file = findMatchingFile($contentPath, $patterns['single']) ?: findMatchingFile($contentPath, $patterns['page']))) {
|
||||||
return ['type' => 'file', 'path' => $file, 'needsSlash' => !$hasTrailingSlash];
|
return ['type' => 'file', 'path' => $file, 'needsSlash' => !$hasTrailingSlash];
|
||||||
}
|
}
|
||||||
return ['type' => 'directory', 'path' => realpath($contentPath)];
|
return ['type' => 'directory', 'path' => realpath($contentPath)];
|
||||||
|
@ -376,6 +384,31 @@ switch ($parsedPath['type']) {
|
||||||
renderFile("$dir/index.php");
|
renderFile("$dir/index.php");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check for page content file in this directory
|
||||||
|
$pageContent = null;
|
||||||
|
if ($pageFile = findMatchingFile($dir, $pageFilePatterns['page'])) {
|
||||||
|
$ext = pathinfo($pageFile, PATHINFO_EXTENSION);
|
||||||
|
ob_start();
|
||||||
|
if ($ext === 'md') {
|
||||||
|
if (!class_exists('Parsedown')) {
|
||||||
|
require_once __DIR__ . '/vendor/Parsedown.php';
|
||||||
|
}
|
||||||
|
echo (new Parsedown())->text(file_get_contents($pageFile));
|
||||||
|
} else {
|
||||||
|
include $pageFile;
|
||||||
|
}
|
||||||
|
$pageContent = ob_get_clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load metadata for this directory
|
||||||
|
$metadata = loadMetadata($dir, $currentLang, $defaultLang);
|
||||||
|
|
||||||
|
// Check for custom list template (prefer list-grid.php over list.php)
|
||||||
|
$customListGridTemplate = dirname(__DIR__) . '/custom/templates/list-grid.php';
|
||||||
|
if (file_exists($customListGridTemplate)) {
|
||||||
|
$listTemplate = $customListGridTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
// Default directory listing
|
// Default directory listing
|
||||||
$subdirs = array_filter(
|
$subdirs = array_filter(
|
||||||
scandir($dir) ?: [],
|
scandir($dir) ?: [],
|
||||||
|
|
Loading…
Add table
Reference in a new issue