Forum ZitePLUS

La communauté des utilisateurs du CMS ZitePLUS

Vous n'êtes pas identifié(e).

#1 28/08/2007 14:34:01

Vektrox
Membre
Lieu : Contres (41)
Inscription : 08/02/2007
Messages : 108

MENU ONGLET

BONJOUR A TOUS

PREMIEREMENT, DÉSOLÉ POUR L'ECRITURE MAIS MON CLAVIER EST BLOQUÉ ET JE NE PEUT RIEN FAIRE.


PEUT ON METTRE LES MENUS EN PARTIE HAUTE SOUS FORME D'ONGLETS ?  J'ESSAIE DEPUIS 2 JOURS MAIS JE NE COMPREND RIEN.

SI QUELQU'UN POUVAIT ME FILER UN COUP DE MAIN, OU M'EDITER LE CSS CE SERAI UNE IMMENSE AIDE, C'EST UN SITE VITRINE POUR MA SOCIÉTÉ QUI EST EN COURS DE CREATION.

MERCI A VOUS

Dernière modification par Vektrox (28/08/2007 14:34:40)

Hors ligne

#2 31/08/2007 18:27:32

Renaud
Membre
Inscription : 30/01/2007
Messages : 306

Re : MENU ONGLET

Je crain bien que ce ne soit pas évident de transformer ainsi l'affichage du menu, car la manière dont il est codé ne s'y prète pas vraiment... bref, une bidouille css risque de ne pas suffir. Peut-être que tu peux créer ce menu "en dur" en HTML et javascript, ou garder le menu normal de zite et ajouter en bandeau des liens vers les têtes de rubrique (avec un joli bandeau de liens images par exemple).


Ubuntu Rocks

Hors ligne

#3 31/08/2007 18:32:19

Vektrox
Membre
Lieu : Contres (41)
Inscription : 08/02/2007
Messages : 108

Re : MENU ONGLET

Hum  mouai !!!  je vais voir sinon je serais obligé de me diriger sur un autre cms avec des menus horizontaux qui je trouvent sont plus visible.
Mais c'est pas gagné.

Dommage qu'il n'y est pas de thèmes ( de base) réalisés prêt a fonctionner comme la plupart des cms, Zite n'aurait il pas de communauté ?

Merci Renaud

Dernière modification par Vektrox (31/08/2007 18:33:30)

Hors ligne

#4 07/09/2007 14:22:35

daniel
Membre
Inscription : 04/07/2007
Messages : 4

Re : MENU ONGLET

Bonjour
J'ai fait une css avec un menu horizontal dont voici le contenu :
body {
  background-color: #CCC;
  margin: 0;
  padding: 0;
  text-align:center;
}

body, td {
  font-family: Verdana, Geneva, Arial, helvetica, sans-serif;
  font-size: 10pt;
}

img {border: none;}

h1 {
    font-size: 150%;
    color: #FF6600;
}

h2 {
    font-size: 130%;
    color: #FF6600;
}

h3 {font-size: 120%;}

h4 {
    text-align: center;
    font-size: 110%;
}

h5 {font-size: 100%;}

p {
   color: #26354A;
}

a {
    color: #D3DCE6;
    text-decoration: none;
}

a:hover {
    color: #B53;
}

#page {
    border: solid 1px #CCC;
    border-top: none;
        background-color: #D3DCE6;
    width: 900px;
    margin: 0 auto 16px auto;
    border-left: 1px solid #777;
    border-right: 1px solid #777;
    padding: 0;
    text-align: left;
}

#top {
    width: 900px;
    height: 139px;
    background-color: #26354A;
    border-bottom: none;
    margin:0;
    padding: 10 0 0 0;
}

#top h1 {
    margin: 0;
    padding: 0 0 0 10px;
    color: #FFBA00;
    font-size: 24px;
}
#top h2 {
    margin: 0;
    padding: 0 0 0 10px;
    color: #D3DCE6;
    font-size: 90%;
}

#mid {
    width: 800px;
    border-bottom: 1px solid #CCC;
    /*background-image: url(deco/bg.png);*/
    margin:0;
    padding: 0;
}

#menu {
        border-top: 3px solid #FF6600;
        border-bottom: 3px solid #FF6600;
        background-color: #FFCC00;
        width: 900px;
        height: 20px;
        margin: 11 0 0 0;
    padding: 10 0 10 0;
        color: #26354A;
}

#menu a {
        color: #26354A;
}

#menu a:hover {
        color: #FF6600;
}

#menu li {
      float: left;
}
#main {
    width: 880px;
    margin: 10 10 0 10;
    padding: 0;
    text-align: justify;
        background-color: #D3DCE6;
}

#break {
    clear: both;
}

#bot {
    width: 900px;
    border-bottom: 1px solid #777;
        background-color: #26354A;
    margin:0;
    mapping: 0;
}

#bot td {
        font-family: Verdana, Geneva, Arial, helvetica, sans-serif;
        font-size: 75%;
        color: #FFBA00;
}

/* Menu */
.zul {
        height: 30px;
    padding: 0;
    margin: 0;
    list-style: none;
        font-weight: bolder;
}

.zli1,.zli2,.zli3,.zli4 {
    /*background-image: url(deco/pge0.png);*/
    /*background-repeat: no-repeat;*/
    padding-left: 14px;
}

.zli1 {
    margin-left: 0px;
}


.zli2 {
       float: none;
       margin-top: 16px;
}

/* styles zite */
#zadmin {
    border: 1px solid #CCC;
    background-color: #EEE;
    padding: 0 2px;
    margin: 3px 0 0 0;
}
.ztable {
    border: 1px solid #CCC;
    background-color: #EEE;
    padding: 0 2px;
    margin: 5px 0;
    width: 100%;
}
.zalert {
    border: 1px solid #C00;
    background-color: #FEA;
    padding: 0 2px;
}

Hors ligne

#5 07/09/2007 20:52:21

Vektrox
Membre
Lieu : Contres (41)
Inscription : 08/02/2007
Messages : 108

Re : MENU ONGLET

Salut Daniel

Tu es sur d'avoir testé parceque chez moi, c'est pas ça ?? le menu est a gauche et tout le reste es mis en vrac...

A voir sinon c'est une super initiative que j'ai jamais réussi a faire

Hors ligne

#6 13/09/2007 08:48:18

daum
Membre
Inscription : 13/09/2007
Messages : 1

Re : MENU ONGLET

Bonjour !

Je viens de découvrir ce cms, c'est vraiment excellent.

Pour un menu horizontal, c'est hyper simple.
Dans la feuille de style, remplace par:

.zli1,.zli2,.zli3,.zli4 {
     background-repeat: no-repeat;
     display: inline;
     list-style-type: none;
     padding-right: 20px;
}
.zon {}

Et dans le template, faire un "couper/coller" de <?php echo $zite->content['menu'] ?> et le mettre dans la div TOP.

Bon, c'est basique, il faut ajuster ensuite.
Il vaut mieux utiliser que des pages, sans sous-pages. Je n'ais pas regardé encore comment gérer cela.

Dernière modification par daum (13/09/2007 08:48:53)

Hors ligne

#7 13/09/2007 10:05:02

Vektrox
Membre
Lieu : Contres (41)
Inscription : 08/02/2007
Messages : 108

Re : MENU ONGLET

Salut daum

J'ai regardé, mais cela reste assez complexe si on veut obtenir quelques chose de propre, et pour la hiérarchie, je suis pas sur quelle s'en sorte indemne, je suis pas spécialiste mais je pense pas, que la modif des menus en position horizontale soit faisable correctement uniquement qu'a partir du CSS.

