Voici la solution que j'ai utilisé pour ce site :
http://www.comite-citoyen.orgcette solution prend en compte le paramétrage des blocks et l'utlisation des cookies.
Pour le paramétrage des blockspoids = chiffre impair -> contenu du block visible
poids = chiffre pair -> contenu du block invisible
les cookies servant à garder les contenus des blocks visibles et invisibles lors de la navigation.
Dans le fichier theme.html
<!-- Block Control stsrt -->
<script type="text/javascript" src="<{$xoops_url}>/themes/ccr/scripts/script.js"></script>
<script type="text/javascript" language="javascript">
<!--
var menu_open = "<{$xoops_url}>/themes/<{$xoops_theme}>/images/menu_open.gif";
var menu_close = "<{$xoops_url}>/themes/<{$xoops_theme}>/images/menu_close.gif";
//-->
</script>
<!-- Block Control end -->
pour le fichier : theme_blockleft.html
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td id="leftcolumn">
<div class="blockTitle">
<{if ($block.weight%2)==0 }>
<img name="img_left<{$smarty.foreach.i.iteration}>" src="<{$xoops_imageurl}>images/menu_open.gif" alt="<{$show_left_block}>" border="0" style="cursor: pointer;" onclick="toggleDisplay('block_left<{$smarty.foreach.i.iteration}>', 'block', 'none',this)">
<{else}>
<img name="img_left<{$smarty.foreach.i.iteration}>" src="<{$xoops_imageurl}>images/menu_close.gif" alt="<{$show_left_block}>" border="0" style="cursor: pointer;" onclick="toggleDisplay('block_left<{$smarty.foreach.i.iteration}>', 'block', 'none',this)">
<{/if}>
<{$block.title}>
</div>
<div id="block_left<{$smarty.foreach.i.iteration}>" class="blockContent"><{$block.content}></div>
<script type="text/javascript" language="javascript">
<!--
objname = 'block_left<{$smarty.foreach.i.iteration}>';
obj = getRef(objname);
if (GetCookie(objname)) {
obj.style.display = GetCookie(objname);
} else {
<{if ($block.weight%2)==0 }>
obj.style.display = "none";
<{else}>
obj.style.display = "block";
<{/if}>
}
//-->
</script>
</td>
</tr>
</table>
contenu du fichier scripts/script.js
var getById = (typeof document.getElementById != "undefined");
function toggleDisplay(objname, display1, display2, img) {
if (!getById) {
return;
}
obj = getRef(objname);
if (obj.style.display == display2) {
obj.style.display = display1;
eval("img.src=menu_close");
}
else
{
obj.style.display = display2;
eval("img.src=menu_open");
}
// Set cookie
var expdate = new Date();
expdate.setTime(expdate.getTime() + (24 * 60 * 60 * 1000 * 31));
ckstr = escape(obj.style.display);
SetCookie(objname, ckstr, expdate, "/");
}
function getRef(obj) {
if (getById) {
return(typeof obj == "string") ? document.getElementById(obj) : obj;
}
}
function getCookieVal(offset) {
var endstr = document.cookie.indexOf(";", offset);
if (endstr == -1) {
endstr = document.cookie.length;
}
return unescape(document.cookie.substring(offset, endstr));
}
function GetCookie(name) {
var arg = name + "=";
var alen = arg.length;
var clen = document.cookie.length;
var i = 0;
while (i < clen) {
var j = i + alen;
if (document.cookie.substring(i, j) == arg) {
return getCookieVal (j);
}
i = document.cookie.indexOf(" ", i) + 1;
if (i == 0) {
break;
}
}
return null;
}
function SetCookie(name, value) {
var argv = SetCookie.arguments;
var argc = SetCookie.arguments.length;
var expires = (argc > 2) ? argv[2] : null;
var path = (argc > 3) ? argv[3] : null;
var domain = (argc > 4) ? argv[4] : null;
var secure = (argc > 5) ? argv[5] : false;
document.cookie = name + "=" + escape (value) +
((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
((path == null) ? "" : ("; path=" + path)) +
((domain == null) ? "" : ("; domain=" + domain)) +
((secure == true) ? "; secure" : "");
}