Main Nav Header
Die Automatische Generierung der Main Navigation im Header.
Main Nav Header
Die Hauptnavigation im Header wird automatisch durch generate-navigation.js generiert. Das Script erstellt Links zu allen
Tutorial-Kategorien.
HTML-Struktur
Die Navigation wird im Header zwischen den Kommentar-Markern
<!-- Main-Nav-Start --> und <!-- Main-Nav-End-->
eingefügt:
<header class="site-header">
<div class="container">
<div class="header-content">
<!-- Logo, Theme Toggle, Mobile Menu Button -->
<nav class="main-nav" id="mainNav">
<ul class="nav-list">
<li><a href="/" class="nav-link">Home</a></li>
<li class="nav-item-dropdown">
<button class="nav-link dropdown-toggle" aria-expanded="false">
Tutorials
<span class="dropdown-icon">▾</span>
</button>
<ul class="dropdown-menu">
<!-- Main-Nav-Start -->
<!-- Main-Nav-End -->
</ul>
</li>
<li><a href="/glossary.html" class="nav-link">Glossar</a></li>
</ul>
</nav>
</div>
</div>
</header>
Wie funktioniert's?
Das Script liest die mainCategories aus der Konfiguration und
generiert für jede Kategorie einen Link:
- HTML →
/tutorials/html/ - CSS →
/tutorials/css/ - Bootstrap →
/tutorials/bootstrap/
- JavaScript →
/tutorials/javascript/ - PHP →
/tutorials/php/ - Verschiedenes →
/tutorials/misc/
Beispiel: Generierte Navigation
Nach dem Ausführen von npm run generate wird der Bereich zwischen den
Markern automatisch gefüllt:
<ul class="dropdown-menu">
<!-- Main-Nav-Start -->
<li><a href="/tutorials/html/">HTML</a></li>
<li><a href="/tutorials/css/">CSS</a></li>
<li><a href="/tutorials/bootstrap/">Bootstrap</a></li>
<li><a href="/tutorials/javascript/">JavaScript</a></li>
<li><a href="/tutorials/php/">PHP</a></li>
<li><a href="/tutorials/misc/">Verschiedenes</a></li>
<!-- Main-Nav-End -->
</ul>
Kategorien hinzufügen oder ändern
Um die Navigation anzupassen, bearbeite die mainCategories in generate-navigation.js:
/**
* Generiert die Main Navigation (Dropdown-Menü)
*/
function generateMainNav() {
const mainCategories = [
{ path: 'tutorials/html/', label: 'HTML' },
{ path: 'tutorials/css/', label: 'CSS' },
{ path: 'tutorials/bootstrap/', label: 'Bootstrap' },
{ path: 'tutorials/javascript/', label: 'JavaScript' },
{ path: 'tutorials/php/', label: 'PHP' },
{ path: 'tutorials/misc/', label: 'Verschiedenes' },
// Neue Kategorie hier hinzufügen:
// { path: 'tutorials/documentation/', label: 'Dokumentation' },
];
let navHTML = '';
mainCategories.forEach(category => {
navHTML += ` <li><a href="/${category.path}">${category.label}</a></li>\n`;
});
return navHTML.trimEnd();
}
Neue Hauptkategorie hinzufügen
- Erstelle den Ordner:
/tutorials/[kategorie-name]/ - Erstelle eine
index.htmlin diesem Ordner - Öffne
generate-navigation.js - Füge die neue Kategorie zu
mainCategorieshinzu:
const mainCategories = [
{ path: 'tutorials/html/', label: 'HTML' },
{ path: 'tutorials/css/', label: 'CSS' },
{ path: 'tutorials/bootstrap/', label: 'Bootstrap' },
{ path: 'tutorials/javascript/', label: 'JavaScript' },
{ path: 'tutorials/php/', label: 'PHP' },
{ path: 'tutorials/documentation/', label: 'Dokumentation' }, // Neue Kategorie
{ path: 'tutorials/misc/', label: 'Verschiedenes' },
];
- Führe
npm run generateaus - Die neue Kategorie erscheint automatisch in der Navigation auf allen Seiten
- Die Navigation wird auf allen HTML-Seiten aktualisiert, die die Kommentar-Marker enthalten
- Die Reihenfolge im
mainCategoriesArray bestimmt die Reihenfolge im Dropdown - Der
pathmuss mit einem/enden - Es muss eine
index.htmlim Zielordner existieren, sonst führt der Link ins Leere
Technische Details: Wie das Script arbeitet
Der Generierungs-Prozess läuft in folgenden Schritten ab:
- HTML-Dateien finden: Das Script durchsucht alle Dateien rekursiv (außer Blacklist-Ordner)
- Marker suchen: In jeder Datei wird nach
<!-- Main-Nav-Start -->und<!-- Main-Nav-End -->gesucht - Navigation generieren: Aus
mainCategorieswird HTML-Code erstellt - Inhalt ersetzen: Der Bereich zwischen den Markern wird mit dem neuen HTML ersetzt
- Datei speichern: Die aktualisierte HTML-Datei wird gespeichert
/**
* Aktualisiert die Main Navigation in allen HTML-Dateien
*/
function updateMainNavigation(files) {
const mainNavContent = generateMainNav();
let updatedCount = 0;
files.forEach(file => {
const filePath = path.join(BASE_DIR, file);
let content = fs.readFileSync(filePath, 'utf8');
const startMarker = '<!-- Main-Nav-Start -->';
const endMarker = '<!-- Main-Nav-End -->';
if (content.includes(startMarker) && content.includes(endMarker)) {
const before = content.substring(0, content.indexOf(startMarker) + startMarker.length);
const after = content.substring(content.indexOf(endMarker));
content = before + '\n' + mainNavContent + '\n ' + after;
fs.writeFileSync(filePath, content, 'utf8');
updatedCount++;
}
});
console.log(`✅ Main Navigation aktualisiert in ${updatedCount} Dateien`);
}
Blacklist: Ignorierte Ordner
Bestimmte Ordner werden von allen Navigations-Funktionen ignoriert. Diese
Ordner werden in der blacklistFolders Konstante definiert:
// Blacklist: Diese Ordner werden ignoriert
const blacklistFolders = ['noupload', 'node_modules', '.git', 'assets'];
Weitere Ordner können in einfachen 'Anführungszeichen' hinzugefügt werden, immer kommagetrennt.
Warum werden diese Ordner ignoriert?
noupload– Test-Dateien, die nicht live gehen sollennode_modules– NPM-Abhängigkeiten
.git– Git-Versionskontrolleassets– CSS, JS, Bilder (keine HTML-Inhalte)
Ausführen
Nach allen Änderungen ausführen:
npm run generate
Mehr aus DevPanicZone!
Tutorials werden geladen...