Annonce

  •  » Plugins
  •  » [Résolu] Creer un filtre pour médias

#1 2013-07-04 09:00:45

TefenX
Membre
2013-07-02
32

[Résolu] Creer un filtre pour médias

Bonjour,

Tout nouvel utilisateur de Piwigo que je suis, j'ai été séduit par cet outil aux multiples fonctionnalités et extensible à souhaits grâce au sytème de plugins.

C'est d'ailleurs ce qui m'ammène à poster ici car je rencontre un problème dans la création de plugin.

Je vais essayer d'être le plus clair et précis possible.

Dans ma galerie j'ai différents médias des photographies mais aussi des vidéos et des Pdf.
Tout ces médias sont répartis dans plusieurs albums.

J'ai créé trois liens (photos/videos/pdf) dans un template extension de header.tpl (my-header.tpl).
Ces liens renvoient à une page de traitement qui passe en variable de session la valeur à savoir, si l'internaute clique sur photo la variable de session est égale a photo (pareil pour les deux autres).

En gros il s'agit d'appliquer un filtre sur les médias.

Ce que je souhaiterai c'est que lorsque l'utilisateur selectionne un album il n'ai à l'écran que les médias qu'il a choisit de voir au préalable (photo/ vidéos/ pdf).

Exemple:

L'utilisateur arrive sur le site il clique sur le lien pdf ce qui lui affiche toutes les catégories/ albums et lorsqu'il ouvre un album seul les pdf et seulement les pdf s'affichent.

Voici le code que j'ai commencé à écrire à l'aide de PersonalPlugin:

add_event_handler('loc_begin_index_thumbnails', 'aff_picture');

function aff_picture(){
    global $template, $page;
    $template->set_prefilter('index_thumbnails', 'aff_picture_prefilter');
}