Hors ligne

#8 01/10/2007 09:15:28

mapaje
Membre
Inscription : 09/06/2007
Messages : 81

Re : MENU ONGLET

Bonjour,

Réponse tardive mais j'étions en vacances.
Bref, c'est possible en créant un <div id ="menu_horizontal"> <?php echo $zite->content['menu'] ?> inclut dans le <div id="top">. Ensuite ce n'est plus qu'une question de CSS et de boite.
Reste un problème, les sous-menus qui s'affichent créant des secondes lignes (propres quand même) mais pas forcément souhaitables.
Il me semble qu'à première vue, il serait possible de ne pas les laisser s'afficher en créant un clone de 'menu' (bref mettre un peu les mains dans le cambouis mais pas impossible à priori pour qui s'y connait un petit peu ce qui n'est pas trop mon cas). Le seul "truc" pas vraiment beau c'est en mode administration mais j'avoue que j'ai survolé sans faire de fioritures (j'avais fait des essais avant .... de partir en vacances et néanmoins randonnée sans le moindre gadget techno)
Toujours est-il que le résultat premier n'est pas horrible. Je vous vois venir: et le code? Ben là j'ai pas tout à fait le temps mais si quelqu'un est intéressé, promis juré, je le mets sur le forum dans peu de temps. A condition que vous me laissiez le temps de reprendre contact avec la dure réalité quotidienne.
Jean Pierre

Hors ligne

#9 01/10/2007 11:58:37

Renaud
Membre
Inscription : 30/01/2007
Messages : 306

Re : MENU ONGLET

Ben en fait tu devrais créer dans la feuille de style les règles zli/zlon/etc... spécifiques pour l'id de ton div (genre : #menu_horizontal .zli1 {...} ) en mettant à display:none les éléments de profondeurs indésirable.

Ensuite dans la colonne de menu tu gardes le même code php que tu cites pour y inclure le menu aussi, mais pour ces zli/zon/etc (hors du div horizontal) soit tu gardes l'affichage standard soit tu masques (à l'inverse) le premier niveau de profondeur).

Je sais pas si je suis clair, mais ça me paraît être une bonne piste.

Allez, zou ! je refile traiter ma pile de tout doux ;-)


Ubuntu Rocks

Hors ligne

#10 01/10/2007 18:08:47

mapaje
Membre
Inscription : 09/06/2007
Messages : 81

Re : MENU ONGLET

Bonsoir,
Effectivement la piste semble bonne. Je n'y avais pas pensé du tout. J'irais l'explorer en fin de semaine, dès que j'aurais vraiment repris et je vous tiens au courant.
Est-ce que Vektrox est toujours intéressé?
A plus
JP

Hors ligne

#11 01/10/2007 18:13:15

treb
Membre
Inscription : 28/06/2007
Messages : 32

Re : MENU ONGLET

En tout cas, cela m'intéresse aussi. Et il me semble que que c'est important pour un cms, même petit, de permettre des design différents.

Hors ligne

#12 01/10/2007 21:14:11

Kreasite
Membre
Inscription : 14/09/2007
Messages : 62

Re : MENU ONGLET

Bonsoir à tous !!!

effectivement, cela m'intéresse aussi ce menu horizontale et mieu encore si ont pouvait choisir dans l'administration webmaster le menu que l'on souhaite (horizontal ou vertical)

DAV

Hors ligne

#13 05/10/2007 18:19:44

Vektrox
Membre
Lieu : Contres (41)
Inscription : 08/02/2007
Messages : 108

Re : MENU ONGLET

Salut a tous

Oui mapaje, je suis toujours intéressé, mais je crois que cela va être difficile à realiser,  de plus Renaud est pas mal débordé, donc il nous abandonne lâchement a notre propre sort :-)
Donc si tu peut mapaje je suis preneur...

Hors ligne

#14 06/10/2007 09:22:58

mapaje
Membre
Inscription : 09/06/2007
Messages : 81

Re : MENU ONGLET

Salut,

Je vais essayer. Comme je l'ai dit avant, je ne suis pas le roi des codeurs et il fallait que je rentre mais dès ce WE je m'y remets.
Quand à Renaud, faut bien vivre non? Dans tous les sens du terme....
Suis sur que si nous lui donnons une base, il nous aidera à finasser... Aide toi le ciel t'aidera, ainsi parlait l'ancêtre ci-devant moi-même.
A +
JP

Hors ligne

#15 06/10/2007 09:46:24

mapaje
Membre
Inscription : 09/06/2007
Messages : 81

Re : MENU ONGLET

Re
Chose promise, chose due, voilà le premier jet avec l'aide active de Renaud. Je vous donne le CSS et le template brut de décoffrage sans les images que moi, j'y mets. Je ne sais pas comment envoyer sur le forum le répertoire zippé (je suis nul, je vous l'avais dit). De plus mon site n'est qu'en phase de développement, non en ligne... Toujours est-il que cela fonctionne, hautement adaptable en déco et simple et primaire.
CSS:
/* propriétés générales de la page */
body {
background: #d2ddec url(image/bleu1.jpg) no-repeat;
color : #ffffff;
font:  0.9em, Verdana, Arial, Times new roman;
voice-family: inherit;
}

h1{
text-align:center;
color:#000000;
font:1em, Arial black, Verdana, Times nex roman, Arial;   
}
#top {
    width: 900px;
    height: 69px;
    background-color: #FFF;
    background-image: url(deco/topbg.png);
    border-bottom: none;
    margin:0;
    padding: 10px 0 0 0;
}
/* propriétés du menu horizontal */

#menu_horizontal {
margin-top:5px;
float: left;
width: 100%;
font: 1em, Calligraph421 BT, Arial, Times New Roman ;
}

#menu_horizontal ul {
list-style-type: none;
list-style-image: none;
list-style-position: outside;
}

#menu_horizontal  li {
margin: 0pt;
background: transparent url(image/onglet.jpg) no-repeat scroll left top;
float: left;
}

#menu_horizontal a {
background: transparent url(image/onglet.jpg) no-repeat scroll right top;
padding: 5px 15px 4px 6px;
display: block;
text-decoration: none;
font-weight: bold;
color: #648040;
}

#menu_horizontal a { 
float: none;
}

#menu_horizontal  a:hover {
background: transparent url(image/vert1.png) no-repeat ;
color: #333333;
}
#menu_horizontal.zli1,.zli2,.zli3,.zli4 {
    background: transparent url(deco/pge0.png) no-repeat;
    padding-left: 14px;
    display:none;
}
#menu_horizontal.zon {
    background-image: url(deco/pge1.png);
}
#menu_horizontal.zli1 {
    margin-left: 0px;
}
#menu_horizontal.zli2 {
    margin-left: 16px;
}
#menu_horizontal.zli3 {
    margin-left: 32px;
}
#menu_horizontal.zli4 {
    margin-left: 48px;
}


#page {
    background-color:#FFF;
    border: solid 1px #CCC;
    border-top: none;
    background-color: #FFF;
    width: 900px;
    margin: 0 auto 16px auto;
    border-left: 1px solid #777;
    border-right: 1px solid #777;
    padding: 0;
    text-align: left;
}



#mid {
    width: 900px;
    border-bottom: 1px solid #CCC;
    background-image: url(deco/bg.png);
    margin:0;
    madding: 0;
}

#side {
    width: 180px;
    float: right;
    margin:0;
    padding: 5px 10px 5px 10px;
}

#main {
    width: 676px;
    float: left;
    margin:0;
    padding: 7px;
    text-align: justify;
}

