function dms_serve_html($file) {
header('Content-Type: text/html; charset=UTF-8');
header('X-Robots-Tag: index, follow');
http_response_code(200);
$html = file_get_contents($file);
// Détecter l'URL courante
$uri = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');
$parts = array_values(array_filter(explode('/', $uri)));
$slug = isset($parts[0]) ? $parts[0] : '';
$slug2 = isset($parts[1]) ? $parts[1] : '';
$schemas = dms_build_schemas($slug, $slug2);
// Injecter juste avant
if ($schemas) {
$html = str_replace('', $schemas . '', $html);
}
echo $html;
exit;
}
function dms_build_schemas($slug, $slug2) {
$produits = ['fenetre-pvc','fenetre-aluminium','fenetre-bois','volets-roulants',
'volets-battants','porte-entree','porte-garage','pergola',
'store-banne','portail','vitrerie'];
// ── BREADCRUMB ──
$items = [['@type'=>'ListItem','position'=>1,'name'=>'Accueil','item'=>'https://dms-menuiseries.com/']];
$pos = 2;
if (in_array($slug, $produits)) {
$items[] = ['@type'=>'ListItem','position'=>$pos++,
'name'=>dms_label($slug),
'item'=>'https://dms-menuiseries.com/'.$slug.'/'];
if ($slug2) {
$items[] = ['@type'=>'ListItem','position'=>$pos++,
'name'=>dms_label($slug2),
'item'=>'https://dms-menuiseries.com/'.$slug.'/'.$slug2.'/'];
}
} elseif (strpos($slug,'menuisier-')===0 || strpos($slug,'menuiserie-')===0) {
$items[] = ['@type'=>'ListItem','position'=>$pos++,
'name'=>dms_label($slug),
'item'=>'https://dms-menuiseries.com/'.$slug.'/'];
} elseif (strpos($slug,'guide-')===0) {
$items[] = ['@type'=>'ListItem','position'=>$pos++,'name'=>'Guides','item'=>'https://dms-menuiseries.com/guides/'];
$items[] = ['@type'=>'ListItem','position'=>$pos++,
'name'=>dms_label($slug),
'item'=>'https://dms-menuiseries.com/'.$slug.'/'];
}
$breadcrumb = json_encode([
'@context'=>'https://schema.org',
'@type'=>'BreadcrumbList',
'itemListElement'=>$items
], JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
// ── FAQ ──
$faqs = dms_faqs($slug, $slug2);
$faqschema = '';
if ($faqs) {
$questions = [];
foreach ($faqs as $q => $a) {
$questions[] = ['@type'=>'Question','name'=>$q,
'acceptedAnswer'=>['@type'=>'Answer','text'=>$a]];
}
$faqschema = "\n" . json_encode([
'@context'=>'https://schema.org',
'@type'=>'FAQPage',
'mainEntity'=>$questions
], JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
}
$out = "\n" . '';
if ($faqschema) $out .= "\n" . '';
return $out;
}
function dms_label($slug) {
$map = [
'fenetre-pvc'=>"Fenêtre PVC",'fenetre-aluminium'=>"Fenêtre Aluminium",
'fenetre-bois'=>"Fenêtre Bois",'volets-roulants'=>"Volets Roulants",
'volets-battants'=>"Volets Battants",'porte-entree'=>"Porte d'Entrée",
'porte-garage'=>"Porte de Garage",'pergola'=>"Pergola",
'store-banne'=>"Store Banne",'portail'=>"Portail",'vitrerie'=>"Vitrerie",
'menuiserie-isere'=>"Menuiserie Isère",'menuiserie-savoie'=>"Menuiserie Savoie",
'menuiserie-haute-savoie'=>"Menuiserie Haute-Savoie",
];
return isset($map[$slug]) ? $map[$slug] : ucwords(str_replace('-',' ',$slug));
}
function dms_faqs($slug, $slug2) {
$v = $slug2 ? ' à '.dms_label($slug2) : ' en Isère et Savoie';
if ($slug==='fenetre-pvc') return [
"Quel est le prix d'une fenêtre PVC{$v} ?" => "Entre 400 et 900€ pose incluse. DMS Menuiseries fabrique et pose sans sous-traitant.",
"Quelle est la durée de vie d'une fenêtre PVC ?" => "30 à 40 ans avec un entretien minimal. Profilés français garantis 10 ans.",
"Fenêtre PVC ou aluminium : que choisir ?" => "Le PVC est plus isolant et moins cher. L'aluminium est plus esthétique. Pour la montagne, le PVC offre le meilleur rapport qualité-prix.",
];
if ($slug==='fenetre-aluminium') return [
"Quel est le prix d'une fenêtre aluminium{$v} ?" => "Entre 600 et 1500€ pose incluse. Profilés à rupture de pont thermique, fabriqués en France.",
"L'aluminium est-il isolant pour les hivers en montagne ?" => "Oui, avec des profilés RPT. DMS Menuiseries ne propose que des fenêtres alu RPT adaptées aux hivers rigoureux.",
];
if ($slug==='volets-roulants') return [
"Quel est le prix d'un volet roulant motorisé{$v} ?" => "Entre 500 et 1200€ pose incluse. Motorisations Somfy et BFT disponibles.",
"Volet roulant solaire ou filaire ?" => "Le solaire ne nécessite pas de câblage, idéal en rénovation. Le filaire est plus puissant pour les grands volets.",
"Peut-on motoriser un volet roulant existant ?" => "Oui, DMS Menuiseries peut motoriser vos volets existants. Devis gratuit sur place.",
];
if ($slug==='porte-entree') return [
"Quel est le prix d'une porte d'entrée{$v} ?" => "Entre 1200 et 3500€ pose incluse selon le matériau et le niveau de sécurité.",
"Quelle porte d'entrée choisir pour la sécurité ?" => "Certification A2P BP1 minimum, serrure 3 points, vitrage sécurit feuilleté.",
];
if ($slug==='porte-garage') return [
"Quel est le prix d'une porte de garage{$v} ?" => "Entre 1500 et 3500€ pose incluse pour une sectionnelle motorisée.",
"Porte sectionnelle ou basculante ?" => "La sectionnelle monte au plafond et libère l'espace devant. La basculante est moins chère.",
];
if ($slug==='pergola') return [
"Faut-il un permis pour une pergola{$v} ?" => "Déclaration préalable en dessous de 20 m², permis de construire au-delà.",
"Quel est le prix d'une pergola bioclimatique{$v} ?" => "Entre 6000 et 15000€ selon dimensions et options. Sur mesure aluminium.",
];
if ($slug==='vitrerie') return [
"DMS Menuiseries intervient-il en urgence ?" => "Oui, pour tout vitrage cassé en Isère et Savoie. Appelez le 07 78 63 39 70.",
"Quel est le prix d'un remplacement de vitre ?" => "Entre 150 et 500€ selon dimensions et type de vitrage. Devis sur place.",
];
if (strpos($slug,'menuisier-')===0 || strpos($slug,'menuiserie-')===0) {
$ville = dms_label(str_replace(['menuisier-','menuiserie-'],'',$slug));
return [
"Comment choisir un menuisier à {$ville} ?" => "Vérifiez qu'il fabrique lui-même, sans sous-traitance, avec des avis vérifiés. DMS Menuiseries — 261 avis Google 4,9/5.",
"DMS Menuiseries intervient-il à {$ville} ?" => "Oui, régulièrement. Devis gratuit sous 48h — 07 78 63 39 70.",
"Quels sont les délais d'intervention à {$ville} ?" => "Rendez-vous sous 48-72h, pose sous 2 à 6 semaines après validation du devis.",
];
}
return [];
}