function aff_picture_prefilter($content, &$smarty)
{
/************************SI VAR IMG OU VIDEO OU PDF******************************/
        $_SESSION['setMediaType'];
            echo $_SESSION['setMediaType'];
           
            if ($_SESSION['setMediaType']==""){
                header("location:index.php");
            }
           
            if ($_SESSION['setMediaType']==="photos"){
                $ext= "- rle-jpeg-jpe-gif-png-bmp-tif-tiff-jpg-tga-";
                }

             if ($_SESSION['setMediaType']==="videos"){
                $ext= "- wmv-avi-mp4-";
            }
            if ($_SESSION['setMediaType']==="pdf"){
                $ext= "- pdf-";
            }
             $curExt=str_replace('-','',$ext);
            echo '<br>'.$curExt;
           
// récupère la variable 'thumbnails' assignée au template
    $thumbnails_list = $smarty->get_template_vars('thumbnails');
                        
    // les affiche a l'écran
    print_r ($thumbnails_list[0]['file']);

            for($cpt=0; $cpt<$taille;$cpt++){             // pour toutes les imgs du tableau
        $res= $thumbnails_list[$cpt]['file'];                    //on passe chaque valeur dans une chaine de caractère
        $extension= strtolower($res);
        echo '<br>HI '.$extension;
               
        $extension=strstr($res,'.');            //cherche le premier caractère de la chaine
        $extension=substr($extension,1) ;         //suppression du '.' de la chaine precedente
                        //mise en minuscule
        $pos = strrpos( $curExt, $extension );    // recherche si une extension existe dans une chaine
               
        if($pos == true){                        //si elle existe alors

    //echo "<br/><img src='images.jpeg' alt=' $extension existe dans $ext' style='border:5px solid green;'/>";
        echo "<img src='.$thumbnails_list[$cpt][\'path\']' alt='.$res' style='border:5px solid green;'>";
        }
        //sinon...
        else{
        //echo "<br/><img src='images.jpeg' alt=' $extension existe dans $ext' style='border:5px solid red;'/>";
        echo "<img src='.$thumbnails_list[$cpt][\'rel_path\']' alt='$thumbnails_list[$name]' style='border:5px solid red;'>";


En fait je ne comprends pas trop quel event handler utiliser. Si quelqu'un a un lien donnant plus de précisions sur ce que  fait ça:

add_event_handler('loc_begin_index_thumbnails', 'aff_picture');

function aff_picture(){
    global $template, $page;
    $template->set_prefilter('index_thumbnails', 'aff_picture_prefilter');
}

Merci par avance pour l'aide que vous pourrez m'apporter.

Cordialement

Hors ligne

#2 2013-07-04 10:32:35

flop25
Équipe Piwigo
2006-07-06
6544

Re: [Résolu] Creer un filtre pour médias

Bonjour

TefenX a écrit:

En fait je ne comprends pas trop quel event handler utiliser. Si quelqu'un a un lien donnant plus de précisions sur ce que  fait ça:

add_event_handler('loc_begin_index_thumbnails', 'aff_picture');

function aff_picture(){
    global $template, $page;
    $template->set_prefilter('index_thumbnails', 'aff_picture_prefilter');
}

par exemple
http://piwigo.org/dev/browser/extension … nc.php#L26
on définit un préfiltre, afin de pouvoir modifier le code html retourné, en faisant des "cherche&remplace" du contenu qui est $content, au lieu de faire des echo()

là j'utilise loc_end_index_thumbnails qui peut permettre l'accès à la variable $tpl_thumbnails_var qui contient toutes les miniatures et leur propriété : ainsi avant le préfiltre on peut déjà modifier les variables utilisées pour l'affichage. Perso j'y verrais bien votre filtre de contenu ici, selon la variable de session

D'ailleurs vous pourriez plutôt utiliser les fonctions intégrées de piwigo à savoir pwg_set_session_var('nom', 'valeur') et pwg_unset_session_var('nom')

Hors ligne

#3 2013-07-04 10:58:11

TefenX
Membre
2013-07-02
32

Re: [Résolu] Creer un filtre pour médias

Tout d'abord merci pour votre réponse je vais tenter de mettre en application ce que vous m'avez expliqué. Et je vous tiens au courant de l'avancement des choses.

Cordialement

Hors ligne

#4 2013-07-04 15:22:25

TefenX
Membre
2013-07-02
32

Re: [Résolu] Creer un filtre pour médias

Re-bonjour,

Je reviens vers vous car il semblerait que je n'ai strictement rien comprit. J'utilise donc  le trigger cité ci-dessus dans lequel j'applique mon filtre (je ne me suis pas occuppé encore d'utiliser les variables de session de piwigo mais ça viendra plus tard). ça a bien résolu un de mes soucis à savoir devoir toujours refresh mon template "my-thumbnails" pour afficher son contenu. Bref cela étant j'ai rien réussit à faire d'autre car le plugin va chercher et afficher toutes les miniatures sans prendre en considération les conditions ou la variable de session.

En bref je suis coincé avec le code que tu m'as indiqué. (à savoir que j'ai simplement reprit la fonction à partir de la ligne 26). J'espère ne pas m'être trompé au moins pour ça....


Cordialement

Hors ligne

#5 2013-07-08 09:08:09

TefenX
Membre
2013-07-02
32

Re: [Résolu] Creer un filtre pour médias

Salut,

Bon n'ayant pas réussit à avancer sur mon "plugin" je m'en tourne à nouveau vers vous.
J'aimerai avoir votre avis, vos remarques sur ce bout de code que j'ai pondu, et même me dire si je suis complètement à coté de la plaque...
Cela fait maintenant une semaine que je bloque et ça devient assez agaçant pour rester polie. :)

Code:

add_event_handler('loc_end_index_thumbnail', 'imgpreview_thumbnails');
  function imgpreview_thumbnails($tpl_thumbnails_var)
  {
  
  /*
  /* Var session
  */
      $_SESSION['setMediaType'];
      //echo $_SESSION['setMediaType'];
      $ext=''; 
       if ($_SESSION['setMediaType']==="photos"){
        $ext= "- rle-jpeg-jpe-gif-png-bmp-tif-tiff-jpg-tga-";
        } 

       if ($_SESSION['setMediaType']==="videos"){
        $ext= "- wmv-avi-mp4-";
      }
      if ($_SESSION['setMediaType']==="pdf"){
        $ext= "- pdf-";
      }
      
  /*
  /*Fin var session
  */
      
          global $template, $conf ;
          $conf_imgp = explode("#" , $conf['imgpreview']);
          $imgpreview=array( 'width' => $conf_imgp[0], 'height' => $conf_imgp[1], 'title' => $conf_imgp[2], 'opacity' => $conf_imgp[3] , 'preloadImages' => $conf_imgp[4] );
      $template->assign(array(
                  'imgpreview' => $imgpreview
          ));
      /*
      * Préfiltre
      */
      $template->set_prefilter('index_thumbnails', 'imgpreview_prefilter_thumbnails');
          $template->set_prefilter('stuffs', 'imgpreview_prefilter_thumbnails');
          $dir=dirname(__FILE__).'/css_js.tpl';
          $template->set_filenames(array(
                  'imgpreview_css_js' => realpath($dir),
            )  );
          $template->assign_var_from_handle('IMGPREVIEW', 'imgpreview_css_js');
         /*
       * Fin préfiltre
       */
       
      /*
      * Actions sur les extensions
      */
      $curExt=str_replace('-','',$ext);
      $taille=count($tpl_thumbnails_var);// calcul taille tableau
      
      for($cpt=0; $cpt<$taille;$cpt++){       // pour toutes les imgs du tableau
        $res= $tpl_thumbnails_var[$cpt]['file'];          //on passe chaque valeur dans une chaine de caractère
        $name=$tpl_thumbnails_var[$cpt]['name'];
        $addr= $tpl_thumbnails_var[$cpt]['path'];
        $extension= strtolower($res);//mise en minuscule
        
        $extension=strstr($res,'.');      //cherche le premier caractère de la chaine
        $extension=substr($extension,1);     //suppression du '.' de la chaine precedente
            
        $pos = strrpos( $curExt, $extension );
        /*
        * Fin actions sur extensions
        */
        
        //echo '<br>extension : '.$taille.'<br>';
        if($pos == true){            //si elle existe alors
        
            //echo "<img class='thumbnail' src='$addr' alt='$name' style='border:5px solid green;'>";
             
          }
          //sinon...
          else{ 

            //echo "<img class='thumbnail' src='$addr' alt='$name' style='border:5px solid red;'>";
          }
      }
      return $tpl_thumbnails_var;
}

