penser à échapper les ' par \ ce que je n'ai pas fais dans la partie code de gotcha (je ne l'avais pas lu)
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);
}
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 :
$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
Où 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 :
{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 :
<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 :-)