Les archives de FluxBB.fr
Vous n'êtes pas identifié(e).
Pages : 1
Salut !
Actuellement je bricole une sidebar pour mon futur forum sous la 1.4 et j'ai ajouté une barre latérale ou je compte mettre tout pleins de raccourcis et autres, en ce moment je suis sur un selecteur de thème mais je bloque...
L'architecture est la suivante : appel de sidebar.php dans le main.tpl en mettant le fichier da,s le répertoire include/user (il y a plus simple, Ti_Pierre m'en a fait la démonstration mais chui tétu xD ).
Dans ce fichier j'ai donc repris une partie du code trouvé dans profile.php concernant le choix du style :
</div>
<div class="block">
<h2><?php echo $lang_sidebar['Styles'] ?></h2>
<div class="box">
<div class="inbox">
<form id="StyleSwitcher" method="post" action="styleswitcher.php">
<?php
$styles = array();
$d = dir(PUN_ROOT.'style');
while (($entry = $d->read()) !== false)
{
if (substr($entry, strlen($entry)-4) == '.css')
$styles[] = substr($entry, 0, strlen($entry)-4);
}
$d->close();
// Only display the style selection box if there's more than one style available
if (count($styles) == 1)
echo "\t\t\t".'<div><input type="hidden" name="form[style]" value="'.$styles[0].'" /></div>'."\n";
else if (count($styles) > 1)
{
natsort($styles);
?>
<select name="form[style]">
<?php
while (list(, $temp) = @each($styles))
{
if ($user['style'] == $temp)
echo "\t\t\t\t\t\t\t\t".'<option value="'.$temp.'" selected="selected">'.str_replace('_', ' ', $temp).'</option>'."\n";
else
echo "\t\t\t\t\t\t\t\t".'<option value="'.$temp.'">'.str_replace('_', ' ', $temp).'</option>'."\n";
}
?>
</select>
<?php
}
?>
<input type="submit" name="update" value="Changer" />
</form>
</div>
</div>
</div>Mon problème se situe au niveau de la prise en compte de la validation avec probablement cette ligne qui apelle un fichier php :
<form id="StyleSwitcher" method="post" action="styleswitcher.php">La démo est ici : http://le-mesle.net/beta/forum/index.php test/test
Merci d'avance 
Edit : le fchier stylesswitcher.php (pris dans une mod et collé à l'arrache...)
<?
/***********************************************************************
Copyright (C) 2006 Aryo Sandiyudo (aryo@yowis.com)
This software is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published
by the Free Software Foundation; either version 2 of the License,
or (at your option) any later version.
This software is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston,
MA 02111-1307 USA
************************************************************************/
// CHECK IF NEW STYLESHEET IS BEING LOADED
if(isset($_GET['sheet']) OR isset($_POST['sheet'])) {
// CHECK IF FILE IS SPECIFIED IN URL
if(isset($_GET['sheet'])) { $newsheet = $_GET['sheet']; }
// CHECK IF FILE IS SPECIFIED IN FORM DATA
if(isset($_POST['sheet'])) { $newsheet = $_POST['sheet']; }
// MAKE THE USER REMEMBER WHICH STYLESHEET IS LOADED
setcookie("my_stylesheet", "$newsheet.css", 0, "/");
// SEND THE USER BACK
$ref = $_SERVER['HTTP_REFERER'];
header("Location: $ref");
}else{
// NORMAL STYLESHEET REQUEST
$mysheet = $_COOKIE['my_stylesheet'];
if($mysheet == "") { $mysheet = $pun_user['style']."_cs.css"; }
include "$mysheet";
}
?>Dernière modification par Defaz (11-06-2009 09:47:12)
Hors ligne
Ta variable d'envoi (formulaire) : form['style']
Ta variable de reception (styleswitcher) : $_POST['sheet']
Tu devrais voir l'erreur maintenant je pense
.
Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
Je remplace simplement "sheet par "style" ?
Mais à vrai dire j'aimerais ne pas passer par styleswitche.php si c'est possible 
De ce que j'ai compris il créé un cookie plutôt que d'utiliser la bdd 
Edit : Marche pô, toujours la même erreur... Je crois que ça viens du fait que je ne peux pas utiliser la fonction include 
Dernière modification par Defaz (11-06-2009 10:25:14)
Hors ligne
Il faut voir comment fluxbb extrait les données de l'array form, je ne sais plus exactement comment ça fonctionne (regarde dans le fichier profil).
Pour le duel cookie / bdd, tu dois tester si le visiteur est connecté ou pas :
- invité : il faut mettre à jour le cookie
- membre : il faut mettre à jour son profil (et peut-être aussi le cookie pour que ce soit bien pris en compte).
Après il te "suffit" d'ajouter ton code dans le fichier "sidebar.php', avec les conditions qui vont bien pour qu'il ne soit interprété que quand on demande à changer de style.
Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
Je vais éplucher profile.php 
Et à terme je n'afficherais pas cette fonction aux visiteurs donc en théorie pas besoin des cookie 
Merci pour les conseils en tout cas 
Hors ligne
Je reviens...
La seule partie que j'ai trouvé et qui contient array en rapport avec le syle (enfin je crois) est celle que j'ai placé dans mon code (de toute façon si je la retire mes différents styles n'apparaissent plus).
<?php
$styles = array();
$d = dir(PUN_ROOT.'style');
while (($entry = $d->read()) !== false)
{
if (substr($entry, strlen($entry)-4) == '.css')
$styles[] = substr($entry, 0, strlen($entry)-4);
}
$d->close();
// Only display the style selection box if there's more than one style available
if (count($styles) == 1)
echo "\t\t\t".'<div><input type="hidden" name="form[style]" value="'.$styles[0].'" /></div>'."\n";
else if (count($styles) > 1)
{
natsort($styles);
?>Et la ligne qui sert à valider se présente comme ça dans profile.php :
<form id="profile5" method="post" action="profile.php?section=display&id=<?php echo $id ?>">Forcement ça ne fonctionne pas tel quel 
Hors ligne
Ton formulaire d'envoi était très bien, de même que le fait de conserver l'information dans le cookie : ce sont des invités, il n'y a pas d'emplacement dans la bdd pour ça.
Il te suffit juste remplacer
name="form[style]"par
name="sheet"dans ton formulaire à mon avis (en conservant le script stylesswitcher.php)
Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
Je me suis dis : Wahou c'est tout con et tu vas encore passer pour un boulet 
Mais ça marche pas -_-
Ce script utilise une fonction include qui ne fonctionne apparemment pas sur mon hébergement 
Je laisse tel quel pour voir l'erreur. Ca va être compliqué je sens 
Hors ligne
Pourquoi tu n'as pas remplacé comme je te l'ai dit dans mon précédent message ? Ça devrait marcher normalement. J'ai édité le code html avec web developper et le cookie est bien mis à jour.
Le soucis c'est que cette information n'est pas prise en compte pour l'affichage du design, il faudrai modifier la façon d'inclure le style
.
Après ne restera plus qu'à mettre une redirection pour revenir sur l'index, ou alors d'intégrer ce bout de code quelque part ailleurs.
Dernière modification par fanf73 (11-06-2009 19:30:10)
Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
Désolé... J'avais changé en suivant ton conseil mais forcement a un seul endroit au lieu de deux... M'enfin je viens de tester et pas de changement de style 
Mais plus d'erreur, c'est déjà ça 
Edit : Je vais tenter ma chance sur Fluxbb.org 
Dernière modification par Defaz (11-06-2009 20:07:07)
Hors ligne
Je crois avoir une solution :
Dans ton switchstyle, remplace
setcookie("my_stylesheet", "$newsheet.css", 0, "/");par
setcookie("my_stylesheet", "$newsheet", 0, "/");Dans le fichier header.php, ligne 74, chercher
?>
<title><?php echo $page_title ?></title>
<link rel="stylesheet" type="text/css" href="style/<?php echo $pun_user['style'].'.css' ?>" />Ajouter avant
if ($pun_user['is_guest'])
$pun_user['style'] = $_COOKIE['my_stylesheet'];Je n'y connais pas grand chose en cookie mais je pense que ça devrait marcher 
Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
Petite correction pour la condition de la dernière modif :
if ($pun_user['is_guest'] AND isset($_COOKIE['my_stylesheet']))Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
Oki merci, je vais faire ça ce soir 
J'ai posté sur le .org voir ce qu'ils en pensent 
http://fluxbb.org/forums/post/23550/#p23550
Hors ligne
Tu as pu tester ma solution ? 
Par contre je ne comprends pas trop, dans ta discussion sur le .org tu dis que seuls les membres pourront l'utiliser alors qu'ici ce sont les invités
A moins que je n'ai mal compris 
Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
Et à terme je n'afficherais pas cette fonction aux visiteurs donc en théorie pas besoin des cookie
Je ne compte pas permettre aux visiteurs de modifier le style mais j'attends d'avoir un code qui fonctionne pour mettre la condition "guest"
Edit : pour ta solution, elle fonctionne très bien pour les visiteurs mais pas pour les membres 
http://le-mesle.net/beta/forum3/index.php
En tout cas merci 
Dernière modification par Defaz (13-06-2009 14:41:57)
Hors ligne
En mattant la bdd j'ai trouvé dans la table users le champ style avec pour valeur le nom du style, le tout même pas codé 
Edit : Possible d'utiliser une ligne de ce type :
UPDATE jeux_video SET possesseur='Florent' WHERE possesseur='Michel'Ca vient d'ici http://www.siteduzero.com/tutoriel-3-14 … #ss_part_2 
Dernière modification par Defaz (13-06-2009 15:04:02)
Hors ligne
Oulà, j'étais pas réveillé moi quand j'ai lu tes messages Oo désolé 
Donc oui, ma solution était pour que les invités puissent changer de style de facilement vu comme je l'avais lu
. Je trouvais d'ailleurs ça logique : pouvoir permettre aux invités de choisir leur style
.
Qu'est que tu veux dire par "le nom du style, le tout même pas codé" ? Tout ce que le "forum" à besoin de savoir c'est le nom du style, sans le ".css"
. Il te suffit de faire un
$db->query('UPDATE '.$db->prefix.'users SET style=\''.$db->escape($_POST['sheet']).'\' WHERE id='.$pun_user['id'], __FILE__, __LINE__, $db->error());Dernière modification par fanf73 (13-06-2009 17:11:09)
Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
Je fais mon boulet mais je l'insère comment et ou cette ligne ? 
Et pour ma phrase sur le nom du style même pas codé, je voulais dire qu'il utilisait le nom et non un chiffre donné arbitrairement qui aurait compliqué l'association au style (useless comme remarque, normal xD ).
Hors ligne
Dans ton "styleswitcher.php", ou plutôt dans le fichier cible de ton formulaire de changement de style.
Tu peux d'ailleurs réduire le code à ça je pense :
<?php
define('PUN_ROOT', './');
require PUN_ROOT.'include/common.php';
if(isset($_POST['sheet'])
{
$db->query('UPDATE '.$db->prefix.'users SET style=\''.$db->escape($_POST['sheet']).'\' WHERE id='.$pun_user['id'], __FILE__, __LINE__, $db->error());
}
$ref = $_SERVER['HTTP_REFERER'];
header("Location: $ref");
?>Dernière modification par fanf73 (15-06-2009 09:16:51)
Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
J'ai une erreur avec la condition :s
Edit, l'erreur :
Parse error: syntax error, unexpected '{' in /.../beta/forum/quickss.php on line 6Je vais mettre le code que j'ai actuellement dans sidebar.php
<div id="sidebar_styleswitcher" class="block">
<h2><?php echo $lang_sidebar['Styles'] ?></h2>
<div class="box">
<div class="inbox">
<form id="quickss" method="post" action="quickss.php">
<?php
$styles = array();
$d = dir(PUN_ROOT.'style');
while (($entry = $d->read()) !== false)
{
if (substr($entry, strlen($entry)-4) == '.css')
$styles[] = substr($entry, 0, strlen($entry)-4);
}
$d->close();
// Only display the style selection box if there's more than one style available
if (count($styles) == 1)
echo "\t\t\t".'<div><input type="hidden" name="form[style]" value="'.$styles[0].'" /></div>'."\n";
else if (count($styles) > 1)
{
natsort($styles);
?>
<div>
<input type="hidden" name="form_sent" value="1" />
</div>
<div>
<select name="form[style]">
<?php
while (list(, $temp) = @each($styles))
{
if ($user['style'] == $temp)
echo "\t\t\t\t\t\t\t\t".'<option value="'.$temp.'" selected="selected">'.str_replace('_', ' ', $temp).'</option>'."\n";
else
echo "\t\t\t\t\t\t\t\t".'<option value="'.$temp.'">'.str_replace('_', ' ', $temp).'</option>'."\n";
}
?>
</select>
<?php
}
?>
<input type="submit" name="update" value="Changer" />
</div>
</form>
</div>
</div>
</div>Et dans quickss.php :
<?php
define('PUN_ROOT', './');
require PUN_ROOT.'include/common.php';
if(isset($_POST['form[style]'])
{
$db->query('UPDATE '.$db->prefix.'users SET style=\''.$db->escape($_POST['form[style]']).'\' WHERE id='.$pun_user['id'], __FILE__, __LINE__, $db->error());
}
$ref = $_SERVER['HTTP_REFERER'];
header("Location: $ref");
?>J'ai essayé de coordonner les variables comme tu me la dit précédemment 
Dernière modification par Defaz (15-06-2009 09:49:10)
Hors ligne
Le plus simple aurait été de laisser "sheet" ou "style" de partout, tu n'as qu'un champ donc l'utilisation d'un tableau ne sert qu'à compliquer les choses et à être source d'erreur.
En parlant d'erreur, elle vient de moi : il manquait une parenthèse
if(isset($_POST['sheet']))Dernière modification par fanf73 (15-06-2009 09:59:16)
Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
Yeah ! Ca fonctionne, merci beaucoup de ta patience 
Sur ton conseil j'ai modifié form[style] en sheet et ça marche alors qu'avant il ne se passait rien... Je voulais rester au plus proche du code original m'ai ça ne marchait pas 
Encore merci 
Hors ligne
Je reviens... 
Suite à la création de mon nouveau forum pour partager mes styles pour FluxBB j'ai intégré le code que tu as trouvé pour les membres sans trop de soucis par contre pour ce qui est des visiteurs je dois avoir fait une boulette car j'ai une page blanche...
Alors le code principal est :
<div id="StyleSwitcher" class="block">
<h2><span>Style Switcher</span></h2>
<div class="box">
<div class="inbox">
<?php
if ($pun_user['is_guest'])
{
echo "\n\t\t\t\t\t".'<form id="quickss_public" method="post" action="quickss_public.php">'."\n";
$styles = array();
$d = dir(PUN_ROOT.'style');
while (($entry = $d->read()) !== false)
{
if (substr($entry, strlen($entry)-4) == '.css')
$styles[] = substr($entry, 0, strlen($entry)-4);
}
$d->close();
if (count($styles) == 1)
echo "\t\t\t\t\t\t".'<div><input type="hidden" name="quickss_public" value="'.$styles[0].'" /></div>'."\n";
else if (count($styles) > 1)
{
natsort($styles);
echo "\t\t\t\t\t\t".'<div><input type="hidden" name="form_sent" value="1" /></div>'."\n\t\t\t\t\t\t".'<div>'."\n\t\t\t\t\t\t\t".'<select name="quickss_public">'."\n";
while (list(, $temp) = @each($styles))
{
if ($user['style'] == $temp)
echo "\t\t\t\t\t\t\t\t".'<option value="'.$temp.'" selected="selected">'.str_replace('_', ' ', $temp).'</option>'."\n";
else
echo "\t\t\t\t\t\t\t\t".'<option value="'.$temp.'">'.str_replace('_', ' ', $temp).'</option>'."\n";
}
echo "\t\t\t\t\t\t\t".'</select>'."\n";
}
echo "\t\t\t\t\t\t\t".'<input type="submit" name="update" value="Changer" />'."\n\t\t\t\t\t\t".'</div>'."\n\t\t\t\t\t".'</form>'."\n";
}
else
{
echo "\n\t\t\t\t\t".'<form id="quickss" method="post" action="quickss.php">'."\n";
$styles = array();
$d = dir(PUN_ROOT.'style');
while (($entry = $d->read()) !== false)
{
if (substr($entry, strlen($entry)-4) == '.css')
$styles[] = substr($entry, 0, strlen($entry)-4);
}
$d->close();
if (count($styles) == 1)
echo "\t\t\t\t\t\t".'<div><input type="hidden" name="quickss" value="'.$styles[0].'" /></div>'."\n";
else if (count($styles) > 1)
{
natsort($styles);
echo "\t\t\t\t\t\t".'<div><input type="hidden" name="form_sent" value="1" /></div>'."\n\t\t\t\t\t\t".'<div>'."\n\t\t\t\t\t\t\t".'<select name="quickss">'."\n";
while (list(, $temp) = @each($styles))
{
if ($user['style'] == $temp)
echo "\t\t\t\t\t\t\t\t".'<option value="'.$temp.'" selected="selected">'.str_replace('_', ' ', $temp).'</option>'."\n";
else
echo "\t\t\t\t\t\t\t\t".'<option value="'.$temp.'">'.str_replace('_', ' ', $temp).'</option>'."\n";
}
echo "\t\t\t\t\t\t\t".'</select>'."\n";
}
echo "\t\t\t\t\t\t\t".'<input type="submit" name="update" value="Changer" />'."\n\t\t\t\t\t\t".'</div>'."\n\t\t\t\t\t".'</form>'."\n";
}
?>
</div>
</div>
</div>A priori c'est pas cette partie qui pose problème... Encore que... 
Mon fichier quickss_public.php :
<?
// CHECK IF NEW STYLESHEET IS BEING LOADED
if(isset($_GET['quickss_public']) OR isset($_POST['quickss_public'])) {
// CHECK IF FILE IS SPECIFIED IN URL
if(isset($_GET['quickss_public'])) { $newsheet = $_GET['quickss_public']; }
// CHECK IF FILE IS SPECIFIED IN FORM DATA
if(isset($_POST['quickss_public'])) { $newsheet = $_POST['quickss_public']; }
// MAKE THE USER REMEMBER WHICH STYLESHEET IS LOADED
setcookie("my_stylesheet", "$newsheet", 0, "/");
// SEND THE USER BACK
$ref = $_SERVER['HTTP_REFERER'];
header("Location: $ref");
}else{
// NORMAL STYLESHEET REQUEST
$mysheet = $_COOKIE['my_stylesheet'];
if($mysheet == "") { $mysheet = $pun_user['style']."_cs.css"; }
include "$mysheet";
}
?>Et pour terminé dans header.php j'ai ajouté :
if ($pun_user['is_guest'] AND isset($_COOKIE['my_stylesheet']))
$pun_user['style'] = $_COOKIE['my_stylesheet'];Dernière modification par Defaz (24-08-2009 22:30:05)
Hors ligne
Bon ben j'ai rien dit... Une toute petite lumière et hop j'ai trouvé 
<?
// CHECK IF NEW STYLESHEET IS BEING LOADED
if(isset($_GET['sheet']) OR isset($_POST['quickss_public'])) {
// CHECK IF FILE IS SPECIFIED IN URL
if(isset($_GET['sheet'])) { $newsheet = $_GET['sheet']; }
// CHECK IF FILE IS SPECIFIED IN FORM DATA
if(isset($_POST['quickss_public'])) { $newsheet = $_POST['quickss_public']; }
// MAKE THE USER REMEMBER WHICH STYLESHEET IS LOADED
setcookie("my_stylesheet", "$newsheet", 0, "/");
// SEND THE USER BACK
$ref = $_SERVER['HTTP_REFERER'];
header("Location: $ref");
}else{
// NORMAL STYLESHEET REQUEST
$mysheet = $_COOKIE['my_stylesheet'];
if($mysheet == "") { $mysheet = $pun_user['style']."_cs.css"; }
include "$mysheet";
}
?>Trop de zèle 
Hors ligne
Pages : 1