Merci d'avance pour toutes vos remarques constructives que vous pourrez m'apporter !

Cordialement

Tiphaine.

Hors ligne

#6 2013-07-08 18:53:45

flop25
Équipe Piwigo
2006-07-06
6544

Re: [Résolu] Creer un filtre pour médias

ça devient agaçant certes, mais vous n'avez apparemment aucune compréhension de ce que vous faites, sans vouloir vous vexer
Moi-même je ne suis pas pas programmeur, je ne comprends pas tout, j'ai appris sur le tas avec le site du zéro le php..., mais tout de même copier exactement le plugin que je vous avais mis en exemple... enfin il y a 90% qui ne vous sert à rien et qui est du plugin Image preview
par ex:

Code:

          global $template, $conf ;
          $conf_imgp = explode("#" , $conf['imgpreview']);
          $imgpreview=array( 'width' => $conf_imgp[0], 'height' => $conf_imgp[1], 'title' => $conf_imgp[2], 'opacity' => $conf_imgp[3] , 'preloadImages' => $conf_imgp[4] );
      $template->assign(array(
                  'imgpreview' => $imgpreview
          ));

c'est la configuration même du plugin ! ça ne vous sert à rien... je vous l'avais mis en exemple pour que vous voyiez ceci

Code:

add_event_handler('loc_end_index_thumbnail', 'mafonction_thumbnails');
function mafonction_thumbnails($tpl_thumbnails_var)
{
// préfiltre
global $template
$template->set_prefilter('index_thumbnails', ' mon_prefiltre_thumbnails');
// on peut faire mumuse avec les variables des miniatures
foreach $tpl_thumbnails_var
blabla

//on retourne les variables
return $tpl_thumbnails_var;
}
function mon_prefiltre_thumbnails($content, &$smarty)
{
//faire qqchose avec le contenu
$content="blabla"; // et pas des echo()
return $content;
}

est-ce plus clair désormais?

Hors ligne

#7 2013-07-08 21:52:57

TefenX
Membre
2013-07-02
32

Re: [Résolu] Creer un filtre pour médias

