feat: add JSON-LD data
This commit is contained in:
@@ -1,6 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
// Inclure la configuration
|
// Inclure la configuration
|
||||||
require_once 'includes/config.php';
|
require_once 'includes/config.php';
|
||||||
|
// Inclure les fonctions de données structurées
|
||||||
|
require_once 'includes/structured-data.php';
|
||||||
|
|
||||||
// Appliquer les en-têtes de sécurité
|
// Appliquer les en-têtes de sécurité
|
||||||
setSecurityHeaders();
|
setSecurityHeaders();
|
||||||
@@ -58,6 +60,23 @@ if ($categoryId && isset($allCategories[$categoryId])) {
|
|||||||
<meta name="twitter:title" content="Catégorie : <?php echo htmlspecialchars($categoryName); ?> - kaubuntu.re">
|
<meta name="twitter:title" content="Catégorie : <?php echo htmlspecialchars($categoryName); ?> - kaubuntu.re">
|
||||||
<meta name="twitter:description" content="Découvrez toutes les vidéos de la catégorie <?php echo htmlspecialchars($categoryName); ?> sur kaubuntu.re. Contenu multimédia de qualité et exclusif.">
|
<meta name="twitter:description" content="Découvrez toutes les vidéos de la catégorie <?php echo htmlspecialchars($categoryName); ?> sur kaubuntu.re. Contenu multimédia de qualité et exclusif.">
|
||||||
<meta name="twitter:image" content="<?php echo 'https://' . $_SERVER['HTTP_HOST'] . '/img/logo.png'; ?>">
|
<meta name="twitter:image" content="<?php echo 'https://' . $_SERVER['HTTP_HOST'] . '/img/logo.png'; ?>">
|
||||||
|
|
||||||
|
<!-- Données structurées JSON-LD pour la page de catégorie -->
|
||||||
|
<?php
|
||||||
|
$categoryUrl = getBaseUrl() . '/categories.php?id=' . $categoryId;
|
||||||
|
$categoryDescription = 'Découvrez toutes les vidéos de la catégorie ' . $categoryName . ' sur kaubuntu.re';
|
||||||
|
$collectionJsonLd = generateVideoCollectionJsonLd($categoryName, $categoryDescription, $videos, $categoryUrl);
|
||||||
|
outputJsonLd($collectionJsonLd);
|
||||||
|
|
||||||
|
// Générer les fils d'Ariane pour la catégorie
|
||||||
|
$breadcrumbs = [
|
||||||
|
['name' => 'Accueil', 'url' => getBaseUrl()],
|
||||||
|
['name' => 'Catégories', 'url' => getBaseUrl() . '/#categories'],
|
||||||
|
['name' => $categoryName, 'url' => $categoryUrl]
|
||||||
|
];
|
||||||
|
$breadcrumbJsonLd = generateBreadcrumbJsonLd($breadcrumbs);
|
||||||
|
outputJsonLd($breadcrumbJsonLd);
|
||||||
|
?>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<?php include 'includes/sidebar.php'; ?>
|
<?php include 'includes/sidebar.php'; ?>
|
||||||
|
|||||||
+49
-9
@@ -1,3 +1,14 @@
|
|||||||
|
<?php
|
||||||
|
// Inclure la configuration
|
||||||
|
require_once 'includes/config.php';
|
||||||
|
// Inclure les fonctions de données structurées
|
||||||
|
require_once 'includes/structured-data.php';
|
||||||
|
// Appliquer les en-têtes de sécurité
|
||||||
|
setSecurityHeaders();
|
||||||
|
|
||||||
|
// Vérifier s'il y a un direct en cours
|
||||||
|
$liveStream = getLiveStream();
|
||||||
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="fr">
|
<html lang="fr">
|
||||||
<head>
|
<head>
|
||||||
@@ -18,8 +29,8 @@
|
|||||||
<!-- Open Graph Meta Tags -->
|
<!-- Open Graph Meta Tags -->
|
||||||
<meta property="og:title" content="Direct - kaubuntu.re">
|
<meta property="og:title" content="Direct - kaubuntu.re">
|
||||||
<meta property="og:description" content="Suivez nos diffusions en direct sur kaubuntu.re. Contenu en temps réel, discussions et événements exclusifs.">
|
<meta property="og:description" content="Suivez nos diffusions en direct sur kaubuntu.re. Contenu en temps réel, discussions et événements exclusifs.">
|
||||||
<meta property="og:image" content="<?php echo 'https://' . $_SERVER['HTTP_HOST'] . '/img/logo.png'; ?>">
|
<meta property="og:image" content="<?php echo getBaseUrl(); ?>/img/logo.png">
|
||||||
<meta property="og:url" content="<?php echo 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; ?>">
|
<meta property="og:url" content="<?php echo getBaseUrl(); ?>/direct.php">
|
||||||
<meta property="og:type" content="website">
|
<meta property="og:type" content="website">
|
||||||
<meta property="og:site_name" content="kaubuntu.re">
|
<meta property="og:site_name" content="kaubuntu.re">
|
||||||
<meta property="og:locale" content="fr_FR">
|
<meta property="og:locale" content="fr_FR">
|
||||||
@@ -28,15 +39,44 @@
|
|||||||
<meta name="twitter:card" content="summary_large_image">
|
<meta name="twitter:card" content="summary_large_image">
|
||||||
<meta name="twitter:title" content="Direct - kaubuntu.re">
|
<meta name="twitter:title" content="Direct - kaubuntu.re">
|
||||||
<meta name="twitter:description" content="Suivez nos diffusions en direct sur kaubuntu.re. Contenu en temps réel, discussions et événements exclusifs.">
|
<meta name="twitter:description" content="Suivez nos diffusions en direct sur kaubuntu.re. Contenu en temps réel, discussions et événements exclusifs.">
|
||||||
<meta name="twitter:image" content="<?php echo 'https://' . $_SERVER['HTTP_HOST'] . '/img/logo.png'; ?>">
|
<meta name="twitter:image" content="<?php echo getBaseUrl(); ?>/img/logo.png">
|
||||||
|
|
||||||
|
<!-- Données structurées JSON-LD pour la page direct -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "WebPage",
|
||||||
|
"name": "Direct - kaubuntu.re",
|
||||||
|
"description": "Suivez nos diffusions en direct sur kaubuntu.re. Contenu en temps réel du mouvement Ka-Ubuntu.",
|
||||||
|
"url": "<?php echo getBaseUrl(); ?>/direct.php",
|
||||||
|
"isPartOf": {
|
||||||
|
"@type": "WebSite",
|
||||||
|
"name": "kaubuntu.re",
|
||||||
|
"url": "<?php echo getBaseUrl(); ?>"
|
||||||
|
},
|
||||||
|
"publisher": {
|
||||||
|
"@type": "Organization",
|
||||||
|
"name": "Ka-Ubuntu",
|
||||||
|
"url": "<?php echo getBaseUrl(); ?>",
|
||||||
|
"logo": {
|
||||||
|
"@type": "ImageObject",
|
||||||
|
"url": "<?php echo getBaseUrl(); ?>/img/logo.png"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
// Générer les fils d'Ariane pour la page direct
|
||||||
|
$breadcrumbs = [
|
||||||
|
['name' => 'Accueil', 'url' => getBaseUrl()],
|
||||||
|
['name' => 'Direct', 'url' => getBaseUrl() . '/direct.php']
|
||||||
|
];
|
||||||
|
$breadcrumbJsonLd = generateBreadcrumbJsonLd($breadcrumbs);
|
||||||
|
outputJsonLd($breadcrumbJsonLd);
|
||||||
|
?>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<?php
|
|
||||||
// Inclure la configuration
|
|
||||||
require_once 'includes/config.php';
|
|
||||||
// Appliquer les en-têtes de sécurité
|
|
||||||
setSecurityHeaders();
|
|
||||||
?>
|
|
||||||
<?php include 'includes/sidebar.php'; ?>
|
<?php include 'includes/sidebar.php'; ?>
|
||||||
<!-- Contenu principal -->
|
<!-- Contenu principal -->
|
||||||
<div class="main-content">
|
<div class="main-content">
|
||||||
|
|||||||
@@ -0,0 +1,319 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fonctions pour générer des données structurées JSON-LD
|
||||||
|
* pour améliorer le SEO et l'affichage dans les moteurs de recherche
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Génère le JSON-LD pour un objet WebSite
|
||||||
|
*
|
||||||
|
* @return string JSON-LD pour le site web
|
||||||
|
*/
|
||||||
|
function generateWebSiteJsonLd() {
|
||||||
|
$baseUrl = getBaseUrl();
|
||||||
|
|
||||||
|
$data = [
|
||||||
|
"@context" => "https://schema.org",
|
||||||
|
"@type" => "WebSite",
|
||||||
|
"name" => "kaubuntu.re",
|
||||||
|
"description" => "Plateforme multimédia indépendante du parti panifricaniste et indépendantiste réunionnais Ka-Ubuntu",
|
||||||
|
"url" => $baseUrl,
|
||||||
|
"potentialAction" => [
|
||||||
|
"@type" => "SearchAction",
|
||||||
|
"target" => [
|
||||||
|
"@type" => "EntryPoint",
|
||||||
|
"urlTemplate" => $baseUrl . "/recherche.php?q={search_term_string}"
|
||||||
|
],
|
||||||
|
"query-input" => "required name=search_term_string"
|
||||||
|
],
|
||||||
|
"publisher" => [
|
||||||
|
"@type" => "Organization",
|
||||||
|
"name" => "Ka-Ubuntu",
|
||||||
|
"url" => $baseUrl,
|
||||||
|
"logo" => [
|
||||||
|
"@type" => "ImageObject",
|
||||||
|
"url" => $baseUrl . "/img/logo.png"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
|
return json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Génère le JSON-LD pour un objet VideoObject
|
||||||
|
*
|
||||||
|
* @param array $videoData Données de la vidéo depuis l'API PeerTube
|
||||||
|
* @param array $video Données formatées de la vidéo
|
||||||
|
* @return string JSON-LD pour la vidéo
|
||||||
|
*/
|
||||||
|
function generateVideoObjectJsonLd($videoData, $video) {
|
||||||
|
$baseUrl = getBaseUrl();
|
||||||
|
$videoUrl = $baseUrl . "/video.php?id=" . $video['id'];
|
||||||
|
|
||||||
|
// Construire l'URL de la vignette
|
||||||
|
$thumbnailUrl = isset($videoData['thumbnailPath'])
|
||||||
|
? PEERTUBE_URL . $videoData['thumbnailPath']
|
||||||
|
: $baseUrl . "/img/default-thumbnail.jpg";
|
||||||
|
|
||||||
|
// Formater la durée en format ISO 8601 (PT1H30M pour 1h30min)
|
||||||
|
$duration = formatDurationISO8601($video['duration'] ?? 0);
|
||||||
|
|
||||||
|
// Construire les données de base
|
||||||
|
$data = [
|
||||||
|
"@context" => "https://schema.org",
|
||||||
|
"@type" => "VideoObject",
|
||||||
|
"name" => $video['title'],
|
||||||
|
"description" => !empty($video['description'])
|
||||||
|
? truncateText(strip_tags($video['description']), 300)
|
||||||
|
: "Regardez cette vidéo sur kaubuntu.re",
|
||||||
|
"url" => $videoUrl,
|
||||||
|
"thumbnailUrl" => $thumbnailUrl,
|
||||||
|
"uploadDate" => formatDateISO8601($video['date']),
|
||||||
|
"duration" => $duration,
|
||||||
|
"publisher" => [
|
||||||
|
"@type" => "Organization",
|
||||||
|
"name" => "kaubuntu.re",
|
||||||
|
"url" => $baseUrl,
|
||||||
|
"logo" => [
|
||||||
|
"@type" => "ImageObject",
|
||||||
|
"url" => $baseUrl . "/img/logo.png"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
|
// Ajouter les informations de la chaîne/créateur
|
||||||
|
if (!empty($video['channel'])) {
|
||||||
|
$data["creator"] = [
|
||||||
|
"@type" => "Person",
|
||||||
|
"name" => $video['channel'],
|
||||||
|
"url" => PEERTUBE_URL . "/c/" . ($videoData['channel']['name'] ?? '')
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ajouter les statistiques d'interaction
|
||||||
|
if (isset($video['views']) && $video['views'] > 0) {
|
||||||
|
$data["interactionStatistic"] = [
|
||||||
|
"@type" => "InteractionCounter",
|
||||||
|
"interactionType" => [
|
||||||
|
"@type" => "WatchAction"
|
||||||
|
],
|
||||||
|
"userInteractionCount" => $video['views']
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ajouter les likes si disponibles
|
||||||
|
if (isset($video['likes']) && $video['likes'] > 0) {
|
||||||
|
if (!isset($data["interactionStatistic"])) {
|
||||||
|
$data["interactionStatistic"] = [];
|
||||||
|
} else {
|
||||||
|
// Convertir en array si c'était un seul élément
|
||||||
|
if (isset($data["interactionStatistic"]["@type"])) {
|
||||||
|
$data["interactionStatistic"] = [$data["interactionStatistic"]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$data["interactionStatistic"][] = [
|
||||||
|
"@type" => "InteractionCounter",
|
||||||
|
"interactionType" => [
|
||||||
|
"@type" => "LikeAction"
|
||||||
|
],
|
||||||
|
"userInteractionCount" => $video['likes']
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ajouter les tags/mots-clés si disponibles
|
||||||
|
if (!empty($video['tags'])) {
|
||||||
|
$data["keywords"] = implode(", ", $video['tags']);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ajouter les informations de licence si disponibles
|
||||||
|
if (isset($videoData['licence']) && !empty($videoData['licence'])) {
|
||||||
|
$licenceId = $videoData['licence']['id'];
|
||||||
|
$licenceMapping = [
|
||||||
|
1 => "https://creativecommons.org/licenses/by/4.0/",
|
||||||
|
2 => "https://creativecommons.org/licenses/by-sa/4.0/",
|
||||||
|
3 => "https://creativecommons.org/licenses/by-nd/4.0/",
|
||||||
|
4 => "https://creativecommons.org/licenses/by-nc/4.0/",
|
||||||
|
5 => "https://creativecommons.org/licenses/by-nc-sa/4.0/",
|
||||||
|
6 => "https://creativecommons.org/licenses/by-nc-nd/4.0/",
|
||||||
|
7 => "https://creativecommons.org/publicdomain/zero/1.0/"
|
||||||
|
];
|
||||||
|
|
||||||
|
if (isset($licenceMapping[$licenceId])) {
|
||||||
|
$data["license"] = $licenceMapping[$licenceId];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ajouter la catégorie si disponible
|
||||||
|
if (isset($videoData['category']) && !empty($videoData['category'])) {
|
||||||
|
$data["genre"] = $videoData['category']['label'] ?? 'Vidéo';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ajouter les dimensions si c'est un short (format portrait)
|
||||||
|
if (isset($video['aspectRatio']) && $video['aspectRatio'] <= 1) {
|
||||||
|
$data["videoFrameSize"] = "Portrait";
|
||||||
|
}
|
||||||
|
|
||||||
|
return json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Génère le JSON-LD pour les fils d'Ariane (BreadcrumbList)
|
||||||
|
*
|
||||||
|
* @param array $breadcrumbs Tableau des fils d'Ariane [['name' => 'Nom', 'url' => 'URL']]
|
||||||
|
* @return string JSON-LD pour les fils d'Ariane
|
||||||
|
*/
|
||||||
|
function generateBreadcrumbJsonLd($breadcrumbs) {
|
||||||
|
$baseUrl = getBaseUrl();
|
||||||
|
|
||||||
|
$listItems = [];
|
||||||
|
foreach ($breadcrumbs as $index => $crumb) {
|
||||||
|
$listItems[] = [
|
||||||
|
"@type" => "ListItem",
|
||||||
|
"position" => $index + 1,
|
||||||
|
"name" => $crumb['name'],
|
||||||
|
"item" => $crumb['url']
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = [
|
||||||
|
"@context" => "https://schema.org",
|
||||||
|
"@type" => "BreadcrumbList",
|
||||||
|
"itemListElement" => $listItems
|
||||||
|
];
|
||||||
|
|
||||||
|
return json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Génère le JSON-LD pour une page de collection de vidéos
|
||||||
|
*
|
||||||
|
* @param string $name Nom de la collection
|
||||||
|
* @param string $description Description de la collection
|
||||||
|
* @param array $videos Tableau des vidéos
|
||||||
|
* @param string $url URL de la page de collection
|
||||||
|
* @return string JSON-LD pour la collection
|
||||||
|
*/
|
||||||
|
function generateVideoCollectionJsonLd($name, $description, $videos, $url) {
|
||||||
|
$baseUrl = getBaseUrl();
|
||||||
|
|
||||||
|
$videoItems = [];
|
||||||
|
foreach ($videos as $video) {
|
||||||
|
$videoItems[] = [
|
||||||
|
"@type" => "VideoObject",
|
||||||
|
"name" => $video['title'],
|
||||||
|
"url" => $baseUrl . "/video.php?id=" . $video['id'],
|
||||||
|
"thumbnailUrl" => $video['thumbnail'],
|
||||||
|
"uploadDate" => formatDateISO8601($video['date']),
|
||||||
|
"duration" => formatDurationISO8601($video['duration'] ?? 0)
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = [
|
||||||
|
"@context" => "https://schema.org",
|
||||||
|
"@type" => "CollectionPage",
|
||||||
|
"name" => $name,
|
||||||
|
"description" => $description,
|
||||||
|
"url" => $url,
|
||||||
|
"mainEntity" => [
|
||||||
|
"@type" => "ItemList",
|
||||||
|
"itemListElement" => $videoItems,
|
||||||
|
"numberOfItems" => count($videos)
|
||||||
|
],
|
||||||
|
"publisher" => [
|
||||||
|
"@type" => "Organization",
|
||||||
|
"name" => "kaubuntu.re",
|
||||||
|
"url" => $baseUrl
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
|
return json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Formate une durée en secondes au format ISO 8601 (PTnHnMnS)
|
||||||
|
*
|
||||||
|
* @param int $seconds Durée en secondes
|
||||||
|
* @return string Durée au format ISO 8601
|
||||||
|
*/
|
||||||
|
function formatDurationISO8601($seconds) {
|
||||||
|
$hours = floor($seconds / 3600);
|
||||||
|
$minutes = floor(($seconds % 3600) / 60);
|
||||||
|
$remainingSeconds = $seconds % 60;
|
||||||
|
|
||||||
|
$duration = 'PT';
|
||||||
|
|
||||||
|
if ($hours > 0) {
|
||||||
|
$duration .= $hours . 'H';
|
||||||
|
}
|
||||||
|
if ($minutes > 0) {
|
||||||
|
$duration .= $minutes . 'M';
|
||||||
|
}
|
||||||
|
if ($remainingSeconds > 0 || ($hours === 0 && $minutes === 0)) {
|
||||||
|
$duration .= $remainingSeconds . 'S';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $duration;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Formate une date au format ISO 8601
|
||||||
|
*
|
||||||
|
* @param string $dateString Date à formater
|
||||||
|
* @return string Date au format ISO 8601
|
||||||
|
*/
|
||||||
|
function formatDateISO8601($dateString) {
|
||||||
|
try {
|
||||||
|
$date = new DateTime($dateString);
|
||||||
|
return $date->format('c'); // Format ISO 8601
|
||||||
|
} catch (Exception $e) {
|
||||||
|
// En cas d'erreur, retourner la date actuelle
|
||||||
|
return (new DateTime())->format('c');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tronque un texte à une longueur donnée
|
||||||
|
*
|
||||||
|
* @param string $text Texte à tronquer
|
||||||
|
* @param int $length Longueur maximale
|
||||||
|
* @return string Texte tronqué
|
||||||
|
*/
|
||||||
|
function truncateText($text, $length = 200) {
|
||||||
|
if (strlen($text) <= $length) {
|
||||||
|
return $text;
|
||||||
|
}
|
||||||
|
|
||||||
|
$truncated = substr($text, 0, $length);
|
||||||
|
$lastSpace = strrpos($truncated, ' ');
|
||||||
|
|
||||||
|
if ($lastSpace !== false) {
|
||||||
|
$truncated = substr($truncated, 0, $lastSpace);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $truncated . '...';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtient l'URL de base du site
|
||||||
|
*
|
||||||
|
* @return string URL de base
|
||||||
|
*/
|
||||||
|
function getBaseUrl() {
|
||||||
|
$scheme = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') ? 'https' : 'http';
|
||||||
|
$host = $_SERVER['HTTP_HOST'] ?? 'localhost';
|
||||||
|
return $scheme . '://' . $host;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Génère et affiche un script JSON-LD
|
||||||
|
*
|
||||||
|
* @param string $jsonLd Données JSON-LD
|
||||||
|
*/
|
||||||
|
function outputJsonLd($jsonLd) {
|
||||||
|
echo '<script type="application/ld+json">' . "\n" . $jsonLd . "\n" . '</script>' . "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
// Inclure la configuration
|
// Inclure la configuration
|
||||||
require_once 'includes/config.php';
|
require_once 'includes/config.php';
|
||||||
|
// Inclure les fonctions de données structurées
|
||||||
|
require_once 'includes/structured-data.php';
|
||||||
// Appliquer les en-têtes de sécurité
|
// Appliquer les en-têtes de sécurité
|
||||||
setSecurityHeaders();
|
setSecurityHeaders();
|
||||||
?>
|
?>
|
||||||
@@ -46,6 +48,19 @@ setSecurityHeaders();
|
|||||||
<meta name="twitter:title" content="kaubuntu.re - Plateforme Multimédia">
|
<meta name="twitter:title" content="kaubuntu.re - Plateforme Multimédia">
|
||||||
<meta name="twitter:description" content="Découvrez notre plateforme multimédia avec des vidéos, des shorts et des directs. Tendances, catégories et contenus exclusifs vous attendent.">
|
<meta name="twitter:description" content="Découvrez notre plateforme multimédia avec des vidéos, des shorts et des directs. Tendances, catégories et contenus exclusifs vous attendent.">
|
||||||
<meta name="twitter:image" content="<?php echo 'https://' . $_SERVER['HTTP_HOST'] . '/img/logo.png'; ?>">
|
<meta name="twitter:image" content="<?php echo 'https://' . $_SERVER['HTTP_HOST'] . '/img/logo.png'; ?>">
|
||||||
|
|
||||||
|
<!-- Données structurées JSON-LD pour le site web -->
|
||||||
|
<?php
|
||||||
|
$websiteJsonLd = generateWebSiteJsonLd();
|
||||||
|
outputJsonLd($websiteJsonLd);
|
||||||
|
|
||||||
|
// Générer les fils d'Ariane pour la page d'accueil
|
||||||
|
$breadcrumbs = [
|
||||||
|
['name' => 'Accueil', 'url' => getBaseUrl()]
|
||||||
|
];
|
||||||
|
$breadcrumbJsonLd = generateBreadcrumbJsonLd($breadcrumbs);
|
||||||
|
outputJsonLd($breadcrumbJsonLd);
|
||||||
|
?>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<?php include 'includes/sidebar.php'; ?>
|
<?php include 'includes/sidebar.php'; ?>
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
// Inclure la configuration
|
// Inclure la configuration
|
||||||
require_once 'includes/config.php';
|
require_once 'includes/config.php';
|
||||||
|
// Inclure les fonctions de données structurées
|
||||||
|
require_once 'includes/structured-data.php';
|
||||||
|
|
||||||
// Appliquer les en-têtes de sécurité
|
// Appliquer les en-têtes de sécurité
|
||||||
setSecurityHeaders();
|
setSecurityHeaders();
|
||||||
@@ -68,6 +70,31 @@ if ($resultsCount > 0) {
|
|||||||
<meta name="twitter:title" content="<?php echo !empty($query) ? 'Recherche: ' . htmlspecialchars($query) . ' - ' : 'Recherche - '; ?>kaubuntu.re">
|
<meta name="twitter:title" content="<?php echo !empty($query) ? 'Recherche: ' . htmlspecialchars($query) . ' - ' : 'Recherche - '; ?>kaubuntu.re">
|
||||||
<meta name="twitter:description" content="<?php echo !empty($query) ? 'Résultats de recherche pour \"' . htmlspecialchars($query) . '\" sur kaubuntu.re. Découvrez des vidéos correspondantes à votre recherche.' : 'Recherchez des vidéos sur kaubuntu.re. Plateforme multimédia avec un contenu de qualité et exclusif.'; ?>">
|
<meta name="twitter:description" content="<?php echo !empty($query) ? 'Résultats de recherche pour \"' . htmlspecialchars($query) . '\" sur kaubuntu.re. Découvrez des vidéos correspondantes à votre recherche.' : 'Recherchez des vidéos sur kaubuntu.re. Plateforme multimédia avec un contenu de qualité et exclusif.'; ?>">
|
||||||
<meta name="twitter:image" content="<?php echo 'https://' . $_SERVER['HTTP_HOST'] . '/img/logo.png'; ?>">
|
<meta name="twitter:image" content="<?php echo 'https://' . $_SERVER['HTTP_HOST'] . '/img/logo.png'; ?>">
|
||||||
|
|
||||||
|
<?php if (!empty($query) && !empty($currentPageVideos)): ?>
|
||||||
|
<!-- Données structurées JSON-LD pour la page de recherche -->
|
||||||
|
<?php
|
||||||
|
$searchUrl = getBaseUrl() . '/recherche.php?q=' . urlencode($query);
|
||||||
|
$searchDescription = $isTagSearch
|
||||||
|
? 'Vidéos avec le tag ' . htmlspecialchars($searchTag) . ' sur kaubuntu.re'
|
||||||
|
: 'Résultats de recherche pour "' . htmlspecialchars($query) . '" sur kaubuntu.re';
|
||||||
|
$searchTitle = $isTagSearch
|
||||||
|
? 'Tag: ' . htmlspecialchars($searchTag)
|
||||||
|
: 'Recherche: ' . htmlspecialchars($query);
|
||||||
|
|
||||||
|
$collectionJsonLd = generateVideoCollectionJsonLd($searchTitle, $searchDescription, $currentPageVideos, $searchUrl);
|
||||||
|
outputJsonLd($collectionJsonLd);
|
||||||
|
|
||||||
|
// Générer les fils d'Ariane pour la recherche
|
||||||
|
$breadcrumbs = [
|
||||||
|
['name' => 'Accueil', 'url' => getBaseUrl()],
|
||||||
|
['name' => 'Recherche', 'url' => getBaseUrl() . '/recherche.php'],
|
||||||
|
['name' => $searchTitle, 'url' => $searchUrl]
|
||||||
|
];
|
||||||
|
$breadcrumbJsonLd = generateBreadcrumbJsonLd($breadcrumbs);
|
||||||
|
outputJsonLd($breadcrumbJsonLd);
|
||||||
|
?>
|
||||||
|
<?php endif; ?>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<?php include 'includes/sidebar.php'; ?>
|
<?php include 'includes/sidebar.php'; ?>
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
require_once 'includes/config.php';
|
require_once 'includes/config.php';
|
||||||
// Inclure le convertisseur Markdown
|
// Inclure le convertisseur Markdown
|
||||||
require_once 'includes/lib/markdown.php';
|
require_once 'includes/lib/markdown.php';
|
||||||
|
// Inclure les fonctions de données structurées
|
||||||
|
require_once 'includes/structured-data.php';
|
||||||
|
|
||||||
// Appliquer les en-têtes de sécurité
|
// Appliquer les en-têtes de sécurité
|
||||||
setSecurityHeaders();
|
setSecurityHeaders();
|
||||||
@@ -139,6 +141,22 @@ if (empty($videoData) || isset($videoData['error'])) {
|
|||||||
<?php if (isset($videoData['thumbnailPath'])): ?>
|
<?php if (isset($videoData['thumbnailPath'])): ?>
|
||||||
<meta name="twitter:image" content="<?php echo PEERTUBE_URL . $videoData['thumbnailPath']; ?>">
|
<meta name="twitter:image" content="<?php echo PEERTUBE_URL . $videoData['thumbnailPath']; ?>">
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<?php if (!isset($videoNotFound) && !empty($video)): ?>
|
||||||
|
<!-- Données structurées JSON-LD pour la vidéo -->
|
||||||
|
<?php
|
||||||
|
$videoJsonLd = generateVideoObjectJsonLd($videoData, $video);
|
||||||
|
outputJsonLd($videoJsonLd);
|
||||||
|
|
||||||
|
// Générer les fils d'Ariane pour la vidéo
|
||||||
|
$breadcrumbs = [
|
||||||
|
['name' => 'Accueil', 'url' => getBaseUrl()],
|
||||||
|
['name' => $video['title'], 'url' => getBaseUrl() . '/video.php?id=' . $video['id']]
|
||||||
|
];
|
||||||
|
$breadcrumbJsonLd = generateBreadcrumbJsonLd($breadcrumbs);
|
||||||
|
outputJsonLd($breadcrumbJsonLd);
|
||||||
|
?>
|
||||||
|
<?php endif; ?>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<?php include 'includes/sidebar.php'; ?>
|
<?php include 'includes/sidebar.php'; ?>
|
||||||
|
|||||||
Reference in New Issue
Block a user