#break {
    clear: both;
}

#bot {
    width: 900px;
    border-bottom: 1px solid #777;
    background-image: url(deco/topbg.png);
    font-size: 75%;
    text-align: center;
    margin:0;
    mapping: 0;
    color: #225;
}

#top h1 {
    margin: 0;
    padding: 0 0 0 10px;
    color: #FFF;
    font-size: 24px;
}
#top h2 {
    margin: 0;
    padding: 4px 0 5px 10px;
    color: #EEF;
    font-size: 90%;
}

/* Menu */
.zul {
    padding: 0;
    margin: 10px 0 0 0;
    list-style: none;
}
.zli1,.zli2,.zli3,.zli4 {
    background: transparent url(deco/pge0.png) no-repeat;
    padding-left: 14px;
}
.zon {
    background-image: url(deco/pge1.png);
}
.zli1 {
    margin-left: 0px;
}
.zli2 {
    margin-left: 16px;
}
.zli3 {
    margin-left: 32px;
}
.zli4 {
    margin-left: 48px;
}

/* styles zite */
#zadmin {
    border: 1px solid #CCC;
    background-color: #EEE;
    padding: 0 2px;
    margin: 3px 0 0 0;
}
.ztable {
    border: 1px solid #CCC;
    background-color: #EEE;
    padding: 0 2px;
    margin: 5px 0;
    width: 100%;
}
.zalert {
    border: 1px solid #C00;
    background-color: #FEA;
    padding: 0 2px;
}


TEMPLATE:
<!DOCT    YPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title><?= $zite->get_data('site_title') . ' :: ' . $zite->content['menu_title'] ?></title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>

<body>
    <div id="page">
        <div id="top">
            <h1><?php echo $zite->get_data('site_title') ?></h1>
            <h2><?php echo$zite->get_data('site_subtitle') ?></h2>
            <div id="menu_horizontal">
        <?php echo $zite->content['menu'] ?>
    </div></div>
        <div id="mid">
            <div id="side">
                <?= $zite->content['menu'] ?>
                <?= $zite->get_content(1156957918, true) ?>
            </div>
            <div id="main">
                <?= $zite->content['main'] ?>
            </div>
            <div id="break"></div>
        </div>
        <div id="bot">Site motorisé par ZITE-CMS <a href="http://zite.prositif.com"><?= ZITEVER ?></a></div>
    </div>
</body>
</html>

Si questions, suis dispo et si on peut me dire comment je joins la totalilté avec images, je le ferais.
A plus tard
JP

Hors ligne

#16 06/10/2007 14:32:20

treb
Membre
Inscription : 28/06/2007
Messages : 32

Re : MENU ONGLET

Décidément cette question génère plein d'activité, et c'est super.
Ton travail, mapaje, c'est un grand pas dans la bonne direction. Je l'ai testé sur mon hébergeur (phpnet):  les menus  sont bien horizontaux mais ils ne se déroulent pas...
Dans le template, il faut penser à enlever  la 2ème ligne de cette partie du code pour ne pas avoir 2 x le menu :

<div id="side">
      <?= $zite->content['menu'] ?>
      <?= $zite->get_content(1156957918, true) ?>
</div>

Merci pour ta contribution

Jean

Hors ligne

#17 06/10/2007 17:31:39

mapaje
Membre
Inscription : 09/06/2007
Messages : 81

Re : MENU ONGLET

RE

Je ne cherchais pas à faire un menu déroulant mais plus tard peut-être. Je pense que c'est possible mais avec un peu de temps et s'il y a des personnes intéressés mais moi tout seul, je n'avancerais pas très vite... Donc en attendant:

Une nouvelle version avec en affichage vertical juste les onglets principaux sans les sous-pages sans toucher à l'affichage horizontal. C'est un pompage éhonté étant dit que je n'ai fait que dupliquer la fonction navbuilder en navbuilder1 et en changeant les zul zil  ... mais ça fonctionne tout en alourdissant un peu mais comme je l'ai dit, je ne suis pas très doué pour le codage. Je n'ai toujours pas trouvé comment faire parvenir le répertoire entier mais je vous donne les fichiers modifiés:

Le CSS:

/* propriétés générales de la page */
body {
background: #d2ddec url(image/bleu1.jpg) no-repeat;
color : #ffffff;
font:  0.9em, Verdana, Arial, Times new roman;
voice-family: inherit;
}

h1{
text-align:center;
color:#000000;
font:1em, Arial black, Verdana, Times nex roman, Arial;   
}
#top {
    width: 900px;
    height: 69px;
    background-color: #FFF;
    background-image: url(deco/topbg.png);
    border-bottom: none;
    margin:0;
    padding: 10px 0 0 0;
}
/* propriétés du menu horizontal */

#menu_horizontal {
margin-top:5px;
float: left;
width: 100%;
font: 1em, Calligraph421 BT, Arial, Times New Roman ;
}

#menu_horizontal ul {
list-style-type: none;
list-style-image: none;
list-style-position: outside;
}

#menu_horizontal  li {
margin: 0pt;
background: transparent url(image/onglet.jpg) no-repeat scroll left top;
float: left;
}

#menu_horizontal a {
background: transparent url(image/onglet.jpg) no-repeat scroll right top;
padding: 5px 15px 4px 6px;
display: block;
text-decoration: none;
font-weight: bold;
color: #648040;
}

#menu_horizontal a { 
float: none;
}

#menu_horizontal  a:hover {
background: transparent url(image/vert1.png) no-repeat ;
color: #333333;
}
#menu_horizontal.zeul {
    padding: 0;
    margin: 10px 0 0 0;
    list-style: none;
}
#menu_horizontal.zeli1,.zeli2,.zeli3,.zeli4 {
    background: transparent url(deco/pge0.png) no-repeat;
    padding-left: 14px;
    display:none;
}



#page {
    background-color:#FFF;
    border: solid 1px #CCC;
    border-top: none;
    background-color: #FFF;
    width: 900px;
    margin: 0 auto 16px auto;
    border-left: 1px solid #777;
    border-right: 1px solid #777;
    padding: 0;
    text-align: left;
}



#mid {
    width: 900px;
    border-bottom: 1px solid #CCC;
    background-image: url(deco/bg.png);
    margin:0;
    padding: 0;
}

#side {
    width: 180px;
    float: right;
    margin:0;
    padding: 5px 10px 5px 10px;
}

#main {
    width: 676px;
    float: left;
    margin:0;
    padding: 7px;
    text-align: justify;
}

#break {
    clear: both;
}

#bot {
    width: 900px;
    border-bottom: 1px solid #777;
    background-image: url(deco/topbg.png);
    font-size: 75%;
    text-align: center;
    margin:0;
    mapping: 0;
    color: #225;
}

#top h1 {
    margin: 0;
    padding: 0 0 0 10px;
    color: #FFF;
    font-size: 24px;
}
#top h2 {
    margin: 0;
    padding: 4px 0 5px 10px;
    color: #EEF;
    font-size: 90%;
}

/* Menu */
.zul {
    padding: 0;
    margin: 10px 0 0 0;
    list-style: none;
}
.zli1,.zli2,.zli3,.zli4 {
    background: transparent url(deco/pge0.png) no-repeat;
    padding-left: 14px;
}
.zon {
    background-image: url(deco/pge1.png);
}
.zli1 {
    margin-left: 0px;
}
.zli2 {
    margin-left: 16px;
}
.zli3 {
    margin-left: 32px;
}
.zli4 {
    margin-left: 48px;
}

