feat: permit display one video in index

This commit is contained in:
2025-10-17 14:23:31 +04:00
parent 8905d09b48
commit b35dbde8c9
4 changed files with 76 additions and 10 deletions
+26 -6
View File
@@ -213,15 +213,16 @@ cp mentions-legales.php.sample mentions-legales.php
Ces fichiers sont listés dans le `.gitignore` afin que vos modifications ne soient pas suivies par Git, ce qui vous permet de personnaliser votre instance sans affecter le code source principal. Ces fichiers sont listés dans le `.gitignore` afin que vos modifications ne soient pas suivies par Git, ce qui vous permet de personnaliser votre instance sans affecter le code source principal.
== 📺 Section Hero : Direct et Playlists == 📺 Section Hero : Direct, Vidéo et Playlists
FEDIVERSE OKI propose une section hero flexible et configurable en haut de la page d'accueil, pouvant afficher soit un direct PeerTube, soit une playlist audio/vidéo (PeerTube, Funkwhale, Castopod), soit être masquée complètement. FEDIVERSE OKI propose une section hero flexible et configurable en haut de la page d'accueil, pouvant afficher soit un direct PeerTube, soit une vidéo unique, soit une playlist audio/vidéo (PeerTube, Funkwhale, Castopod), soit être masquée complètement.
=== 🎯 Modes disponibles === 🎯 Modes disponibles
La section hero supporte trois modes configurables via `HERO_TYPE` : La section hero supporte quatre modes configurables via `HERO_TYPE` :
- *`live`* : Affiche le direct PeerTube s'il est actif, sinon affiche l'annonce du prochain live - *`live`* : Affiche le direct PeerTube s'il est actif, sinon affiche l'annonce du prochain live
- *`video`* : Affiche une vidéo PeerTube spécifique
- *`playlist`* : Affiche une playlist embarquée (PeerTube, Funkwhale ou Castopod) - *`playlist`* : Affiche une playlist embarquée (PeerTube, Funkwhale ou Castopod)
- *`none`* : Masque complètement la section hero - *`none`* : Masque complètement la section hero
@@ -232,12 +233,20 @@ Ajoutez dans votre `config.local.php` :
[source,php] [source,php]
---- ----
// Type de contenu à afficher dans la section hero // Type de contenu à afficher dans la section hero
// Options: 'live', 'playlist', 'none' // Options: 'live', 'video', 'playlist', 'none'
define('HERO_TYPE', 'playlist'); define('HERO_TYPE', 'video');
// === Configuration pour HERO_TYPE = 'live' === // === Configuration pour HERO_TYPE = 'live' ===
define('LIVE_ACCOUNT_NAME', 'admin'); define('LIVE_ACCOUNT_NAME', 'admin');
// === Configuration pour HERO_TYPE = 'video' ===
// ID de la vidéo (extrait de l'URL: https://gade.o-k-i.net/w/VIDEO_ID)
define('HERO_VIDEO_ID', '1aJ2u9euwF9fWKQhFxwFio');
// Titre de la vidéo (optionnel, pour l'accessibilité)
define('HERO_VIDEO_TITLE', 'Vidéo de présentation');
// === Configuration pour HERO_TYPE = 'playlist' === // === Configuration pour HERO_TYPE = 'playlist' ===
// Type de plateforme: 'peertube', 'funkwhale', 'castopod' // Type de plateforme: 'peertube', 'funkwhale', 'castopod'
@@ -256,7 +265,18 @@ define('PLAYLIST_TITLE', 'Sélection OKI');
define('PLAYLIST_DESCRIPTION', 'Notre sélection de vidéos'); define('PLAYLIST_DESCRIPTION', 'Notre sélection de vidéos');
---- ----
=== 🎵 Exemples de configuration par plateforme === 🎬 Exemples de configuration
==== Vidéo unique PeerTube
[source,php]
----
define('HERO_TYPE', 'video');
define('HERO_VIDEO_ID', '1aJ2u9euwF9fWKQhFxwFio');
define('HERO_VIDEO_TITLE', 'Présentation du mouvement');
----
L'URL de la vidéo sera : `https://gade.o-k-i.net/w/1aJ2u9euwF9fWKQhFxwFio`
==== PeerTube (Playlist vidéo) ==== PeerTube (Playlist vidéo)
+5 -1
View File
@@ -108,12 +108,16 @@ if (!defined('CACHE_DURATION')) define('CACHE_DURATION', 3600); // En secondes (
// ========================================= // =========================================
// Type de contenu à afficher dans la section hero // Type de contenu à afficher dans la section hero
// Options: 'live' (direct PeerTube), 'playlist' (playlist audio/vidéo), 'none' (masquer) // Options: 'live' (direct PeerTube), 'playlist' (playlist audio/vidéo), 'video' (vidéo unique), 'none' (masquer)
if (!defined('HERO_TYPE')) define('HERO_TYPE', 'live'); if (!defined('HERO_TYPE')) define('HERO_TYPE', 'live');
// Configuration pour le direct (HERO_TYPE = 'live') // Configuration pour le direct (HERO_TYPE = 'live')
if (!defined('LIVE_ACCOUNT_NAME')) define('LIVE_ACCOUNT_NAME', 'admin'); if (!defined('LIVE_ACCOUNT_NAME')) define('LIVE_ACCOUNT_NAME', 'admin');
// Configuration pour une vidéo unique (HERO_TYPE = 'video')
if (!defined('HERO_VIDEO_ID')) define('HERO_VIDEO_ID', '1aJ2u9euwF9fWKQhFxwFio');
if (!defined('HERO_VIDEO_TITLE')) define('HERO_VIDEO_TITLE', 'Vidéo de présentation');
// Configuration pour les playlists (HERO_TYPE = 'playlist') // Configuration pour les playlists (HERO_TYPE = 'playlist')
// Type de plateforme: 'peertube', 'funkwhale', 'castopod' // Type de plateforme: 'peertube', 'funkwhale', 'castopod'
if (!defined('PLAYLIST_PLATFORM')) define('PLAYLIST_PLATFORM', 'peertube'); if (!defined('PLAYLIST_PLATFORM')) define('PLAYLIST_PLATFORM', 'peertube');
+8 -1
View File
@@ -34,12 +34,19 @@ define('APP_HOST_NAME', 'fediverse.o-k-i.net');
// ========================================= // =========================================
// Type de contenu à afficher dans la section hero // Type de contenu à afficher dans la section hero
// Options: 'live' (direct PeerTube), 'playlist' (playlist audio/vidéo), 'none' (masquer) // Options: 'live' (direct PeerTube), 'video' (vidéo unique), 'playlist' (playlist audio/vidéo), 'none' (masquer)
// define('HERO_TYPE', 'live'); // define('HERO_TYPE', 'live');
// Configuration pour le direct (HERO_TYPE = 'live') // Configuration pour le direct (HERO_TYPE = 'live')
// define('LIVE_ACCOUNT_NAME', 'admin'); // define('LIVE_ACCOUNT_NAME', 'admin');
// Configuration pour une vidéo unique (HERO_TYPE = 'video')
// ID de la vidéo (extrait de l'URL: https://gade.o-k-i.net/w/VIDEO_ID)
// define('HERO_VIDEO_ID', '1aJ2u9euwF9fWKQhFxwFio');
// Titre de la vidéo (optionnel, pour l'accessibilité)
// define('HERO_VIDEO_TITLE', 'Vidéo de présentation');
// Configuration pour les playlists (HERO_TYPE = 'playlist') // Configuration pour les playlists (HERO_TYPE = 'playlist')
// Type de plateforme: 'peertube', 'funkwhale', 'castopod' // Type de plateforme: 'peertube', 'funkwhale', 'castopod'
// define('PLAYLIST_PLATFORM', 'peertube'); // define('PLAYLIST_PLATFORM', 'peertube');
+37 -2
View File
@@ -1,9 +1,10 @@
<?php <?php
/** /**
* Section Hero - Affichage conditionnel (Direct / Playlist / Rien) * Section Hero - Affichage conditionnel (Direct / Playlist / Vidéo / Rien)
* *
* Ce fichier gère l'affichage de la section hero en fonction de la configuration: * Ce fichier gère l'affichage de la section hero en fonction de la configuration:
* - HERO_TYPE = 'live': Affiche le direct PeerTube * - HERO_TYPE = 'live': Affiche le direct PeerTube
* - HERO_TYPE = 'video': Affiche une vidéo PeerTube unique
* - HERO_TYPE = 'playlist': Affiche une playlist (PeerTube/Funkwhale/Castopod) * - HERO_TYPE = 'playlist': Affiche une playlist (PeerTube/Funkwhale/Castopod)
* - HERO_TYPE = 'none': N'affiche rien * - HERO_TYPE = 'none': N'affiche rien
*/ */
@@ -19,7 +20,15 @@ if ($heroType === 'none') {
<section class="hero" aria-labelledby="hero-section-title"> <section class="hero" aria-labelledby="hero-section-title">
<h2 id="hero-section-title" class="sr-only"> <h2 id="hero-section-title" class="sr-only">
<?php echo $heroType === 'live' ? 'Diffusion en direct' : 'Playlist'; ?> <?php
if ($heroType === 'live') {
echo 'Diffusion en direct';
} elseif ($heroType === 'video') {
echo 'Vidéo';
} else {
echo 'Playlist';
}
?>
</h2> </h2>
<?php if ($heroType === 'live'): ?> <?php if ($heroType === 'live'): ?>
@@ -252,5 +261,31 @@ if ($heroType === 'none') {
</div> </div>
<?php endif; ?> <?php endif; ?>
<?php elseif ($heroType === 'video'): ?>
<!-- Mode VIDÉO -->
<?php
$videoId = defined('HERO_VIDEO_ID') ? HERO_VIDEO_ID : '';
$videoTitle = defined('HERO_VIDEO_TITLE') ? HERO_VIDEO_TITLE : 'Vidéo de présentation';
if (!empty($videoId)):
?>
<div class="hero-video-container">
<iframe
src="<?php echo PEERTUBE_URL; ?>/videos/embed/<?php echo $videoId; ?>"
frameborder="0"
allowfullscreen="allowfullscreen"
sandbox="allow-same-origin allow-scripts allow-popups"
allow="autoplay; fullscreen"
title="<?php echo htmlspecialchars($videoTitle); ?>">
</iframe>
</div>
<?php else: ?>
<div class="hero-no-live">
<i class="fas fa-video"></i>
<h2>Vidéo non configurée</h2>
<p>Configurez HERO_VIDEO_ID dans votre fichier de configuration.</p>
</div>
<?php endif; ?>
<?php endif; ?> <?php endif; ?>
</section> </section>