#1 2011-03-20 12:01:56

Gotcha
Ex Equipe Piwigo
Pierrelatte (26)
2007-03-14
13331

[Résolu] prefilter pour thème évolutif

Contexte :

Pour la création d'un thème, je souhaite m'appuyer sur le thème "default". Il est donc mon thème parent.
J'ai besoin d'adapter des templates seulement, je ne veux pas copier les templates pour les adapter car en cas d'évolutions du thème parent, je perds tout le bénéfice.

Pierrick me conseil d'utiliser les filtres de pre-compilation (prefilter) de Smarty.
L'exemple qu'il m'a donné est le suivant :

Code:

$template->set_prefilter('intro', 'community_pendings_on_intro');

$template->assign(
array(
'COMMUNITY_PENDINGS' => 'value'
),
)
);

[...]

function community_pendings_on_intro($content, &$smarty)
{
$pattern = '#<li>\s*{\$DB_ELEMENTS\}#ms';
$replacement = '<li>{$COMMUNITY_PENDINGS}</li><li>{$DB_ELEMENTS}';
return preg_replace($pattern, $replacement, $content);
}





[22:57] Pierrick LE GALL: j'applique le préfiltre community_pendings_on_intro sur le template "intro"
[22:57] Pierrick LE GALL: ce préfiltre cherche {$DB_ELEMENTS} et le remplace par {$COMMUNITY_PENDINGS}</li><li>{$DB_ELEMENTS}
[22:57] Pierrick LE GALL: ensuite j'affecte une valeur à $COMMUNITY_PENDINGS

intro est obtenu car déclaré comme tel dans le fichier ./admin/intro.php

Line 116 (RC4) : $template->set_filenames(array('intro' => 'intro.tpl'));

La fonction preg_replace est à l'origine une fonction de PHP que Smarty intègre.

Cas concret :
Sur cette base, je souhaite pouvoir injecter du code dans le template d'origine "footer.tpl".

Le code est le suivant :

Code:

{literal}
<script type="text/javascript">
jQuery().ready(function(jQuery){
  stt = jQuery('#scrolltotop');
  jQuery(window).scroll(function(){
    scrollTop = jQuery(window).scrollTop();
    jQuery('#scrolltotop a').click(function(){
        jQuery('html,body').stop().scrollTop(0);
    });
    if(scrollTop >= 300){
      if(stt.css('opacity') == 0){
        stt.stop().fadeTo(2000,1);
      }
    }else{
      if(stt.css('opacity') > 0){
        stt.stop().fadeTo(500,0);  
      } 
    }
  });
  jQuery(window).scroll();
});
</script>
{/literal}
 
<div id="scrolltotop"><a href="#">{'Scroll to top'|translate}</a></div>

Idéalement, ce code est à insérer avant le code :

Code:

<div id="copyright">

Problématique :
Le problème c'est que je ne parviens pas déjà à récupérer le nom donné au template "footer.tpl"
Du coup, au bout de plusieurs heure, je commence à n'avoir plus de cheveux.



Est-ce que quelqu'un pourrait m'aider ?
Merci d'avance :-)


Ayez comme premier réflexe de consulter le wiki.
Ensuite, veuillez effectuer une recherche sur le forum avant de poser votre question.

LE FAIRE EST LE REVELATEUR DE L'ETRE

Hors ligne

#2 2011-03-20 13:24:51

ddtddt
Équipe Piwigo
Quetigny (21) - France
2007-07-27
16915

Re: [Résolu] prefilter pour thème évolutif

je te propose de tester

add_event_handler('loc_end_page_tail', 'gotcha_theme');

function gotcha_theme()
{
    global $template;
    $template->set_prefilter('tail', 'gotcha_themeP');
}

function gotcha_themeP($content, &$smarty)
{
  $search = '#<div id="copyright">#';
 
  $replacement = '
{literal}
<script type="text/javascript">
jQuery().ready(function(jQuery){
  stt = jQuery('#scrolltotop');
  jQuery(window).scroll(function(){
    scrollTop = jQuery(window).scrollTop();
    jQuery('#scrolltotop a').click(function(){
        jQuery('html,body').stop().scrollTop(0);
    });
    if(scrollTop >= 300){
      if(stt.css('opacity') == 0){
        stt.stop().fadeTo(2000,1);
      }
    }else{
      if(stt.css('opacity') > 0){
        stt.stop().fadeTo(500,0); 
      }
    }
  });
  jQuery(window).scroll();
});
</script>
{/literal}

<div id="scrolltotop"><a href="#">{'Scroll to top'|translate}</a></div>
<div id="copyright">
  ';

  return preg_replace($search, $replacement, $content);
}


Vous aimez Piwigo alors n'hésitez pas à participer avec nous, plus d'infos sur la page "Contribuer à Piwigo". Si vous n'avez pas beaucoup de temps et que vous souhaitez nous soutenir vous pouvez aussi le faire par un don.

Hors ligne

#3 2011-03-20 13:45:16

ddtddt
Équipe Piwigo
Quetigny (21) - France
2007-07-27
16915

Re: [Résolu] prefilter pour thème évolutif

penser à échapper les ' par \ ce que je n'ai pas fais dans la partie code de gotcha (je ne l'avais pas lu)


Vous aimez Piwigo alors n'hésitez pas à participer avec nous, plus d'infos sur la page "Contribuer à Piwigo". Si vous n'avez pas beaucoup de temps et que vous souhaitez nous soutenir vous pouvez aussi le faire par un don.

Hors ligne

Pied de page des forums

Propulsé par FluxBB

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