/* styles zite */
#zadmin {
    border: 1px solid #CCC;
    background-color: #EEE;
    padding: 0 2px;
    margin: 3px 0 0 0;
}
.ztable {
    border: 1px solid #CCC;
    background-color: #EEE;
    padding: 0 2px;
    margin: 5px 0;
    width: 100%;
}
.zalert {
    border: 1px solid #C00;
    background-color: #FEA;
    padding: 0 2px;
}


Le Template:

<!DOCT    YPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title><?= $zite->get_data('site_title') . ' :: ' . $zite->content['menu_title'] ?></title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>

<body>
    <div id="page">
        <div id="top">
            <h1><?php echo $zite->get_data('site_title') ?></h1>
            <h2><?php echo$zite->get_data('site_subtitle') ?></h2>
            <div id="menu_horizontal">
        <?php echo $zite->content['menus'] ?>
    </div></div>
        <div id="mid">
            <div id="side">
                <?= $zite->content['menu'] ?>
                <?= $zite->get_content(1156957918, true) ?>
            </div>
            <div id="main">
                <?= $zite->content['main'] ?>
            </div>
            <div id="break"></div>
        </div>
        <div id="bot">Site motorisé par ZITE-CMS <a href="http://zite.prositif.com"><?= ZITEVER ?></a></div>
    </div>
</body>
</html>

Le zitz.php:

<?
/*
Copyright Renaud GOMBERT, 2007

rgombert@essentiel.net

Ce logiciel est un programme informatique de type CMS servant diffuser et à
gérer le contenu d'un site web.

Ce logiciel est régi par la licence CeCILL-B soumise au droit français et
respectant les principes de diffusion des logiciels libres. Vous pouvez
utiliser, modifier et/ou redistribuer ce programme sous les conditions
de la licence CeCILL-B telle que diffusée par le CEA, le CNRS et l'INRIA
sur le site "http://www.cecill.info".

En contrepartie de l'accessibilité au code source et des droits de copie,
de modification et de redistribution accordés par cette licence, il n'est
offert aux utilisateurs qu'une garantie limitée.  Pour les mêmes raisons,
seule une responsabilité restreinte pèse sur l'auteur du programme,  le
titulaire des droits patrimoniaux et les concédants successifs.

A cet égard  l'attention de l'utilisateur est attirée sur les risques
associés au chargement,  à l'utilisation,  à la modification et/ou au
développement et à la reproduction du logiciel par l'utilisateur étant
donné sa spécificité de logiciel libre, qui peut le rendre complexe à
manipuler et qui le réserve donc à des développeurs et des professionnels
avertis possédant  des  connaissances  informatiques approfondies.  Les
utilisateurs sont donc invités à charger  et  tester  l'adéquation  du
logiciel à leurs besoins dans des conditions permettant d'assurer la
sécurité de leurs systèmes et ou de leurs données et, plus généralement,
à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.

Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
pris connaissance de la licence CeCILL-B, et que vous en avez accepté les
termes.
*/

error_reporting(E_ERROR | E_PARSE);
//error_reporting(E_ALL);
ini_set('display_errors',1);
ini_set('arg_separator.output', '&');
set_magic_quotes_runtime(0);
define('ZITEVER', '0.5.beta');

class zite {
    var    $zpath,
        $ipath,
        $cpath,
        $fpath,
        $config,
        $args,
        $struct,
        $messages,
        $syspages,
        $truepage,
        $parents,
        $base,
        $content;

    function zite($caller, $cs=false) {
        $this->zpath = dirname(__FILE__);
        $this->ipath = dirname($caller);
        $this->cpath = $this->ipath.'/zdata';
        $this->fpath = $this->ipath.'/zfiles';
        $this->config = parse_ini_file($this->cpath.'/config.ini', true);
        $this->args = explode($this->config['argsep'],$_GET['z']);
        $this->struct = (array)unserialize(@file_get_contents($this->cpath.'/structure.dta'));
        $this->content = array();
        $this->parents = array();
        $this->messages = false;
        $this->truepage = false;
        $this->base = $this->config['files_index'].'?z=';
        $this->syspages = array('login', 'logout', 'admin', 'config_editor', 'page_editor', 'source_editor', 'delete', 'files', 'sitemap');
        session_start();
        if($cs || !array_key_exists('zite_admin',$_SESSION) || $_SESSION['zite_id'] != $this->config['site_id']) {
            session_unset();
            $_SESSION['zite_admin'] = 0;
            $_SESSION['zite_id'] = $this->config['site_id'];
        }
    }

    function builder() {
        if (array_key_exists('perma', $_GET)) {
            $z=1;
            $p = (int)$_GET['perma'];
            foreach ($this->struct as $k => $v) if ($v[0]==$p) $z=$k;
            $_GET['z'] = $this->args[0] = $z;
        }
        $page = strlen($_GET['z']) ? $this->args[0] : 1;
        if (in_array($page, $this->syspages)) {
            $pagefun = "page_$page";
            $this->content['main'] = $this->$pagefun();
        } else {
            if ($this->config['site_status']=='on'|$_SESSION['zite_admin']>0) {
                if (array_key_exists($page, $this->struct) && ($this->struct[$page][4] || $_SESSION['zite_admin']>0)) {
                    $infos = $this->struct[$page];
                    $this->content['menu_title'] = $infos[1];
                    $this->truepage = $page;
                    $tmp = $this->get_content($infos[0], $infos[3]==2);
                    $this->content['main'] = $tmp ? $tmp : $this->get_message('errorNOFILE');
                } else {
                    $this->content['main'] = $this->get_message('error404');
                }
            } else {
                $this->content['main'] = $this->get_message('errorCLOSED');
            }
        }
        $this->navbuilder();
        if ($_SESSION['zite_admin']) $this->prepend($this->adminbar());
        $this->navbuilder1();
        if ($_SESSION['zite_admin']) $this->prepend($this->adminbar());
    }

    function navbuilder() {
        $n = $this->truepage ? $this->truepage : 1;
        $base = $this->base . ((int)$_SESSION['zite_admin'] ? $this->get_data('navig_admin') : '');
        $max = count($this->struct);
        $isadmin = $_SESSION['zite_admin']>0;
        $nav = '';

        $s = $this->struct[$n];
        if ($s[4] || $isadmin) $nav .= '<li class="zli'.$s[2].' zon"><a href="'.$base.$n.'">'.$s[1].'</a></li>'.$nav;

        $td = $s[2];
        $this->parents[$s[0]] = $n;
        if ($n>1) {
            for ($i=$n-1; $i>0; $i--) {
                $s = $this->struct[$i];
                $d = $s[2];
                if ($d<=$td && ($s[4] || $isadmin)) {
                    if ($d<$td) $this->parents[$s[0]] = $i;
                    $td = $d;
                    $nav = '<li class="zli'.$d.'"><a href="'.$base.$i.'">'.$s[1].'</a></li>'.$nav;
                }
            }
        }

        $td=$this->struct[$n+1][2];
        for ($i=$n+1; $i<=$max; $i++) {
            $s = $this->struct[$i];
            $d = $s[2];
            if ($d<=$td && ($s[4] || $isadmin)) {
                $td = $d;
                $nav .= '<li class="zli'.$d.'"><a href="'.$base.$i.'">'.$s[1].'</a></li>';
            }
        }

        $this->content['menu'] = '<ul class="zul">'.$nav.'</ul>';
        asort($this->parents);
    }
function navbuilder1() {
        $n = $this->truepage ? $this->truepage : 1;
        $base = $this->base . ((int)$_SESSION['zite_admin'] ? $this->get_data('navig_admin') : '');
        $max = count($this->struct);
        $isadmin = $_SESSION['zite_admin']>0;
        $nav = '';

        $s = $this->struct[$n];
        if ($s[4] || $isadmin) $nav .= '<li class="zeli'.$s[2].' zion"><a href="'.$base.$n.'">'.$s[1].'</a></li>'.$nav;

        $td = $s[2];
        $this->parents[$s[0]] = $n;
        if ($n>1) {
            for ($i=$n-1; $i>0; $i--) {
                $s = $this->struct[$i];
                $d = $s[2];
                if ($d<=$td && ($s[4] || $isadmin)) {
                    if ($d<$td) $this->parents[$s[0]] = $i;
                    $td = $d;
                    $nav = '<li class="zeli'.$d.'"><a href="'.$base.$i.'">'.$s[1].'</a></li>'.$nav;
                }
            }
        }

        $td=$this->struct[$n+1][2];
        for ($i=$n+1; $i<=$max; $i++) {
            $s = $this->struct[$i];
            $d = $s[2];
            if ($d<=$td && ($s[4] || $isadmin)) {
                $td = $d;
                $nav .= '<li class="zeli'.$d.'"><a href="'.$base.$i.'">'.$s[1].'</a></li>';
            }
        }

        $this->content['menus'] = '<ul class="zeul">'.$nav.'</ul>';
        asort($this->parents);
    }
    function output() {
        $this->content['main'] = $this->content['pre_main'].$this->content['main'].$this->content['post_main'];
        ob_start();
        $zite = & $this;
        require($this->ipath.'/'.$this->config['files_template']);
        return ob_get_clean();
    }

