Archives FluxBB.fr

Les archives de FluxBB.fr

Recherche rapide

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

Version 1.4.13 : [.tar.gz][.zip] (maj 20/10/2014)
Pack langue française pour 1.4.x : [.zip] (maj 06/01/2012)

Branche 1.5.x : fluxbb.org

Version 1.2.24 fr (entièrement en français) : [.zip] (maj 26/08/2011)
Pack langue française pour 1.2.x : [.zip] [.rar] (maj 15/10/2006)

Vous avez un problème ?
Avant de poser votre question sur les forums d'entraide nous vous invitons à consulter :

#1 03-06-2009 18:44:26

Defaz
Habitué très actif

Un plugin de citations aléatoires

J'utilise actuellement l'astuce mise par Sharindlar (http://www.punbb.fr/forums/viewtopic.ph … 838#p52838) pour afficher une citation à la place de la description sur mon forum, mais je me suis dit qu'avec l'arrivée de la 1.4 il serait intéressant de passer cette astuce sur un plugin avec la gestion des citations, auteurs et sources.

Donc si vous aviez connaissance d'un tel plugin, d'astuces du même genre, un tutoou encore de conseils sur la façon de procéder, je suis preneur tongue

Hors ligne

#2 12-07-2010 02:14:06

Defaz
Habitué très actif

Re : Un plugin de citations aléatoires

Post retrouvé après plus d'un an dites donc tongue

Je suis toujours sur cette petite mod qui permet d'afficher une citation aléatoire pour la version 1.4, sauf que maintenant j'ai le plug'in pour créer les citations et l'install_mod pour créer ma table mais il me manque le moyen de choisir aléatoirement une des citations en allant la chercher dans la bdd pour l'afficher...

L'ancienne mod était comme suit :

// START SUBST - <pun_desc>
$titre = pun_htmlspecialchars($pun_config['o_board_desc']);
$phrase[1] = '<i>Première citation</i>';
$phrase[2] = '<i>Deuxième citation</i>';
$phrase[3] = '<i>Troisième citation</i>';

mt_srand ((float)microtime() * 1000000);
$aleatoire = mt_rand(1,count($phrase));
$tpl_main = str_replace('<pun_desc>', '<p class="citation">'.$phrase[$aleatoire].'</p>', $tpl_main);
// END SUBST - <pun_desc>

Mais j'aimerais pouvoir aller chercher l'id maximum de ma table, de lancer un choix aléatoire et ensuite afficher la citation, son auteur et la source. Mais bon moi et le SQL...

Si vous avez des idées ou des pistes je suis preneur wink

Hors ligne

#3 12-07-2010 07:12:08

fanf73
Wik-wiki

Re : Un plugin de citations aléatoires

Tu as deux solutions :
- générer un fichier cache pour éviter des appels à la base de données à chaque chargement de page (ce fichier contiendra un array, comme le fichier de config)
- utiliser la syntaxe de sélection aléatoire

SELECT phrase FROM ma_table ORDER BY RAND() LIMIT 0, 1;

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

#4 12-07-2010 14:04:33

Defaz
Habitué très actif

Re : Un plugin de citations aléatoires

Merci pour l'indication smile

Alors j'ai fait un truc :

$random = $db->query('SELECT id, quote, author, source FROM '.$db->prefix.'quotes ORDER BY RAND() LIMIT 0, 1') or error('Unable to fetch random quote', __FILE__, __LINE__, $db->error());

Si j'ai bien compris ca ne me permet que de faire une sélection mais pas d'afficher mon résultat... Je vais essayer de creuser un peu le truc wink

Hors ligne

#5 15-07-2010 17:26:26

Defaz
Habitué très actif

Re : Un plugin de citations aléatoires

Bon je reviens dessus (c'est par intermittence tongue)

Je me suis penché sur la génération d'un fichier cache plutôt que d'aller chercher dans la bdd et j'ai quelques questions pour savoir si je suis sur le bon chemin big_smile

Notamment la forme du fichier cache. Doit-il donner le code de l'ancienne mod ? C'est à dire quelque chose comme ça :

<? php
$phrase[1] = '<i>Première citation</i>';
$phrase[2] = '<i>Deuxième citation</i>';
$phrase[3] = '<i>Troisième citation</i>';

mt_srand ((float)microtime() * 1000000);
$aleatoire = mt_rand(1,count($phrase));
$tpl_main = str_replace('<pun_desc>', '<p class="citation">'.$phrase[$aleatoire].'</p>', $tpl_main);
?>

Ce genre de code ne ferait ressortir qu'une phrase(puisque le random est inclut) ou faut'il que je fasse ça lors de l'appel du cache ?

Merci d'avance wink

Hors ligne

#6 15-07-2010 17:41:51

fanf73
Wik-wiki

Re : Un plugin de citations aléatoires

Le fichier cache ne doit contenit que la tableau de citation, sinon c'est toujours la même qui va ressortir

<? php
$phrase[1] = '<i>Première citation</i>';
$phrase[2] = '<i>Deuxième citation</i>';
$phrase[3] = '<i>Troisième citation</i>';

Il te suffit ensuite d'inclure le fichier cache puis de "générer" la citation aléatoire.


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

#7 18-07-2010 10:52:17

Defaz
Habitué très actif

Re : Un plugin de citations aléatoires

Merci Fanf pour tes indications big_smile

J'ai repris le fichier cache du plugin smilies fait par Mpok et je suis arrivé à ça :

<?php

// Make sure no one attempts to run this script "directly"
if (!defined('PUN'))
    exit;

//
// Generate quotes cache PHP array
//
function generate_randomquote_cache()
{
    global $db;

    $id = array();
    $quote = array();
    $author = array();
    $source = array();

    $result = $db->query('SELECT id, quote, author, source FROM '.$db->prefix.'quotes ORDER BY id') or error('Unable to retrieve quotes', __FILE__, __LINE__, $db->error());
    while ($db_quotes = $db->fetch_assoc($result))
        {
        $id[] = $db_quotes['id'];
        $quote[] = $db_quotes['quote'];
        $author[] = $db_quotes['author'];
        $source[] = $db_quotes['source'];
        }

    $quote = array_map('pun_htmlspecialchars', $quote);
    $quote = array_map('addslashes', $quote);

    $str = '';
    $str .= '<?php'."\n";

    foreach ($id as $t)
        $str .= "\$phrase[".$t."];"."\n";

    $str .= '?>'."\n";

    $fh = @fopen(FORUM_CACHE_DIR.'cache_randomquote.php', 'wb');
    if (!$fh)
        error('Unable to write the quotes cache. Please check permissions of the \'cache\' directory.', __FILE__, __LINE__);

    fwrite($fh, $str);
    fclose($fh);
}

mais je suis un peu paumé et j'aimerai savoir s'il y a pas des choses en trop et si c'est correctement construit tongue

Hors ligne

#8 18-07-2010 13:33:17

fanf73
Wik-wiki

Re : Un plugin de citations aléatoires

Elle fonctionne ta fonction ? J'ai l'impression qu'il manque des bouts dans la génération de la chaîne $str et que tu fais une boucle en trop :

<?php
function generate_randomquote_cache()
{
    global $db;

    // Création du début du fichier
    $str = '';
    $str .= '<?php'."\n";
    
    // Mise à zéro d'un incrément
    $i = 0;
    
    // On récupère toutes les citations
    $result = $db->query('SELECT id, quote, author, source FROM '.$db->prefix.'quotes ORDER BY id') or error('Unable to retrieve quotes', __FILE__, __LINE__, $db->error());
    // On parcourt tous les résultats
    while ($db_quotes = $db->fetch_assoc($result))
        {
        // On vire les caractères HTML et on échappe les '
        $db_quotes['quote'] = array_map('pun_htmlspecialchars', $db_quotes['quote']);
        $db_quotes['quote'] = array_map('addslashes', $db_quotes['quote']);
        
        // On créé la ligne avec :
        //  $phrase[O] = 'Ceci est la première citation';
        $str .= '\$phrase['.$i.'] =  \''.$db_quotes['quote'].'\';'."\n";
        
        // On incrément l'id
        $i++;
        }

    // On ferme le fichier
    $str .= '?>'."\n";

    $fh = @fopen(FORUM_CACHE_DIR.'cache_randomquote.php', 'wb');
    if (!$fh)
        error('Unable to write the quotes cache. Please check permissions of the \'cache\' directory.', __FILE__, __LINE__);

    fwrite($fh, $str);
    fclo

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

#9 18-07-2010 14:57:20

Defaz
Habitué très actif

Re : Un plugin de citations aléatoires

Ca marche beaucoup mieux en effet, je n'avais que les id avec ma formulation, je vais ajuster un peu wink
Merci Fanf big_smile

Hors ligne

#10 19-07-2010 08:39:04

Defaz
Habitué très actif

Re : Un plugin de citations aléatoires

Ça fonctionne du tonnerre, Merci pour ton aide Fanf big_smile

Une dernière chose avant de partager ça, j'aimerais mettre une condition pour afficher un mot en fonction d'une condition, à savoir afficher "dans" avant la source si elle existe et dans le cas contraire ne rien mettre.

Est-ce que je peux mettre une condition dans :

        $str .= '$phrase['.$i.'] = \'<i>"'.$db_quotes['quote'].'" <b>'.$db_quotes['author'].' dans '.$db_quotes['source'].'</b></i>\';'."\n";

Ou je dois faire ca avant ?

Hors ligne

#11 19-07-2010 08:44:11

fanf73
Wik-wiki

Re : Un plugin de citations aléatoires

Tu peux le mettre dedans :

$str .= '$phrase['.$i.'] = \'<i>"'.$db_quotes['quote'].'" <b>'.$db_quotes['author'].($db_quotes['source'] != '' AND $db_quotes['source'] != NULL ? ' dans '.$db_quotes['source'] : '').'</b></i>\';'."\n";

Ou alors comme ça :

$str .= '$phrase['.$i.'] = \'<i>"'.$db_quotes['quote'].'" <b>'.$db_quotes['author'];
// Test du remplissage de la source
if($db_quotes['source'] != '' AND $db_quotes['source'] != NULL)
    $str .= ' dans '.$db_quotes['source'].'</b></i>\';'."\n";
else
    $str .= '</b></i>\';'."\n";

(Je n'ai pas pu tester, il peut y avoir un soucis de syntaxe)


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

#12 19-07-2010 09:29:54

Defaz
Habitué très actif

Re : Un plugin de citations aléatoires

A priori les deux fonctionnent mais la première solution affiche un chiffre après l'auteur , j'ai donc pris la seconde (que je trouve plus claire en plus wink )

Merci encore, je met en place les fichiers lang et c'est prêt big_smile

Hors ligne

#13 19-07-2010 12:01:00

Defaz
Habitué très actif

Re : Un plugin de citations aléatoires

J'ai un léger bug...

Quelques fois je n'ai rien qui s'affiche comme si il y avait une option nulle dans le choix de la citation. En soit ce n'est pas grave puisque la probabilité diminue avec l'ajout de citations mais c'est gênant tongue

Une autre chose je n'arrive pas à mettre un lien vers le fichier langue dans le titre de mon bouton pour ajouter une citation sad

<input type="submit" name="add_quote" value="Ajouter la citation" />

Le lien vers ma beta : http://www.le-mesle.net/beta/forum/index.php

Hors ligne

#14 19-07-2010 12:15:10

fanf73
Wik-wiki

Re : Un plugin de citations aléatoires

Defaz a écrit :

A priori les deux fonctionnent mais la première solution affiche un chiffre après l'auteur

Un chiffre ? blink Toujours le même ou il change ?

Defaz a écrit :

Quelques fois je n'ai rien qui s'affiche comme si il y avait une option nulle dans le choix de la citation

Ouvre ton fichier cache et vérifie que tu as bien des numéros qui se suivent au niveau de l'index du tableau.

Defaz a écrit :

Une autre chose je n'arrive pas à mettre un lien vers le fichier langue dans le titre de mon bouton pour ajouter une citation

Regarde comment c'est fait dans les autres fichiers :

<input type="submit" name="submit" value="<?php echo $lang_common['Submit'] ?>" tabindex="<?php echo $cur_index++ ?>" accesskey="s" />

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

#15 19-07-2010 12:58:37

Defaz
Habitué très actif

Re : Un plugin de citations aléatoires

fanf73 a écrit :

Un chiffre ? blink Toujours le même ou il change ?

De ce que j'ai testé c'était le chiffre 1 collé à l'auteur, genre : Defaz1

Fanf73 a écrit :

Ouvre ton fichier cache et vérifie que tu as bien des numéros qui se suivent au niveau de l'index du tableau.

Voila le contenu de mon fichier cache :

<?php
$phrase[0] = '<i>"Trop tard vous êtes contaminé..." <b></b></i>';
$phrase[1] = '<i>"Quand on est petit, on est toujours le dernier à savoir qu&#039;il pleut." <b>Coluche</b></i>';
$phrase[2] = '<i>"Pour la carotte, le lapin est la parfaite incarnation du Mal." <b>Robert Sheckley</b></i>';
$phrase[3] = '<i>"Si Vis pacem parabellum - Si tu veux la paix, prépare toi à la guerre." <b>Maxime romaine</b></i>';
?>

A priori pas de raisons...
Mon appel basé sur ce que tu m'avais déjà donné précédemment :

// START SUBST - <pun_desc>
// Open cache_quotes.php
include FORUM_CACHE_DIR.'cache_quotes.php';
mt_srand ((float)microtime() * 1000000);
$aleatoire = mt_rand(0,count($phrase));
$tpl_main = str_replace('<pun_desc>', '<div id="brddesc">'.$phrase[$aleatoire].'</div>', $tpl_main);
// END SUBST - <pun_desc>
Fanf73 a écrit :

Regarde comment c'est fait dans les autres fichiers :

<input type="submit" name="submit" value="<?php echo $lang_common['Submit'] ?>" tabindex="<?php echo $cur_index++ ?>" accesskey="s" />

Ben justement rien ne s'affiche dans mon bouton, j'utilise ça :

<input type="submit" name="add_quote" value="<?php echo $lang_quotes['Quotes'] ?>" />

D'ailleurs sur mon éditeur de code en ligne c'est considéré comme du texte. Je devrais peut être tout encapsuler dans une balise php happy

Hors ligne

#16 19-07-2010 13:25:00

fanf73
Wik-wiki

Re : Un plugin de citations aléatoires

Tu as bien inclus ton fichier langue, et le tableau de valeur porte le même nom ?

Il faudrait ajouter un test de présence ou pas de l'auteur, parce qu'il arrive qu'il n'y en ait pas et tu te retrouves avec des "<b></b>" (et je ne suis pas sûr que ce soit tout à fait valide comme balise HTML).


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

#17 19-07-2010 14:03:18

Defaz
Habitué très actif

Re : Un plugin de citations aléatoires

Je vais reprendre ta méthode pour la source et l'appliquer à l'auteur wink

Sinon mon fichier langue marche pour tout le reste sauf pour ce bout de code, j'ai même repris un code déjà utilisé (et qui fonctionne) des fois qu'il y ai une erreur de frappe mais marche pô... happy

Hors ligne

#18 19-07-2010 15:18:49

PascL
Habitué

Re : Un plugin de citations aléatoires

Pour ta citation vide, cela vient de ta variable $aleatoire et de ton mt_rand.
Le count est égale à 4 si tu as des éléments de 0 à 3.
donc il faut soit faire -1 (et être sûr que tous les indices se suivent), soit utiliser array_rand() qui lui cherche dans les indices qui existent.

Hors ligne

#19 19-07-2010 15:55:12

Defaz
Habitué très actif

Re : Un plugin de citations aléatoires

Merci PascL big_smile
J'ai modifié comme suit et ça à l'air de bien fonctionner

// START SUBST - <pun_desc>
// Open cache_quotes.php
include FORUM_CACHE_DIR.'cache_quotes.php';
mt_srand ((float)microtime() * 1000000);
$aleatoire = array_rand($citation);
$tpl_main = str_replace('<pun_desc>', '<div id="brddesc">'.$citation[$aleatoire].'</div>', $tpl_main);
// END SUBST - <pun_desc>

J'ai également modifié la façon dont est généré mon cache et je n'ai plus de balise vide wink

Merci à tout les deux, je continu de regarder pour ce problème d'appel au fichier lang wink

Hors ligne

#20 20-07-2010 12:59:20

Defaz
Habitué très actif

Re : Un plugin de citations aléatoires

Et voila tout est bon, merci à vous deux mod envoyée wink

Dernière modification par Defaz (20-07-2010 12:59:58)

Hors ligne

#21 22-07-2010 08:43:31

Defaz
Habitué très actif

Re : Un plugin de citations aléatoires

Bon moi qui croyais que c'était terminé, et bien nan... tongue
Suite à la demande de quelques modifications pour la validation j'ai globalement réussi à faire les modifs mais j'ai toujours un truc qui coince...

Je dois ajouter une entrée au fichier langue pour le terme "dans" mais pas moyen que ça s'affiche...

Mon fichier cache :

<?php
/***********************************************************************

  Copyright (C) 2010 Defaz (defaz@le-mesle.net)
  based on code Copyright (C) 2010 Mpok (mpok@fluxbb.fr)
  License: http://www.gnu.org/licenses/gpl.html GPL version 2 or higher

************************************************************************/

// Make sure no one attempts to run this script "directly"
if (!defined('PUN'))
    exit;
    
// Load the quotes language files
define('PUN_ROOT', './');
require PUN_ROOT.'lang/'.$pun_user['language'].'/quotes.php';
    
// Generate quotes cache PHP array
function generate_quotes_cache()
{
    global $db;

    $str = '';
    $str .= '<?php'."\n";
    
    $i = 0;
    
    $result = $db->query('SELECT id, quote, author, source FROM '.$db->prefix.'quotes ORDER BY id') or error('Unable to retrieve quotes', __FILE__, __LINE__, $db->error());

    while ($db_quotes = $db->fetch_assoc($result))
        {

        $db_quotes = array_map('pun_htmlspecialchars', $db_quotes);
        $db_quotes = array_map('addslashes', $db_quotes);

    $str .= '$citation['.$i.'] = \'<span class="brdquote">"'.$db_quotes['quote'].'"';
    // Test du remplissage de l'auteur
        if($db_quotes['author'] != '' AND $db_quotes['author'] != NULL)
    $str .= '</span><span class="brdauthor"> '.$db_quotes['author'];
        else
    $str .= '';
    // Test du remplissage de la source
        if($db_quotes['source'] != '' AND $db_quotes['source'] != NULL)
    $str .= '</span><span class="source"> '.$lang_quotes['In'].' '.$db_quotes['source'].'</span>\';'."\n";
        else
    $str .= '</span>\';'."\n";
        $i++;
        }

    $str .= '?>';

    $fh = @fopen(FORUM_CACHE_DIR.'cache_quotes.php', 'wb');
    if (!$fh)
        error('Unable to write the quotes cache. Please check permissions of the \'cache\' directory.', __FILE__, __LINE__);

    fwrite($fh, $str);
    fclose($fh);
}

La partie intéressante est :

...
// Load the quotes language files
define('PUN_ROOT', './');
require PUN_ROOT.'lang/'.$pun_user['language'].'/quotes.php';
...
...
    // Test du remplissage de la source
        if($db_quotes['source'] != '' AND $db_quotes['source'] != NULL)
    $str .= '</span><span class="source"> '.$lang_quotes['In'].' '.$db_quotes['source'].'</span>\';'."\n";
...

Mon fichier quotes.php :

<?php

$lang_quotes = array(

'Quote'            =>        'Citation',
'Author'        =>        'Auteur',
'In'            =>        'dans',
'Source'        =>        'Source',

'Quote Added'        =>        'Citation ajoutée à la liste. Redirection ...',
'Add Quote'        =>        'Ajout d\'une citation',
'Quote Infos'        =>        'Informations sur la citation',
'Quotes List'        =>        'Liste des citations',
'No Quotes'        =>        'Aucune citation n\'a encore été ajoutée.',
'Action Add Quote'    =>        'Ajouter la citation'

);

Bref j'imagine que c'est tout bête mais je coince sad

Dernière modification par Defaz (22-07-2010 08:45:42)

Hors ligne

#22 22-07-2010 08:47:57

fanf73
Wik-wiki

Re : Un plugin de citations aléatoires

Je ne sais pas trop comment faire si ce n'est concevoir un fichier cache pour chaque langue hmm. A moins d'arriver à laisser les variables "en dur" dans le fichier cache pour qu'elles soient interprétée lors de l'appel au fichier.

En passant et pour tous, merci d'attendre la validation de vos mods avant de les proposer dans la section "Mods et Plugins"


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

#23 22-07-2010 09:15:29

Defaz
Habitué très actif

Re : Un plugin de citations aléatoires

fanf73 a écrit :

Je ne sais pas trop comment faire si ce n'est concevoir un fichier cache pour chaque langue hmm. A moins d'arriver à laisser les variables "en dur" dans le fichier cache pour qu'elles soient interprétée lors de l'appel au fichier.

Une simple virgule va remplacer tout ça dans ce cas tongue

fanf73 a écrit :

En passant et pour tous, merci d'attendre la validation de vos mods avant de les proposer dans la section "Mods et Plugins"

En effet... Je ne referais pas ce genre de chose à l'avenir hmm

Hors ligne

#24 23-07-2010 08:51:55

Defaz
Habitué très actif

Re : Un plugin de citations aléatoires

Une dernière chose avant la validation de la mod, on me demande :

FluxBB.org a écrit :

In AP_Random_Quote.php, apply $db->escape() to the 3 values:

$sql_query = 'INSERT INTO '.$db->prefix.'quotes ( quote, author, source ) VALUE("'.$quote.'", "'.$author.'", "'.$source.'")';

Est ce que ça, ça pourrait le faire :

    $sql_query = 'INSERT INTO '.$db->prefix.'quotes ( quote, author, source ) VALUE("'.$quote.'", "'.$author.'", "'.$source.'")';
    $db->query($sql_query) or error('Unable to create table '.$db->prefix.'quotes.',  __FILE__, __LINE__, $db->error());
    $db->escape.'quotes ( quote, author, source )';
    redirect('admin_loader.php?plugin=AP_Random_Quote.php', $lang_quotes['Quote Added']);

Hors ligne

#25 23-07-2010 09:55:04

PascL
Habitué

Re : Un plugin de citations aléatoires

Plutôt comme ça : wink

$sql_query = 'INSERT INTO '.$db->prefix.'quotes ( quote, author, source ) VALUE("'.$db->escape($quote).'", "'.$db->escape($author).'", "'.$db->escape($source).'")';

Hors ligne

Pied de page des forums