add dynamics categories

This commit is contained in:
2025-04-08 15:36:33 +04:00
parent 5d4f34a10f
commit 42d65c55d2
2 changed files with 145 additions and 3 deletions
+98 -3
View File
@@ -7,7 +7,7 @@
*/ */
// URL de base de votre instance PeerTube // URL de base de votre instance PeerTube
define('PEERTUBE_URL', 'https://video.off-investigation.fr'); define('PEERTUBE_URL', 'https://gade.o-k-i.net');
// Paramètres d'API (si nécessaire) // Paramètres d'API (si nécessaire)
define('API_KEY', ''); // Laissez vide si pas nécessaire define('API_KEY', ''); // Laissez vide si pas nécessaire
@@ -19,8 +19,16 @@ define('RECENT_VIDEOS_COUNT', 6);
define('SHORTS_COUNT', 6); define('SHORTS_COUNT', 6);
define('TRENDING_VIDEOS_COUNT', 6); define('TRENDING_VIDEOS_COUNT', 6);
define('INDEPENDENCE_VIDEOS_COUNT', 6); define('INDEPENDENCE_VIDEOS_COUNT', 6);
define('CATEGORY_VIDEOS_COUNT', 6);
define('LOAD_MORE_COUNT', 6); define('LOAD_MORE_COUNT', 6);
// Catégories prioritaires (dans l'ordre d'affichage souhaité)
define('PRIORITY_CATEGORIES', [
11, // News & Politique
14, // Activism
15, // Science & Technologie
]);
// Informations du site // Informations du site
define('SITE_NAME', 'Kaubuntu.re'); define('SITE_NAME', 'Kaubuntu.re');
define('SITE_DESCRIPTION', 'Votre plateforme de médias libres'); define('SITE_DESCRIPTION', 'Votre plateforme de médias libres');
@@ -53,6 +61,27 @@ define('TAG_SHORT', 'short');
setlocale(LC_TIME, 'fr_FR.UTF-8'); setlocale(LC_TIME, 'fr_FR.UTF-8');
date_default_timezone_set('Indian/Reunion'); date_default_timezone_set('Indian/Reunion');
// Initialisation des catégories de vidéo depuis l'API
$peertube_categories = initCategories();
define('PEERTUBE_CATEGORIES', $peertube_categories);
/**
* Initialise et récupère les catégories depuis l'API PeerTube
*
* @return array Liste des catégories
*/
function initCategories() {
// Récupérer la liste des catégories depuis l'API
$categories = callPeerTubeApi('videos/categories');
$result = [];
foreach ($categories as $key => $name) {
$result[$key] = $name;
}
return $result;
}
/** /**
* Fonction utilitaire pour appeler l'API PeerTube * Fonction utilitaire pour appeler l'API PeerTube
* *
@@ -102,8 +131,8 @@ function callPeerTubeApi($endpoint, $params = []) {
* @return array Liste des catégories * @return array Liste des catégories
*/ */
function getCategories() { function getCategories() {
// Récupérer la liste des catégories depuis l'API // Utiliser les catégories déjà récupérées
$categories = callPeerTubeApi('video-categories'); $categories = PEERTUBE_CATEGORIES;
$result = []; $result = [];
foreach ($categories as $key => $name) { foreach ($categories as $key => $name) {
@@ -290,4 +319,70 @@ function formatDate($dateString) {
return 'Il y a ' . $years . ' an' . ($years > 1 ? 's' : ''); return 'Il y a ' . $years . ' an' . ($years > 1 ? 's' : '');
} }
} }
/**
* Récupère les vidéos d'une catégorie spécifique depuis l'API PeerTube
*
* @param int $categoryId Identifiant de la catégorie
* @param int $count Nombre de vidéos à récupérer
* @return array Liste des vidéos de la catégorie
*/
function getVideosByCategory($categoryId, $count = CATEGORY_VIDEOS_COUNT) {
// Récupérer les vidéos par catégorie
$data = callPeerTubeApi('videos', [
'categoryOneOf' => $categoryId,
'count' => $count,
'sort' => '-publishedAt', // Les plus récentes d'abord
'isLocal' => true
]);
return formatVideosData($data['data'] ?? []);
}
/**
* Récupère la liste des catégories à afficher (triées selon les priorités)
*
* @return array Liste des catégories avec id, name et videos
*/
function getDisplayCategories() {
$categories = [];
$priorityCategories = PRIORITY_CATEGORIES;
$allCategories = PEERTUBE_CATEGORIES;
var_dump($priorityCategories);
// D'abord ajouter les catégories prioritaires dans l'ordre défini
foreach ($priorityCategories as $catId) {
if (isset($allCategories[$catId])) {
$videos = getVideosByCategory($catId);
// N'ajouter que les catégories qui ont des vidéos
if (!empty($videos)) {
$categories[] = [
'id' => $catId,
'name' => $allCategories[$catId],
'videos' => $videos
];
}
}
}
// Ensuite, ajouter les autres catégories qui ont des vidéos
foreach ($allCategories as $catId => $catName) {
if (!in_array($catId, $priorityCategories)) {
$videos = getVideosByCategory($catId);
// N'ajouter que les catégories qui ont des vidéos
if (!empty($videos)) {
$categories[] = [
'id' => $catId,
'name' => $catName,
'videos' => $videos
];
}
}
}
return $categories;
}
?> ?>
+47
View File
@@ -311,6 +311,53 @@
<button class="view-more">Voir plus</button> <button class="view-more">Voir plus</button>
</div> </div>
<!-- Sections par catégorie -->
<?php
// Récupérer les catégories avec leurs vidéos
$displayCategories = getDisplayCategories();
// Afficher chaque catégorie qui a des vidéos
foreach ($displayCategories as $category):
if (!empty($category['videos'])):
?>
<!-- Section Catégorie: <?php echo $category['name']; ?> -->
<div class="video-section">
<div class="section-header">
<div class="section-logo">
<img src="img/logo.png" alt="Kaubuntu.re">
</div>
<h2 class="section-title"><?php echo $category['name']; ?></h2>
</div>
<div class="video-grid">
<?php foreach ($category['videos'] as $video): ?>
<div class="video-card" data-video-id="<?php echo $video['id']; ?>">
<div class="video-thumbnail">
<img src="<?php echo $video['thumbnail']; ?>" alt="<?php echo $video['title']; ?>">
<div class="video-play-icon">
<i class="fas fa-play-circle"></i>
</div>
<div class="video-duration"><?php echo formatDuration($video['duration']); ?></div>
</div>
<div class="video-info">
<h3 class="video-title"><?php echo $video['title']; ?></h3>
<div class="video-channel"><?php echo $video['channel']; ?></div>
<div class="video-metadata">
<span class="video-views"><i class="fas fa-eye"></i> <?php echo formatViewCount($video['views']); ?> vues</span>
<span class="video-date"><i class="far fa-calendar-alt"></i> <?php echo formatDate($video['date']); ?></span>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
<button class="view-more">Voir plus</button>
</div>
<?php
endif;
endforeach;
?>
<!-- Section Tendances Hashtags --> <!-- Section Tendances Hashtags -->
<div class="video-section"> <div class="video-section">
<h2 class="section-title">Tendances</h2> <h2 class="section-title">Tendances</h2>