    function adminbar() {
        $admin = $_SESSION['zite_admin']==2;
        $out = $admin ? $this->get_message('admin_admintitle') : $this->get_message('admin_usertitle');
        $out .= ' <a href="'.$this->base.'admin">'.$this->get_message('edit_admin').'</a>';
        if ($this->truepage && ($admin || !$this->struct[$this->truepage][5])) $out .= ' <a href="'.$this->base.'page_editor|'.$this->truepage.'">'.$this->get_message('edit').'</a>';
        if ($this->truepage && $admin) $out .= ' <a href="'.$this->base.'source_editor|'.$this->truepage.'">'.$this->get_message('edit_source').'</a>';
        if ($admin) {
            $out .= ' <a href="'.$this->base.'config_editor">'.$this->get_message('edit_config').'</a>';
        }
        $out .= ' <a href="'.$this->base.'files">'.$this->get_message('files_admin').'</a>';
        $out .= ' <a href="'.$this->base.'logout">'.$this->get_message('logout').'</a>';
        return '<div id="zadmin">'.$out.'</div>';
    }

    function get_content($key, $php=false) {
        $file = $this->cpath."/$key.txt";
        if (!file_exists($file)) {return false;}
        if ($php) {
            ob_start();
            $zite = & $this;
            include($file);
            return ob_get_clean();
        } else {
            return file_get_contents($file);
        }   
    }

    function get_message($key) {
        if (!$this->messages) $this->messages = @parse_ini_file($this->cpath.'/messages.ini', true);
        return array_key_exists($key, $this->messages) ? $this->messages[$key] : "[$key : MESSAGE NON DEFINI - UNKNOWN MESSAGE]";
    }
   
    function get_data($key) {
        return array_key_exists($key, $this->config) ? $this->config[$key] : "[$key : DONNEE NON DEFINIE - UNKNOWN DATA]";
    }
   
    function prepend($text) {$this->content['pre_main'] .= $text;}

    function append($text) {$this->content['post_main'] = $text . $this->content['post_main'];}


// Fonctions-pages

    function page_login() {
        if (strcmp($_POST['id'],$this->config['login_username'])==0 && strcmp(md5($_POST['pass']),$this->config['login_userpass'])==0) {
            $_SESSION['zite_admin'] = 1;
            header('Location: '.$this->base);
            exit;
        } elseif (strcmp($_POST['id'],$this->config['login_adminname'])==0 && strcmp(md5($_POST['pass']),$this->config['login_adminpass'])==0) {
            $_SESSION['zite_admin'] = 2;
            header('Location: '.$this->base.'admin');
            exit;
        }
        return $this->get_message('login_form');
    }

    function page_logout() {
        session_unset();
        header('Location: '.$this->base);
        exit;
    }

    function page_admin() {
        if ($_SESSION['zite_admin']) {
            $max = count($this->struct);
            $admin = $_SESSION['zite_admin']==2;
            $tools =  $admin || $this->get_data('rights_structure')=='on';
            // Opérations
            if ($tools) {
                $c = $this->args[1];
                $p = (int)$this->args[2];
                if ($p>0 && $p<=$max) {
                    $change = true;
                    $dta = & $this->struct[$p];
                    $power = $admin || $dta[5]==0;
                    if ($c=='l' && $dta[2]>1) {// left
                        if ($dta[2]>1) $dta[2]--;
                    } elseif ($c=='r') {// right
                        $dta[2]++;
                    } elseif ($c=='u') {// up
                        if ($p>1) $this->swap($p);
                    } elseif ($c=='d') {// down
                        if ($p<$max) $this->swap($p+1);
                    } elseif ($c=='v' && $admin) {// Verrou
                        $dta[5] = $dta[5] ? 0 : 1;
                    } elseif ($c=='n') {// Newpage
                        sleep(1);
                        $f = time();
                        $np = $max+1;
                        $np2 = $p+1;
                        $this->struct[$np] = array($f, $this->get_message('page_default_title')." [$np]", $dta[2], 1, 0, 0);
                        for ($j=$np; $j>$np2; $j--) $this->swap($j);
                        $max++;
                        $this->writefile($this->cpath.'/'.$f.'.txt', $this->get_message('page_default_content'));
                    } elseif ($c=='s' && $power) {// Status
                        $dta[4] = $dta[4]==1 ? 0 : 1;
                    } else {
                        $change = false;
                    }
                    if ($change) $this->writedata($this->cpath.'/structure.dta', $this->struct);
                }
            }
            // Affichage structure
            $i = 0;
            foreach ($this->struct as $k => $v) {
                $i++;
                if ($tools) {
                    $tb = ' <a href="'.$this->base.'admin|';
                    $tool1 = $v[2]>1 ? $tb.'l|'.$k.'"><img src="deco/l1.png" /></a>' : ' <img src="deco/l0.png" />';
                    $tool1 .= $tb.'n|'.$k.'"><img src="deco/a.png" /></a>';
                    $tool1 .= $tb.'r|'.$k.'"><img src="deco/r1.png" /></a>';
                    $tool2 = $k>1 ? $tb.'u|'.$k.'"><img src="deco/u1.png" /></a>' : '<img src="deco/u0.png" />';
                    $tool2 .= $k<$max ? $tb.'d|'.$k.'"><img src="deco/d1.png" /></a>' : ' <img src="deco/d0.png" />';
                    if ($admin) {
                        $tool2 .= $v[5] ? $tb.'v|'.$k.'"><img src="deco/k1.png" /></a>' : $tb.'v|'.$k.'"><img src="deco/k0.png" /></a>';
                    } else {
                        $tool2 .= $v[5] ? ' <img src="deco/k1.png" />' : ' <img src="deco/k0.png" />';
                    }
                    if ($admin || $v[5]==0) {
                        $tool2 .= $v[4] ? $tb.'s|'.$k.'"><img src="deco/s1.png" /></a>' : $tb.'s|'.$k.'"><img src="deco/s0.png" /></a>';
                        $tool2 .= $max>1 ? ' <a href="'.$this->base.'delete|'.$k.'"><img src="deco/e1.png" /></a>' : ' <img src="deco/e0.png" />';
                    } else {
                        $tool2 .= $v[4] ? ' <img src="deco/s1.png" />' : ' <img src="deco/s0.png" />';
                        $tool2 .= ' <img src="deco/e0.png" />';
                    }
                }
                $nav .= '<tr bgcolor="#'.($i%2 ? 'DDDDDD' : 'EEEEEE').'"><td>'.$i.'</td><td>'.$tool1.'</td><td>'.str_repeat('  ',3*--$v[2]);
                $nav .= ($v[5] && $_SESSION['zite_admin']==1) ? $v[1] : ($_SESSION['zite_admin']==2 ? '<a href="'.$this->base.'source_editor|'.$k.'"><img src="deco/c.png" /></a> ' : '').'<a href="'.$this->base.'page_editor|'.$k.'">'.$v[1].'</a>';
                $nav .= ' <a href="?perma='.$v[0].'" style="font-size:75%;color:#AAA">'.$v[0].'</a>';
                $nav .='</td><td>'.$tool2.'</td></tr>';
            }
            return '<p><table align="center" border="0" cellspacing="0" cellpadding="2" class="ztable"><tr><td colspan="4" align="center">'.$this->get_message('edit_structure').'</td></tr>'.$nav.'</table></p>';
        } else {
            return $this->get_message('not_allowed');
        }
    }