La c'est même plus que clair vous m'avez carrément maché le travail, je n'en demandais pas tant....C'est pas comme ça que je vais réussir à progresser (même si je dois vous paraître complètement nulle, ce qui est certainement le cas j'ai une certaine envie de progresser) Mais je me rends compte que je me suis très mal exprimé en faisant ma demande, ce que vous appelez la configuration du plugin en fait je voulais savoir ce que ça faisait car je n'en comprenais pas l'intéret pour mon cas. Et effectivement vous me le confirmez que ce n'avez aucun intéret.

De plus:

$template->set_prefilter('index_thumbnails', ' mon_prefiltre_thumbnails');

Est ce que ceci signifie qu'on ajoute un préfiltre (mon_prefiltre_thumbnails (a changer j'en conviens (ça évitera de me le dire si jamais j'ai une réponse))) a la variable $template?

Et pour finir en quoi je serai vexée? si je viens ici c'est bien parce que j'e n'ai aucune idée de comment je dois m'y prendre, j'évite de poster pour le plaisir de poster....(enfin j'ose l'espérer)


Du coup je vous remercie pour la structure que voilà et il ne me restera plus qu'a utiliser les variables de sessions de piwigo pour finir cette partie là.

Cordialement

Tiphaine

Hors ligne

#8 2013-07-10 15:12:16

TefenX
Membre
2013-07-02
32

Re: [Résolu] Creer un filtre pour médias

Finalement peut-être pas si simple que ça, j'ai l'impression qu'en fait la fonction n'est jamais exécutée. Car je tente d'afficher quelque chose que ce soit (return/print_r/var_dump ou echo, oui oui je sais qu'il est proscrit mais il fallait que je teste) rien ne se passe.

Je suis confus, là je souhaite afficher le contenu de $tpl_thumbnails_var, le passer par un explode pour ensuite en extraire les extension etc.... mais rien...

Après si je pouvais avoir un peu plus d'explications sur le fonctionnement de "loc_end_index_thumbnails" parce que je trouve pas des masses d'infos (ou sinon un simple lien qui m'aurai echappé ferait parfaitement l'affaire)


Cordialement

Hors ligne

#9 2013-07-10 15:17:46

flop25
Équipe Piwigo
2006-07-06
6544

Re: [Résolu] Creer un filtre pour médias

le print_r barbare ça marche, je le fais souvent pour tester

Mettez votre code ou bout de code à chaque fois svp

Dernière modification par flop25 (2013-07-10 15:23:54)

Hors ligne

#10 2013-07-10 15:31:40

TefenX
Membre
2013-07-02
32

Re: [Résolu] Creer un filtre pour médias

Par exemple :

Code:

add_event_handler('loc_end_index_thumbnail', 'filter_thumbnails');

      
function filter_thumbnails($tpl_thumbnails_var)
{
  
   // préfiltre
  global $template;
  
  
  $template->set_prefilter('index_thumbnails', 'filter_prefiltre_thumbnails');
  
  $taille=count($tpl_thumbnails_var);
  print_r ($taille);
  for ($pt=0; cpt<$taille;$cpt++){  
                  ...

Ce n'est qu'un exemple mais même ça, ne s'affiche pas. J'ai testé d'autres manipultations que je ne mettrai pas ici vu que ça  ne fonctionne pas non plus mais je pense que soit je me suis une fois de plus trompé (ce qui ne m'étonnerai guère) soit que la fonction n'est jamais utilisée. Ou alors il ne fallait pas que je la créé dans le plugin perso...

Cordialement

Hors ligne

#11 2013-07-10 15:36:26

flop25
Équipe Piwigo
2006-07-06
6544

Re: [Résolu] Creer un filtre pour médias

ça devrait marcher
Vous avez bien activé le plugin ? Vous testez bien sur une page avec des miniatures ?

Hors ligne

#12 2013-07-10 15:43:02

TefenX
Membre
2013-07-02
32

Re: [Résolu] Creer un filtre pour médias

Oui Plugin activé (j'ai d'autre fonction dans ce plugin qui fonctionnent correctement (je me dis peut etre que c'est une erreur d'avoir plusieurs 'mini-plugin' ), et oui la page contient des miniatures qui sont affichées à l'écran mais impossible d'afficher ne serait ce qu'une chaine de caractère.

Cordialement

Hors ligne

#13 2013-07-10 15:49:00

flop25
Équipe Piwigo
2006-07-06
6544

Re: [Résolu] Creer un filtre pour médias

add_event_handler('loc_end_index_thumbnails', 'filter_thumbnails');
^^ ça m'arrive aussi

Hors ligne

#14 2013-07-10 15:51:18

TefenX
Membre
2013-07-02
32

Re: [Résolu] Creer un filtre pour médias

Oh mince je suis stupide aussi quelques fois, combien de fois j'ai relue le code sans m'en rendre compte.... j'ai vraiment honte...

En tout les cas merci beaucoup


Cordialement

Hors ligne

#15 2013-07-11 18:30:47

TefenX
Membre
2013-07-02
32

Re: [Résolu] Creer un filtre pour médias

Salut,

Bon juste un ptit message non pas pour vous embêter plus longtemps mais pour vous remercier d'avoir su m'accorder du temps pour m'aider à la fois à la compréhension du fonctionnement de Piwigo et à la fois dans mon projet (qui n'est pas encore finit) mais qui avance grâce à vous.


Cordialement

Hors ligne

  •  » Plugins
  •  » [Résolu] Creer un filtre pour médias

Pied de page des forums

Propulsé par FluxBB

github twitter newsletter Faire un don Piwigo.org © 2002-2024 · Contact