Fork me on GitHub






intégration d'un script dans un thème
Semi pro
Inscrit: 07/03/2004 12:52
Messages: 591
Salut,

Je cherche à avoir des blocs rétractables dans mon thème (comme les options de notifications sur ce site (voir plus bas)).

C'est à dire que je souhaite ne voir que les en-têtes de blocs avec +/- et quand on clique ça se déroule gentiment...

J'ai pu récupérer le script dans le template et l'installer dans le thème sans problème.

Mon soucis c'est avec la boucle foreach.
Lorsque j'ai un bloc, ça marche, mais dès que j'en ai deux ça ne marche plus : le +/- apparaît dans tous les en-têtes, mais quand je clique sur le + du second bloc, c'est le premier qui réagit. Le script n'agit que sur le 1er élèment de la colonne.

J'ai essayer de mettre une variable smarty comme ceci, mais rien n'y fait.
Voici le code du script (en-tête du fichier theme.html)
function hideAll()
{
document.getElementById('{$block.title}').style.display 'none';
}
function 
showForm(obj)
{
obj.style.display 'block';
}
</script>
<style type="text/css">
#{$block.title}
{
display: none;
}
</style>


et le code du bloc droite-droite
<!-- Start right blocks loop -->
          <{foreach 
item=block from=$xoops_rblocks}><div class="<{cycle values="blockTitle,blockTitle"}>"><{$block.title}>

<
span>
&
nbsp;
<
a href="javascript:;" onclick="hideAll();showForm(document.getElementById('{$block.title}'));">+</a>/
<
a href="javascript:;" onclick="hideAll();">-</a>
&
nbsp;
</
span>
        </
div>
          <
div id={$block.title} class="blockcontent"><{$block.content}></div>
          <
img src="<{$xoops_imageurl}>images/160.gif" width="160" height="1" alt="" />
          <{/foreach}> 
          <!-- 
End right blocks loop -->


si quelqu'un pouvait m'indiquer comment dire au script qu'il s'agit à chaque fois d'un nouveau bloc ce serait cool...

merci.

Pas de site à voir, le thème n'a pas vraiment d'importance, pour infos 7dana-Xred.

Posté le : 07/11/2005 12:44

la fonction recherche, la meilleure amie du Xoopsien !!
Partager Twitter Partagez cette article sur GG+
Re: intégration d'un script dans un thème
Xoops accro
Inscrit: 04/02/2003 01:54
De Le Mans
Messages: 12273
Regarde dans les envois de Mathieu, il a du faire un module qui contenait cette fonctionnalité.

Posté le : 07/11/2005 13:03
Partager Twitter Partagez cette article sur GG+
Re: intégration d'un script dans un thème
Semi pro
Inscrit: 05/04/2003 19:03
Messages: 1645
As-tu fait une recherche sur les blocs pliables?

@+

Posté le : 07/11/2005 19:55
Partager Twitter Partagez cette article sur GG+
Re: intégration d'un script dans un thème
Semi pro
Inscrit: 07/03/2004 12:52
Messages: 591
merci fooups, j'avance, mais lentement

Je ne veux pas gérer la colonne en une seule fois, mais chaque bloc séparemment, comme le font les options de notifications sur ce site.
Je vais éplucher tout ça

Posté le : 08/11/2005 00:44

la fonction recherche, la meilleure amie du Xoopsien !!
Partager Twitter Partagez cette article sur GG+
Re: intégration d'un script dans un thème
Supporter Xoops
Inscrit: 09/01/2005 13:37
De Breizh
Messages: 16972
Salut,

A tout hasard, regardes cette page et principalement l'id "onglet" (firefox + webdevelopper)

A +

Posté le : 08/11/2005 00:55

La connaissance s'accroît quand on la partage ...
Partager Twitter Partagez cette article sur GG+
Re: intégration d'un script dans un thème
Xoops accro
Inscrit: 25/02/2004 00:20
De Région parisienne
Messages: 2526
Voici la solution que j'ai utilisé pour ce site : http://www.comite-citoyen.org