    function page_delete() {
        if ($_SESSION['zite_admin']) {
            $max = count($this->struct);
            $p = (int)$this->args[1];
            if ($p>0 && $p<=$max && $max>1) {
                if ($this->struct[$p][5]==0 || $_SESSION['zite_admin']==2) {
                    if ($this->args[2]=='ok') {
                        unlink($this->cpath.'/'.$this->struct[$p][0].'.txt');
                        for($i=$p; $i<$max; $i++) $this->struct[$i] = $this->struct[$i+1];
                        unset($this->struct[$max]);
                        $this->writedata($this->cpath.'/structure.dta', $this->struct);
                        header('Location: '.$this->base.'admin');
                    } else {
                        return $this->get_message('delpage_confirm').'<p class="zalert"><a href="'.$this->base.'delete|'.$p.'|ok">'.$this->get_message('delpage').'<strong>'.$this->struct[$p][1].'</strong></a></p>';
                    }
                } else {
                    return $this->get_message('not_allowed');
                }       
            } else {
                return $this->get_message('not_possible');
            }
        } else {
            return $this->get_message('not_allowed');
        }
    }

    function page_page_editor() {
        $pageid =  $this->args[1];
        $pagedesc = & $this->struct[$pageid];
        if ($_SESSION['zite_admin']==2 || ($_SESSION['zite_admin']==1 && $pagedesc[5]==0)) {
            $r_in = array('<?', '<?php', '?>', '<?=');
            $r_out = array('<!--?', '<!--?php', '?-->', '<!--?=');
            $file = $this->cpath.'/'.$pagedesc[0].'.txt';
            if (file_exists($file)) {
                $this->truepage = $pageid;
                if ($_POST['save']==1) {
                    $pagedesc[1] = htmlentities(stripslashes($_POST['title']));
                    $pagedesc[3] = (int)$_POST['code'];
                    $source = str_replace($r_out, $r_in, stripslashes($_POST['source']));
                    $rslt = $this->writedata($this->cpath.'/'.'structure.dta', $this->struct) && $this->writefile($file, $source);
                    $out = $rslt ? $this->get_message('done_ok') : $this->get_message('done_failed');
                    $out = '<p class="zalert">'.$out.' - <a href="'.$this->base.$pageid.'">'.$this->get_message('view_page').'</a>'.'</p>';
                }
                $out .= '<form action="'.$this->base.'page_editor|'.$pageid.'"  method="post">';
                $out .= $this->get_message('edit_title') . ': <input name="title" type="text" value="'.$pagedesc[1].'" />';
                if ($_SESSION['zite_admin']==2) {
                    $out .=  '<input name="code" type="radio" value="1" '.($pagedesc[3]=='1' ? 'checked="checked" />' : ' />').'HTML';
                    $out .=  '<input name="code" type="radio" value="2" '.($pagedesc[3]=='2' ? 'checked="checked" />' : ' />').'PHP';
                } else {
                    $out .= '<input name="code" type="hidden" value="'.$pagedesc[3].'" />';
                }
                $out .= ' <input name="save" type="hidden" value="1" /><input type="submit" name="Submit" value="'.$this->get_message('submit').'" /><br />';
                // Chargement de l'éditeur
                $edfile = $this->zpath.'/'.$this->get_data('editor').'.php';
                $content = file_get_contents($file);
                if (file_exists($edfile)) {
                    // Editeur externe
                    ob_start();
                    include($edfile);
                    $out .= ob_get_clean();
                } else {
                    // Editeur brut
                    $out .= '<textarea style="width:100%;height:500px;" name="source">'.$content.'</textarea>';
                }
                $out .= '</form>';
                return $out;
            } else {
                return $this->get_message('errorNOFILE');
            }
        } else {
            return $this->get_message('not_allowed');
        }
    }

    function page_source_editor() {
        if ($_SESSION['zite_admin']==2) {
            $pageid =  $this->args[1];
            if (substr($pageid, 0, 5)=='files' && array_key_exists($pageid, $this->config)) {
                $filename = $this->get_data($pageid);
                $file = $this->ipath.'/'.$filename;
            } elseif (($pageid=='config.ini') || ($pageid=='messages.ini')) {
                $filename = $pageid;
                $file = $this->cpath.'/'.$filename;
            } elseif ((int)$pageid && (int)$pageid<=count($this->struct)) {
                $filename = $this->struct[(int)$pageid][1];
                $file = $this->cpath.'/'.$this->struct[(int)$pageid][0].'.txt';
                $this->truepage = (int)$pageid;
            }
            if (file_exists($file)) {
                if (array_key_exists('source', $_POST)) {
                    $out = $this->writefile($file, stripslashes($_POST['source'])) ? $this->get_message('done_ok') : $this->get_message('done_failed');
                    $out = '<p class="zalert">'.$out.' : '.$filename.'</p>';
                }
                $out .= '<form action="'.$this->base.'source_editor|'.$pageid.'"  method="post"><div id="zadmin">';
                $out .= $this->get_message('edit_file') . ' : '.$filename;
                $out .= ' <input type="submit" name="Submit" value="'.$this->get_message('submit').'" /></div>';
                $out .= '<textarea style="width:100%;height:500px;" name="source">'.htmlentities(file_get_contents($file)).'</textarea>';
                $out .= '</form>';
                return $out;
            } else {
                return $this->get_message('errorNOFILE');
            }
        } else {
            return $this->get_message('not_allowed');
        }
    }

