Implement modern sidebar navigation with hamburger menu
- Add responsive sidebar with hamburger toggle functionality - Implement dual toggle buttons (inner/outer) for better UX - Fix sidebar positioning to not overlap header and footer - Add sticky footer with proper z-index layering - Download and integrate Bootstrap source maps locally - Optimize toggle icons: smaller, cleaner, no button styling - Ensure sidebar respects footer boundaries - Add smooth transitions and hover effects - Fix active page highlighting and folder auto-expansion - Create professional W3Schools-style navigation - Maintain full offline capability with local assets
This commit is contained in:
@@ -427,10 +427,16 @@ private function autoLinkPageTitles($content) {
|
||||
|
||||
if ($hasChildren) {
|
||||
$folderId = 'folder-' . str_replace('/', '-', $item['path']);
|
||||
$html .= '<span class="nav-link folder-toggle" data-bs-toggle="collapse" data-bs-target="#' . $folderId . '" aria-expanded="false">';
|
||||
|
||||
// Check if this folder contains the active page
|
||||
$containsActive = $this->folderContainsActivePage($item['children']);
|
||||
$ariaExpanded = $containsActive ? 'true' : 'false';
|
||||
$collapseClass = $containsActive ? 'collapse show' : 'collapse';
|
||||
|
||||
$html .= '<span class="nav-link folder-toggle" data-bs-toggle="collapse" data-bs-target="#' . $folderId . '" aria-expanded="' . $ariaExpanded . '">';
|
||||
$html .= '<i class="arrow bi bi-chevron-right"></i> ' . htmlspecialchars($item['title']);
|
||||
$html .= '</span>';
|
||||
$html .= '<ul class="nav flex-column ms-2 collapse" id="' . $folderId . '">';
|
||||
$html .= '<ul class="nav flex-column ms-2 ' . $collapseClass . '" id="' . $folderId . '">';
|
||||
$html .= $this->renderMenu($item['children'], $level + 1);
|
||||
$html .= '</ul>';
|
||||
} else {
|
||||
@@ -449,6 +455,21 @@ private function autoLinkPageTitles($content) {
|
||||
}
|
||||
return $html;
|
||||
}
|
||||
|
||||
private function folderContainsActivePage($children) {
|
||||
foreach ($children as $child) {
|
||||
if ($child['type'] === 'folder') {
|
||||
if (!empty($child['children']) && $this->folderContainsActivePage($child['children'])) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
if (isset($_GET['page']) && $_GET['page'] === $child['path']) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
$cms = new CodePressCMS($config);
|
||||
|
||||
Reference in New Issue
Block a user