cette solution prend en compte le paramétrage des blocks et l'utlisation des cookies.

Pour le paramétrage des blocks
poids = 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)==}>
        <
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)==}>
            
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(objnamedisplay1display2img) {
    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(objnameckstrexpdate"/");
}

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

function 
GetCookie(name) {
    var 
arg name "=";
    var 
alen arg.length;
    var 
clen document.cookie.length;
    var 
0;
    while (
clen) {
        var 
alen;
        if (
document.cookie.substring(ij) == arg) {
            return 
getCookieVal (j);
        }
        
document.cookie.indexOf(" "i) + 1;
        if (
== 0) {
            break;
        }
    }
    return 
null;
}

function 
SetCookie(namevalue) {
    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" "");
}

Posté le : 08/11/2005 11:09
Partager Twitter Partagez cette article sur GG+
Re: intégration d'un script dans un thème
Semi pro
Inscrit: 07/03/2004 12:52
Messages: 591
Merci, ça marche impeccable.
Il manquait juste un "name=i" dans la boucle du fichier theme.html

<!-- Start left blocks loop -->
<{foreach 
name=i item=block from=$xoops_lblocks}>
<{include 
file="ccr/theme_blockleft.html"}>
<{/foreach}>
<!-- 
End left blocks loop -->


:banane: :merci: beaucoup


edit : heu, par contre les blocs sont ouverts tout le temps pendant la navigation. Quand tu parles du paramétrage des blocs, c'est bien le poids (pair / impair) dans la gestion des blocs ? (les miens, j'ai mis 1 et 2), les deux sont ouverts en permanence.

Une suggestion ?

Posté le : 08/11/2005 14:59

la fonction recherche, la meilleure amie du Xoopsien !!
Partager Twitter Partagez cette article sur GG+
Re: intégration d'un script dans un thème
Xoops accro
Inscrit: 25/02/2004 00:20
De Région parisienne
Messages: 2526
Désolé pour l'oubli

Il s'agit bien du poids des blocks.

Pour ton problème je ne comprend pas !!!

l'opérateur arithmétique % renvoi le reste d'une division

donc
1 % 2 = 0 et il reste 1
2 % 2 = 1 et il reste 0

donc cela devrait fontionner, j'ai fait le test sur mon site avec le poids à 1 et 2 et cela fonctionne.


Peut-être que l'enregistrement de cookies est en cause, donc supprime les cookies et vérifie si l'affichage est correcte.

Posté le : 08/11/2005 23:37
Partager Twitter Partagez cette article sur GG+
Re: intégration d'un script dans un thème
Xoops accro
Inscrit: 25/02/2004 00:20
De Région parisienne
Messages: 2526
J'ai observé un disfonctionnement sur le script, concernant l'affichage des blocks dépliés ou non lors du passage d'une page à l'autre.

voici donc la modification à apporté pour résoudre le pb de disfonctionnement.

Dans le fichier theme_blockleft.html

Replacer toutes les occurences :
$smarty.foreach.i.iteration


par
$block.weight

Posté le : 16/11/2005 11:18
Partager Twitter Partagez cette article sur GG+
Re: intégration d'un script dans un thème
Semi pro
Inscrit: 07/03/2004 12:52
Messages: 591
Salut,

chez moi ça ne marche pas. Les icônes pour plier/déplier ne répondent plus lorsque que je fais cela. J'ai 3 blocs et lorsque j'applique ton changement, il n'y a que le 3ème qui s'agite quelque soit l'icône qur lequel on clique.

je verrai cela plus tard..

a+

Posté le : 16/11/2005 12:44

la fonction recherche, la meilleure amie du Xoopsien !!
Partager Twitter Partagez cette article sur GG+

 Haut   Précédent   Suivant



Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

34 Personne(s) en ligne (23 Personne(s) connectée(s) sur Forum) | Utilisateur(s): 0 | Invité(s): 34 | Plus ...