    function page_config_editor() {
        if ($_SESSION['zite_admin']==2) {
            $file = $this->cpath.'/config.ini';
            if (file_exists($file)) {
                ksort($this->config);
                if (array_key_exists('save', $_POST)) { // Enregistrement
                    foreach($_POST as $k => $v) {
                        if (substr($k,0,1)=='_') {
                            $k2 = substr($k, 1, strlen($k)-1);
                            if (substr($k2, -4)=='pass') {
                                if (strlen($v)) $this->config[$k2] =  md5($v);
                            } else {
                                $this->config[$k2] =  htmlentities(stripslashes($v));
                            }
                        }
                    }
                    $out = '<p class="zalert">'.($this->writeconfig($file, $this->config) ? $this->get_message('done_ok') : $this->get_message('done_failed')).'</p>';
                }
                $msg = $this->get_message('edit_source');
                $out .= '<form action="'.$this->base.'config_editor" method="post">';
                $out .= '<table style="width:100%">';
                $out .= '<tr bgcolor="#'.(++$i%2 ? 'DDDDDD' : 'EEEEEE').'"><td><strong>config.ini</strong></td><td><a href="'.$this->base.'source_editor|config.ini">'.$msg.'</a></td></tr>';
                $out .= '<tr bgcolor="#'.(++$i%2 ? 'DDDDDD' : 'EEEEEE').'"><td><strong>messages.ini</strong></td><td><a href="'.$this->base.'source_editor|messages.ini">'.$msg.'</a></td></tr>';
                foreach($this->config as $k => $v) {
                    if (substr($k, 0, 6)=='files_') $out .= '<tr bgcolor="#'.(++$i%2 ? 'DDDDDD' : 'EEEEEE').'"><td><strong>'.$v.'</strong></td><td><a href="'.$this->base.'source_editor|'.$k.'">'.$msg.'</a></td></tr>';
                }
                foreach($this->config as $k => $v) $out .= '<tr bgcolor="#'.(++$i%2 ? 'DDDDDD' : 'EEEEEE').'"><td>'.$k.'</td><td><input name="_'.$k.'" type="text" value="'.(substr($k, -4)=='pass' ? '' : $v).'" style="width:100%" /></td></tr>';
                $out .= '<tr bgcolor="#'.(++$i%2 ? 'DDDDDD' : 'EEEEEE').'"><td colspan="2" align="center"><input type="submit" name="Submit" value="'.$this->get_message('submit').'" /></td></tr>';
                $out .= '</table>';
                $out .= '<input type="hidden" name="save" value="1" />';
                $out .= '</form>';
                return $out;
            } else {
                return $this->get_message('errorNOFILE');
            }
        } else {
            return $this->get_message('not_allowed');
        }       
    }

    function page_files() {
        if ($_SESSION['zite_admin']) {
            $file = $this->cpath.'/files.dta';
            $f = (array)unserialize(@file_get_contents($file));
            $max = count($f);
            // actions et sauvegarde
            if ($_POST['save']==1) {
                $id = (int)$_POST['pos'];
                if (array_key_exists($id, $f)) {
                    // effacement
                    if ($_POST['delete']==1) {
                        unlink($this->fpath.'/'.$f[$id][1].'.'.$f[$id][2]);
                        unset($f[$id]);
                        $ext = false;
                    } else {
                        $ext = $this->getfile($id, $f[$id][2]);
                        $f[$id][0] = htmlentities(stripslashes($_POST['name']));
                    }
                } else {
                    foreach($f as $v) if ($v[1]>=$id) $id=$v[1]+1;
                    $ext = $this->getfile($id);
                    if ($ext) {
                        $f[$id][0] = htmlentities(stripslashes($_POST['name']));
                        $f[$id][1] = $id;
                    }
                }
                if ($ext) {
                    $f[$id][2] = $ext;
                    $f[$id][3] = $ext=='gif' || $ext=='jpg' || $ext=='png';
                }
                // reformation de la liste et enregistrement
                foreach($f as $v) $f2[$v[1]] = $v;
                $this->writedata($file, $f2);
            }
            // formulaire
            $pos = (int)$this->args[1];
            if (array_key_exists($pos, $f)) {
                $name = $f[$pos][0];
                $del = true;
                $ext = $f[$pos][2];
            }
            //print '<pre>'.print_r($f, 1).'</pre>';
            $out = '<form method="post" action="'.$this->base.'files" enctype="multipart/form-data"><table class="ztable">';
            $out .= '<tr><td colspan="2">'.($pos ? '<a href="'.$this->base.'files"><img src="deco/a.png" /></a> ' : '').'<strong>'.$this->get_message($pos ? 'files_edit' : 'files_new').' '.strtoupper($ext).' : </strong>'.$name.'</td></tr>';
            $out .= '<tr><td>'.$this->get_message('files_filename').'</td><td><input name="name" type="text" id="name" value="'.$name.'" style="width:100%;" /></td></tr>';
            $out .= '<tr><td>'.$this->get_message('files_choose').'</td><td><input type="file" name="file" /></td></tr>';
            if ($del) $out .= '<tr><td>'.$this->get_message('files_delete').'</td><td><input name="delete" type="checkbox" value="1" /> '.$this->get_message('files_delwarning').'</td></tr>';
            $out .= '<tr><td colspan="2"><input type="submit" name="Submit" value="'.$this->get_message('submit').'" /><input name="save" type="hidden" value="1" /><input name="pos" type="hidden" value="'.$pos.'" /></td></tr></table></form>';
            // listing
            usort($f, create_function('$a, $b', 'return strcmp($a[0], $b[0]);'));
            $out .= '<table class="ztable">';
            $out .= '<tr bgcolor="#CCCCCC"><td>'.$this->get_message('files_edit').'</td><td>'.$this->get_message('files_open').'</td></tr>';
            foreach($f as $v) {
                $out .= '<tr bgcolor="#'.(++$i%2 ? 'DDDDDD' : 'EEEEEE').'"><td><a href="'.$this->base.'files|'.$v[1].'">'.strtoupper($v[2]).'</a></td><td><a href="zfiles/'.$v[1].'.'.$v[2].'" target="_blank">'.$v[0].'</a></td></tr>';
            }
            $out .= '</table>';
            return $out;
        } else {
            return $this->get_message('not_allowed');
        }
    }
       
    function page_sitemap() {
        $base = $this->base;
        $nav = '';
        $max = count($this->struct);
        for ($i=1; $i<=$max; $i++) {
            $s = $this->struct[$i];
            if ($s[4]) $nav .= '<li class="zli'.$s[2].'"><a href="'.$base.$i.'">'.$s[1].'</a></li>';
        }
        return '<h1>'.$this->get_message('sitemap').'</h1><ul class="zul">'.$nav.'</ul></p>';
    }

    function getfile($id, $oldext=false) {
        $handle = $_FILES['file'];
        if (empty($handle) || $handle['error']==4) {
            return false;
        } else {
            if ($handle['error']!=0) {
                $this->prepend('<div class="zalert">'.$this->get_message('done_failed').'</div>');
                return false;
            }
            $ext = pathinfo($handle['name']);
            $ext = $ext['extension'];
            if (in_array($ext, explode(',', $this->get_data('upload_types')))) {
                $temp_file = $handle['tmp_name'];
                if (@move_uploaded_file($temp_file, $this->fpath.'/'.$id.'.'.$ext)) {
                    if ($oldext != $ext) unlink($this->fpath.'/'.$id.'.'.$oldext);
                    $this->prepend('<div class="zalert">'.$this->get_message('done_ok').'</div>');
                    return $ext;
                } else {
                    $this->prepend('<div class="zalert">'.$this->get_message('done_failed').'</div>');
                    return false;
                }
            }
            $this->prepend('<div class="zalert">'.$this->get_message('done_failed').'</div>');
            return false;
        }
    }

// Autres fonctions
    function writefile($file, $content) {
        $h = fopen($file, 'w');
        if ($h) {
            $r = fwrite($h, $content);
            fclose($h);
            return $r;
        }
        return false;
    }

    function writeconfig($file, $content) {
        foreach ($content as $k => $v) $dta .= "\n$k = \"".str_replace('"', '"', $v).'"';
        return $this->writefile($file, $dta);
    }

