Annonce

Écrire une réponse

Veuillez écrire votre message et l'envoyer

Cliquez dans la zone sombre de l'image pour envoyer votre message.

Retour

Résumé de la discussion (messages les plus récents en premier)

ddtddt
2011-03-20 13:45:16

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

ddtddt
2011-03-20 13:24:51

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);
}

Gotcha
2011-03-20 12:01:56

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 :-)

Pied de page des forums

Propulsé par FluxBB

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