Tutorial Buttons
Die generierten Buttons auf den Kategorieseiten im Detail.
Tutorial-Listen auf Kategorieseiten
Auf Kategorieseiten (z.B. /tutorials/css/index.html) werden
automatisch alle Tutorials dieser Kategorie als Button-Grid angezeigt. Die Buttons sind nach
Unterkategorien gruppiert und werden aus TUTORIAL_ORDER
generiert.
HTML-Struktur
Die Tutorial-Buttons werden zwischen Kommentar-Markern eingefügt:
<section class="tutorials-content">
<h2>Alle CSS Tutorials</h2>
<!-- Tutorial-Buttons-Start -->
<!-- Wird automatisch gefüllt -->
<!-- Tutorial-Buttons-End -->
</section>
Die Kategorie wird automatisch aus dem Dateipfad ermittelt. Bei /tutorials/css/index.html erkennt das Script, dass es sich um
die CSS-Kategorie handelt.
Beispiel: Generierte Buttons
Das Script generiert gruppierte Button-Listen mit Anker-IDs:
<!-- Tutorial-Buttons-Start -->
<div id="tutorialButtons" class="tutorial-buttons" data-category="css">
<div id="css-basics" class="tutorial-group">
<h3 class="tutorial-group-title">CSS Basics</h3>
<div class="tutorial-group-buttons">
<a href="/tutorials/css/css-basics/css-einbinden.html" class="tutorial-button">CSS einbinden</a>
<a href="/tutorials/css/css-basics/css-grundlagen.html" class="tutorial-button">CSS Grundlagen</a>
<a href="/tutorials/css/css-basics/css-color-units.html" class="tutorial-button">CSS Farben & Einheiten</a>
</div>
</div>
<div id="css-advanced" class="tutorial-group">
<h3 class="tutorial-group-title">CSS Advanced</h3>
<div class="tutorial-group-buttons">
<!-- Buttons hier... -->
</div>
</div>
<div id="css-specials" class="tutorial-group">
<h3 class="tutorial-group-title">CSS Specials</h3>
<div class="tutorial-group-buttons">
<a href="/tutorials/css/css-specials/css-organization.html" class="tutorial-button">CSS Organization</a>
</div>
</div>
</div>
<!-- Tutorial-Buttons-End -->
HTML-Elemente erklärt
#tutorialButtons→ Haupt-Container.tutorial-group→ Container pro Unterkategorieid="css-basics"→ Anker-ID für Deep-Links
.tutorial-group-title→ Gruppenüberschrift.tutorial-group-buttons→ Button-Container.tutorial-button→ Einzelner Button
Jede Gruppe hat eine ID (z.B. id="css-basics"). Dadurch kann
die Main Navigation direkt zu einer Gruppe verlinken: /tutorials/css/#css-basics
Wie funktioniert's?
Das Script durchsucht TUTORIAL_ORDER nach allen Einträgen der
Kategorie:
// Für /tutorials/css/index.html findet das Script:
const TUTORIAL_ORDER = {
'tutorials/css/css-basics': [
'css-einbinden.html',
'css-grundlagen.html',
'css-color-units.html'
],
'tutorials/css/css-advanced': [
// ...
],
'tutorials/css/css-specials': [
'css-organization.html'
]
};
// Ergebnis: Drei Gruppen mit Buttons werden erstellt
generateTutorialButtons()
Diese Funktion generiert das HTML für alle Tutorial-Gruppen:
function generateTutorialButtons(category) {
const subcategories = {};
// 1. Sammle alle Unterkategorien dieser Kategorie
Object.keys(TUTORIAL_ORDER).forEach(key => {
if (key.startsWith(`tutorials/${category}/`)) {
const parts = key.split('/');
const subcategoryName = parts[2]; // z.B. "css-basics"
if (!subcategories[subcategoryName]) {
subcategories[subcategoryName] = [];
}
// 2. Hole die Tutorials dieser Unterkategorie
const tutorials = getOrderedTutorials(key);
subcategories[subcategoryName].push(...tutorials);
}
});
let html = '';
// 3. Generiere HTML für jede Gruppe
Object.keys(subcategories).forEach(subcategoryName => {
const tutorials = subcategories[subcategoryName];
if (tutorials.length === 0) return;
// 4. Gruppentitel mit korrekter Kapitalisierung
const displayName = capitalizeWithAcronyms(subcategoryName);
html += `
<div id="${subcategoryName}" class="tutorial-group">
<h3 class="tutorial-group-title">${displayName}</h3>
<div class="tutorial-group-buttons">`;
// 5. Button für jedes Tutorial
tutorials.forEach(tutorial => {
html += `
<a href="${tutorial.url}" class="tutorial-button">${tutorial.title}</a>`;
});
html += `
</div>
</div>`;
});
return html;
}
Reihenfolge der Gruppen und Buttons
Die Reihenfolge wird aus TUTORIAL_ORDER übernommen:
- Gruppen-Reihenfolge: Wie die Keys in
TUTORIAL_ORDERdefiniert sind - Button-Reihenfolge: Wie die Dateien im jeweiligen Array sortiert sind
- Button-Titel: Aus
CUSTOM_TITLES(falls vorhanden) oder aus der H1-Überschrift
Neues Tutorial hinzufügen
- Erstelle das neue Tutorial (z.B.
css-grid.html) - Öffne
generate-navigation.js - Füge die Datei in
TUTORIAL_ORDERan der gewünschten Position ein:
'tutorials/css/css-basics': [
'css-einbinden.html',
'css-grundlagen.html',
'css-grid.html', // ← Neues Tutorial
'css-color-units.html'
]
- Optional: Custom Title in
CUSTOM_TITLEShinzufügen:
const CUSTOM_TITLES = {
'css-grid.html': 'CSS Grid Layout',
// ...
};
- Führe
npm run buildaus
Neue Tutorial-Gruppe hinzufügen
Um eine neue Unterkategorie zu erstellen (z.B. "CSS Layouts"):
- Erstelle den Ordner:
/tutorials/css/css-layouts/ - Erstelle Tutorials in diesem Ordner
- Füge die Gruppe in
TUTORIAL_ORDERhinzu:
const TUTORIAL_ORDER = {
'tutorials/css/css-basics': [
// ...
],
'tutorials/css/css-advanced': [
// ...
],
'tutorials/css/css-layouts': [ // ← Neue Gruppe
'css-flexbox.html',
'css-grid.html'
],
'tutorials/css/css-specials': [
// ...
]
};
- Führe
npm run buildaus
Die neue Gruppe erscheint automatisch auf der Kategorieseite und in der Main Navigation.
Gruppentitel und Akronyme
Gruppentitel werden mit capitalizeWithAcronyms() formatiert.
Diese Funktion berücksichtigt bekannte Akronyme:
const ACRONYMS = {
'html': 'HTML',
'css': 'CSS',
'php': 'PHP',
'js': 'JS',
'javascript': 'JavaScript',
'seo': 'SEO',
'ftp': 'FTP',
'devpaniczone': 'DevPanicZone'
};
function capitalizeWithAcronyms(text) {
return text.split('-')
.map(word => {
const lower = word.toLowerCase();
if (ACRONYMS[lower]) {
return ACRONYMS[lower];
}
return word.charAt(0).toUpperCase() + word.slice(1);
})
.join(' ');
}
Beispiele:
css-basics→ CSS Basicshtml-advanced→ HTML Advanced
javascript-projects→ JavaScript Projectsseo-optimization→ SEO Optimization
Ausführen
Nach Änderungen an TUTORIAL_ORDER oder CUSTOM_TITLES:
npm run build
Mehr aus DevPanicZone!
Tutorials werden geladen...