1 24-01-2026 09:20 -

Je cherchais désespérément à installer le "Plugin personnel" depuis le magasin d'extension Piwigo. Sur mes sites anciens, je le vois bien dans la liste des plugins activés, bien que le lien vers sa page d'extension mène à une page générale de doc sur l'administration d'un Piwigo.
Alors j'ai demandé à ddtddt. Et il vient de me répondre, disponible, patient et pertinent comme toujours, dans son style minimaliste légendaire :

Un plugin personnel comme son nom l'indique est personnel donc il n'apparait pas sur le site des extensions c'est normal.
Il apparait dans les plugins à activer uniquement quand avec LFE (ou par FTP en manuel) il existe. Donc en l'ayant fait, il apparait.
Si via LFE tu n'as pas de plugin perso c'est normal qu'il ne te propose pas de l'activer.

Il m'a fallu un petit moment pour réaliser, après 10 ans de Piwigo au compteur, pourquoi on ne trouvait pas ce plugin en magasin. Et soudain : Fiat lux !

Donc voilà le principe d"utilisation:
1 - Je copie le code
2 - J'ouvre Local File Editor dans la page des plugins de mon Piwigo
3 - Dans son onglet "Plugin Personnel", je colle le code et j'enregistre
4 - Dans mon lot de plugins désactivés, je vois alors que Plugin Personnel est apparu. Je l'active.
5 - Et tada ... mon code est actif (enfin quand le dis "mon", je veux dire celui dont on m'a aimablement gratifiée : car moi, je ne crée pas de plugin personnel, je copie-colle le code de ceux qu'on me donne quand je mendie sur les forums. Par ex. quand je voulais obtenir un ordre aléatoire des albums en accueil.)

Aucun de nous ne sait ce que nous savons tous, ensemble.

WWW

2 24-01-2026 10:47 -

Je cherchais un moyen de changer de façon aléatoire l'ordre des albums de premier niveau sur ma page d'accueil. Pas l'ordre des sous-albums. Pour que l'apparence de cette page d'accueil change à chaque rechargement de page.

J'ai trouvé la solution. Voyez mon site : https://album.chauvigne.info/
Non, j'ai menti : j'ai bien la recette et c'est GBO qui me l'a donnée. Un grand merci à lui. Et même avec 2 variantes, l'une crée un ordre aléatoire pour les albums de 1er niveau (chez moi, la page d'accueil), l'autre ajoute aussi l'aléa d'affichage sur tous les sous-albums :

Les plugins Local Files Editor et Plugin personnel étant activés, dans l'onglet Plugin personnel de Local files Editor, mettre :

/** pour ordre aléatoire des albums - Code GBO - albums 1er niveau seulement**/
add_event_handler('loc_begin_index_category_thumbnails_query','random_sort_album');
function random_sort_album($query){
global $page;

if (empty($page['body_data']['category_id'])) // album level = 1
{$query = str_replace(' ORDER BY `rank`',' ORDER BY RAND()',$query);}

return $query;
}

ou

/** pour ordre aléatoire des albums - Code GBO - albums tous niveaux**/
add_event_handler('loc_begin_index_category_thumbnails_query','random_sort_album');
function random_sort_album($query){
  $query = str_replace(' ORDER BY `rank`',' ORDER BY RAND()',$query);
  return $query;
}

-------------------------------
Gérard a trouvé que le résultat avec changement d'affichage à chaque rechargement de page était un peu violent (ce sont ses termes) pour le visiteur qui pouvait se trouver désorienté. Moi pas. J'aime bien le 100% aléatoire, c'est juste ce que je voulais : c'est un peu comme mon Husky qui fait croire à toute la vallée qu'il est toute une meute, en changeant d'emplacement et en modulant son hurlement.

Ce merveilleux code ajoute de la fantaisie, de l'inattendu et c'est seulement sur la home. Et si ça perturbe le visiteur, tant mieux. J'ai beau être stricte quand il s'agit de html (vois mes gueulantes réitérées sur les titres), mes Piwigos sont faits pour m'amuser. Je n'ai plus de compte à rendre à quiconque.

Alors GBO m'a fait parvenir 4 codes différents à entrer dans l'onglet Plugin personnel de Local Files Editor, selon que l'on applique l'aléa seulement aux albums de 1er niveau ou également aux sous-albums. Et selon que l'affichage aléatoire se mette en branle à chaque rechargement de page ou toutes les 3 heures.

Alors voilà :

1 - Ordre d'affichage des albums aléatoire à chaque chargement de page

1a - Pour tous les niveaux

/** pour ordre aléatoire des albums - Code GBO - albums tous niveaux**/
add_event_handler('loc_begin_index_category_thumbnails_query','random_sort_album');
function random_sort_album($query){
  $query = str_replace(' ORDER BY `rank`',' ORDER BY RAND()',$query);
  return $query;
}

1b- Seulement pour le niveau 1

/** pour ordre aléatoire des albums - Code GBO - albums 1er niveau seulement**/
add_event_handler('loc_begin_index_category_thumbnails_query','random_sort_album');
function random_sort_album($query){
global $page;

if (empty($page['body_data']['category_id'])) // album level = 1
{$query = str_replace(' ORDER BY `rank`',' ORDER BY RAND()',$query);}

return $query;
}

2 - L'ordre d'affichage des albums change toutes les 3 heures

2a - Pour tous les niveaux

