94 lines
3.0 KiB
PHP
94 lines
3.0 KiB
PHP
<?php
|
|
// build/generate_index.php
|
|
|
|
$dir = __DIR__ . '/../content/';
|
|
|
|
echo "DEBUG: Hledám soubory v cestě: $dir\n";
|
|
echo "DEBUG: Existuje složka? " . (is_dir($dir) ? "ANO" : "NE") . "\n";
|
|
|
|
$files = glob($dir . '*.md');
|
|
|
|
echo "DEBUG: Počet nalezených souborů: " . count($files) . "\n";
|
|
|
|
if (empty($files)) {
|
|
echo "Chyba: Nenašel jsem žádné .md soubory v $dir\n";
|
|
echo "Seznam obsahu složky:\n";
|
|
print_r(scandir($dir));
|
|
die();
|
|
}
|
|
|
|
$articles = [];
|
|
|
|
foreach ($files as $file) {
|
|
$content = file_get_contents($file);
|
|
$filename = basename($file, '.md');
|
|
|
|
// 1. Extrahování titulu (první řádek začínající #)
|
|
$lines = explode("\n", $content);
|
|
$title = $filename; // Fallback
|
|
foreach ($lines as $line) {
|
|
if (strpos(trim($line), '#') === 0) {
|
|
$title = trim(ltrim($line, '# '));
|
|
break;
|
|
}
|
|
}
|
|
|
|
// 2. Extrahování data (hledáme '> Datum: ...')
|
|
$date = date('Y-m-d'); // Fallback na dnes
|
|
foreach ($lines as $line) {
|
|
if (preg_match('/> Datum:\s*(.*)/', $line, $matches)) {
|
|
$rawDate = trim($matches[1]);
|
|
// Zkusíme převedení na formát Y-m-d
|
|
$parsedDate = strtotime($rawDate);
|
|
if ($parsedDate) {
|
|
$date = date('Y-m-d', $parsedDate);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
// 3. Vyčištění excerptu
|
|
// Odstraníme Markdown syntaxi pro lepší čitelnost ve vyhledávání
|
|
$cleanContent = $content;
|
|
$cleanContent = preg_replace('/^#.*$/m', '', $cleanContent); // Odstranit nadpisy
|
|
$cleanContent = preg_replace('/\*\*(.*?)\*\*/', '$1', $cleanContent); // Odstranit tučné
|
|
$cleanContent = preg_replace('/\*(.*?)\*/', '$1', $cleanContent); // Odstranit kurzívu
|
|
$cleanContent = preg_replace('/`(.+?)`/', '$1', $cleanContent); // Odstranit inline kód
|
|
$cleanContent = strip_tags($cleanContent); // Odstranit HTML (pokud nějaký vznikl)
|
|
$cleanContent = preg_replace('/\s+/', ' ', $cleanContent); // Sjednotit mezery
|
|
$cleanContent = trim($cleanContent);
|
|
|
|
$excerpt = mb_substr($cleanContent, 0, 150);
|
|
if (strlen($cleanContent) > 150) {
|
|
$excerpt .= '...';
|
|
}
|
|
|
|
$articles[] = [
|
|
'title' => $title,
|
|
'slug' => $filename, // Používáme filename jako slug pro hledání
|
|
'date' => $date,
|
|
'excerpt' => $excerpt
|
|
];
|
|
}
|
|
|
|
// Seřazení podle data (nejnovější první)
|
|
usort($articles, function($a, $b) {
|
|
return strtotime($b['date']) - strtotime($a['date']);
|
|
});
|
|
|
|
// Cesta k výstupu
|
|
$outputDir = __DIR__ . '/../public/data/';
|
|
|
|
// Vytvoř složku, pokud neexistuje
|
|
if (!is_dir($outputDir)) {
|
|
if (!mkdir($outputDir, 0755, true)) {
|
|
die("Chyba: Nelze vytvořit složku $outputDir\n");
|
|
}
|
|
}
|
|
|
|
$outputFile = $outputDir . 'articlesSearch.json';
|
|
if (file_put_contents($outputFile, json_encode($articles, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE))) {
|
|
echo "✅ Index vygenerován úspěšně: " . count($articles) . " článků do $outputFile\n";
|
|
} else {
|
|
die("❌ Chyba: Nelze zapsat soubor $outputFile\n");
|
|
} |