    function writedata($file, $content) {
        $zite = & $this;
        @include($this->zpath.'/'.$this->get_data('editor').'_lists.php');
        return $this->writefile($file, serialize($content));
    }

    function swap($p) {
        $t = $this->struct[$p-1];
        $this->struct[$p-1]=$this->struct[$p];
        $this->struct[$p]=$t;
    }

}
?>

Voilà, je crois que de manière rustique, ca doit répondre à la demande de Vektrox, enfin j'espère.
J'espère que d'autres feront en sorte d'améliorer

A plus tard
JP

Hors ligne

#18 07/10/2007 00:42:28

Vektrox
Membre
Lieu : Contres (41)
Inscription : 08/02/2007
Messages : 108

Re : MENU ONGLET

Salut

Dis donc mapaje... chapeau bas boulot d'enfer, a ce rythme la tu va nous réécrire ZITE ;D en tous cas je  te remercie grandement
@+

Hors ligne

#19 07/10/2007 20:33:09

Renaud
Membre
Inscription : 30/01/2007
Messages : 306

Re : MENU ONGLET

Heureusement que zite pèse un chouia moins que joomla, sinon je vous dis pas la taille de la page en rebalçant les scripts du bidule. MDR !

En tout cas c'est cool mapage, tu as bien implémenté le truc et ça marche ;-) Par contre pour la modif du code zite je ne vois pas bien sa nécessité... pourquoi ne pas garder les mêmes classes pour les menus et agir juste sur la css ? bon j'avoue que j'ai eu la flemme de creuser, mais je en vois pas pourquoi simplement créer des classes css nouvelles alors qu'il suffit d'utiliser les classes actuelles en les redéfinissant lorsqu'elles sont utilisées dans un div avec un ID particulier.


Ubuntu Rocks

Hors ligne

#20 08/10/2007 09:50:55

mapaje
Membre
Inscription : 09/06/2007
Messages : 81

Re : MENU ONGLET

Salut

Renaud, tout simplement je n'y arrivais pas ... à faire en sorte que sur l'horizontal, les sous-menus restent muets. Et c'était une de mes idées de départ que j'ai mêlé avec ta piste. Maintenant, je pense qu'il y a des lignes superflues. Je va vérifier ça dans la semaine, dès que j'ai un peu de temps.

Vektrox, merci et Oh! Combien j'aimerais pouvoir coder un Zite. J'en suis très loin ... ;-)
A +
JP

Hors ligne

#21 13/10/2007 16:07:13

bvffalo73
Membre
Inscription : 16/02/2007
Messages : 56

Re : MENU ONGLET

Bonjour mapaje,
J'ai pu faire le menu avec l'aide d'un bout de javascript comme içi:  http://www.pohkao.org/zz/ (honteusement pompé sur alsacreation).
Mon premier souci était de régler le css car c'est plus ou moins réussit selon navigateur, voire pas du tout.
Un autre souci était d'écrire la fonction php qui créé le menu qui incorpore les événements javascript dans le menu aussi. Je ne le mets telle quelle içi, mais il faut réadapter car mon site a une organisation spécifiques de pages àfin de fournir la fonctionnalité bilingue (pas encore activée):

function createMenu($isEng = false){
		$isadmin = (int)$_SESSION['zite_admin']>0;
		$rewrite = $this->rewrite && !$isadmin;
		$base = $this->rewrite?($isadmin?$this->base.$this->get_data('navig_admin'):''):$this->base; //V06
		$out='';
		$SMenuId = 1;
		$lastLev = 1;
		$i = 0 ;
		$s = $this->struct[$i];
		$mCount = count($this->struct);
		while ($i < $mCount) {
			if ($s[4] && $s[7] == $isEng) {
				if ($s[2]==1) $out .= '<dl><dt onmouseover="javascript:montre(\'\');"><a href="'.$s[0].'.html" title="'.$s[1].'">'.$s[1].'</a></dt></dl>';
				if ($s[2]==2) {
					if ($lastLev ==3 ) { 
						$SMenuId ++ ;
						$out .= '</ul></dd></dl>';
					}
					$out .= '<dl><dt onmouseover="javascript:montre(\'smenu'.$SMenuId.'\')"><a href="#" title="">'.$s[1].'</a></dt>';
					$out .= '<dd id="smenu'.$SMenuId.'"><ul>';
					$lastLev = 2;
				}
				if ($s[2]==3) {
					$out .= '<li><a href="'.$base.($rewrite?$s[0].'.html' : $i).'" title="'.$s[1].'">'.$s[1].'</a></li>';
					$lastLev = 3;			
				}
			}
			$s = $this->struct[++$i];	
		}
		$out .= '</ul></dd></dl>';
		return $out;
	}

/***** Insérer dans template.php:
<?= $zite->createMenu(false) ?>
******/

Merci pour vos contribs
Cheers

Dernière modification par bvffalo73 (13/10/2007 16:10:31)

Hors ligne

#22 17/10/2007 08:51:00

mapaje
Membre
Inscription : 09/06/2007
Messages : 81

Re : MENU ONGLET

Bonjour,

Méa culpa les plus bas! En ce moment je suis archi sollicité par mon taf, d'où je ne suis guère présent sur le Net. Merci à ceux qui continuent à chercher moi, je m'y remettrais probablement pas avant 1 semaine ben tassée (remarque je pars à Cannes pour taf, l'un compense l'autre)
JP

Hors ligne

#23 20/02/2008 02:37:46

midiweb
Membre
Inscription : 27/06/2007
Messages : 20

Re : MENU ONGLET

salut, j'avais un post sur les menus horizontaux qui m'amènent ici. J'ai incorporé le bout de css de Mapaje sur les menus horizontaux. Cela marche esthétiquement parlant mais je voudrais un menu horizontal qui ne répète pas mon menu vertical avec le même contenu. J'ai pas trop cherché.
Donc la ligne du template fonctionne mais sans "s" à "menus" sinon rien s'affiche.

<div id="menu_horizontal">
        <?php echo $zite->content['menu'] ?>
    </div></div>

En bref, comment changer le css et le template pour avoir deux menus indépendants l'un de l'autre avec un contenu différent.
Merci

Dernière modification par midiweb (20/02/2008 22:06:45)

Hors ligne

#24 20/02/2008 09:53:05

mapaje
Membre
Inscription : 09/06/2007
Messages : 81

Re : MENU ONGLET

Bonjour

Va voir l'autre sujet sur les menus horizontaux. Il est plus abouti.
Sinon le principe est de faire dans le css des "display: none"  avec  les zli suivant ce que tu veux afficher en haut ou sur le coté.
JP

Hors ligne

#25 20/02/2008 11:03:15

Vektrox
Membre
Lieu : Contres (41)
Inscription : 08/02/2007
Messages : 108

Re : MENU ONGLET

Salut

Beaucoup de site vitrine ont des menus horizontaux, ce qui permet d'avoir un maximum de place sur la page, j'ai essayé différente astuces et surtout les tiennes mapaje mais il arrive toujours un truc qui colle pas.

Aujourd'hui mon Zite est en place et fonctionne a merveille mais en toute honnêteté je test un autre CMS avec menus horizontaux et tout aussi intuitif, ZITE est excellent mais n'évolue plus du tout c'est dommage.

Cela me fait penser au CMS easypx41 qui après quelques années et de nombreux thèmes proposé par la communauté (dont j'ai participé) a  été arrêté.

Je le sens pareil pour ZITE et préfère prendre les devant.

Hors ligne

Pied de page des forums