add_event_handler('loc_begin_index_category_thumbnails_query','random_sort_album');
 function random_sort_album($query){
// Album sort order change every 3 hours ( 24/8)
$sOrder = fmod(date("j") + date("H"),8);
if ($sOrder > 0)
   { if ($sOrder == 1)  $replace = ' ORDER BY name';
     if ($sOrder == 2)  $replace = ' ORDER BY comment';
     if ($sOrder == 3)  $replace = ' ORDER BY lastmodified';
     if ($sOrder == 4)  $replace = ' ORDER BY count_images ';
     if ($sOrder == 5)  $replace = ' ORDER BY name DESC';
     if ($sOrder == 6)  $replace = ' ORDER BY comment DESC';
     if ($sOrder == 7)  $replace = ' ORDER BY lastmodified DESC';
     $query = str_replace(' ORDER BY `rank`',$replace,$query);
  }
return $query;
}

2b - Seulement pour le niveau 1

add_event_handler('loc_begin_index_category_thumbnails_query','random_sort_album');
 function random_sort_album($query)
{   global $page;
    if (empty($page['body_data']['category_id'])) // album level = 1 
       { $sOrder = fmod(date("j") + date("H"),8);
           if ($sOrder > 0)
               {  if ($sOrder == 1)  $replace = ' ORDER BY name';
                  if ($sOrder == 2)  $replace = ' ORDER BY comment';
                  if ($sOrder == 3)  $replace = ' ORDER BY lastmodified';
                  if ($sOrder == 4)  $replace = ' ORDER BY count_images ';
                  if ($sOrder == 5)  $replace = ' ORDER BY name DESC';
                   if ($sOrder == 6)  $replace = ' ORDER BY comment DESC';
                   if ($sOrder == 7)  $replace = ' ORDER BY lastmodified DESC';
                   $query = str_replace(' ORDER BY `rank`',$replace,$query);
                }
    }
return $query;
}
Aucun de nous ne sait ce que nous savons tous, ensemble.

WWW

3 24-01-2026 10:53 -

/** thumbnails.tpl **/
add_event_handler('get_thumbnail_title', 'MYthumbnail_title');
function MYthumbnail_title()
{
  return '';
}
Aucun de nous ne sait ce que nous savons tous, ensemble.

WWW

4 24-01-2026 10:54 -

add_event_handler('loc_begin_index', 'add_album_name');
function add_album_name() {
  global $template, $page;
  if (!empty($page['category']['id'])) {
    $query = 'SELECT name FROM ' . CATEGORIES_TABLE . ' WHERE id = \'' . $page['category']['id'] . '\';';
    $result = pwg_query($query);
    $row = pwg_db_fetch_assoc($result);
    $namealbum = trigger_change('AP_render_content', $row['name']);
    if (!empty($namealbum) && !empty($page['category']['id'])) {
      $template->assign('PAGE_TITLE3',$namealbum);
    }
  }
}
Aucun de nous ne sait ce que nous savons tous, ensemble.

WWW

5 24-01-2026 10:56 -

add_event_handler('loc_end_page_header', 'Change_Title_home');
function Change_Title_home(){
  global $template, $page, $conf;  
  if ((isset($page['section']) and $page['section'] == 'categories' and empty($page['category']['id'])))
    {
    $template->assign('PAGE_TITLE3',"Albums de la galerie" );
    }
}
Aucun de nous ne sait ce que nous savons tous, ensemble.

WWW

6 24-01-2026 10:57 -

add_event_handler('loc_end_page_tail', 'removecontact');
function removecontact() {
  global $template;
   
  $template->clear_assign('CONTACT_MAIL');
}
Aucun de nous ne sait ce que nous savons tous, ensemble.

WWW

7 24-01-2026 11:07 -

add_event_handler('loc_begin_page_header', 'changeAppIconFilter' );
function changeAppIconFilter() {
 global $template;
 $template->set_prefilter('header', 'changeAppIcon');
}

function changeAppIcon($content, &$smarty) {
 $search = '#themes/bootstrap_darkroom/img/logo.png#';

 $replacement = 'local/favicon.ico';  /* <-- Set your logo path/name here */

 return preg_replace($search, $replacement, $content);
}
Aucun de nous ne sait ce que nous savons tous, ensemble.

WWW

8 24-01-2026 12:02 -

add_event_handler('loc_end_page_header', 'scroll_to_top');

function scroll_to_top()
{
  global $template;
  $template->set_prefilter('header', 'scroll_to_top_pref', 100);
}

function scroll_to_top_pref($content)
{
  $search = '<body id="{$BODY_ID}" class="{foreach from=$BODY_CLASSES item=class}{$class} {/foreach}"  data-infos=\'{$BODY_DATA}\'>';
  $scroll = '
{html_style}{literal}
.scrollup {
    width:48px; height:48px; opacity:0.7; position:fixed; border-radius:24px;
    bottom:50px; right:50px; display:none; text-indent:-9999px;
    background: rgba(255,255,255,0.8) url("https://beauxvoyages.fr/photos/img/down.png") no-repeat;
    z-index:1000; border:none !important; text-decoration:none !important;
}
.scrollup:hover { opacity:1; }
{/literal}{/html_style}
{footer_script}{literal}
jQuery(window).scroll(function(){
    if (jQuery(this).scrollTop() > 100) {
        jQuery(".scrollup").fadeIn();
    } else {
        jQuery(".scrollup").fadeOut();
    }
});
jQuery(".scrollup").click(function(){
    jQuery("html, body").animate({ scrollTop: 0 }, 600);
    return false;
});
{/literal}{/footer_script}
<a href="#" class="scrollup">Scroll</a>';
  
  return str_replace($search, $search.$scroll, $content);
}
Aucun de nous ne sait ce que nous savons tous, ensemble.

WWW