[v4.1.1] Livre d'Or

vidub2001vidub2001 Member
septembre 2009 modifié dans Modifications
Bonjour,

Pour amener une petite pierre à l'édifice :-)

Une page statique qui permet d'ajouter un livre d'or à Pluxml, (script que j'ai adapté et dont l'original se trouve sur http://www.salemioche.net/script-php-2.php)
<?php



if(!empty($_POST)) { //Formulaire valide



//Ouverture du fichier en écriture

$fp = fopen("data/guestbook/guestbook.txt",a);



//On convertit les caracteres html

$nom = htmlspecialchars($_POST['nom']);

$mail = htmlspecialchars($_POST['mail']);

$message = stripslashes(nl2br(htmlentities($_POST['message'],ENT_NOQUOTES,PLX_CHARSET)));

$d = date ( "d/m/Y H:i:s" );



$page = "<p>";

$lemail = "<a href=\"mailto:$mail\">$mail</a>";

$page .= "<b>$nom</b> (".$lemail.") - $d<br />$message<br /></p><hr />\n";



//On rajoute le message

fwrite($fp,"$page" ,strlen("$page"));



//fermeture du fichier

fclose($fp);



}



?>



<h2>A vous !!</h2>

<div id="form">

   <form method="post" action="#form" onsubmit="if ( this.nom.value.length < 2 ) { return false ;}" >

      <fieldset>

         <label>Nom :</label>

         <input type="text" name="nom" size="25" />

         <label>Mail :</label>

         <input type="text" name="mail" size="25" />

         <label>Message:</label>

         <textarea name="message" rows="4" cols="47"></textarea>

         <p><input type="submit" value="Envoyer" /></p>

      </fieldset>

   </form>

</div>

<?php
$fichier=PLX_ROOT."data/guestbook/guestbook.txt"; 
$tabfich=file($fichier);
$i =  count($tabfich);
while( $i > 0 ){
   echo $tabfich[$i];
   $i--;
}
?>
<br /><br />
Il faut créer dans le répertoire DATA, un répertoire "guestbook" et à l'intérieur, un fichier vide qui a comme nom guestbook.txt

C'est simple en attendant mieux

Cordialement
Fabrice

Réponses

  • Belle pierre apportée. ;)

    Merci.
  • Bonsoir,

    Merci Hamtaro,

    J'aimerai pouvoir trier dans le sens inverse les posts, càd, les posts les plus récents en premier

    Si vous avez une idée

    Cordialement
    Fabrice
  • septembre 2009 modifié
    Bonjour,

    Je peut te proposer la solution que j'avais prise sur un v2 ou v3 (http://yidille.free.fr/plux/bs_plux/?7-livre-d-or et post http://forum.pluxml.org/viewtopic.php?id=706 ) , qui consister a alimenter un tableau en bouclant sur les commentaires au lieu de les afficher , puis selon le nombre ceux-ci était paginer et afficher du plus récent au plus ancien .

    En modifiant le fichier "article.php" de ton theme , les commentaires de toutes tes pages seront paginer .
    Ensuite :
    1) Creer un nouvel Article , lui donner le nom de livre d'or et l'anti-daté (en faire le premier article par exemple) .
    récuperer le lien vers cette page .

    2) Pour creer un lien direct vers celui-ci
    Creer une page statique avec comme nom : Livre d'Or et l'editer en incorporant cette redirection pour eviter le duplicate content :
    <?php
    // Permanent redirection
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: http://adresse de votre page livre-d'or");
    exit();
    ?>
    
    Modification a effectuer sur article.php :

    chercher :
    <?php # Si on a des commentaires ?>
    		<?php if($plxShow->plxMotor->plxGlob_coms->count): ?>
    			<div id="comments">
    				<h2>Commentaires</h2>
    				<?php while($plxShow->plxMotor->plxRecord_coms->loop()): # On boucle sur les commentaires ?>
    					<div id="<?php $plxShow->comId(); ?>" class="comment">
    						<div class="info_comment"><p>Par <?php $plxShow->comAuthor('link'); ?> le <?php $plxShow->comDate(); ?></p></div>
    						<blockquote><p><?php $plxShow->comContent() ?></p></blockquote>
    					</div>
    				<?php endwhile; # Fin de la boucle sur les commentaires ?>
    				<?php # On affiche le fil Atom de cet article ?>
    				<div class="feed_article"><?php $plxShow->comFeed('atom',$plxShow->artId()); ?></div>
    			</div>
    		<?php endif; # Fin du if sur la prescence des commentaires ?>
    
    et remplacer par :
    <?php # Si on a des commentaires ?>
    		<?php if($plxShow->plxMotor->plxGlob_coms->count): ?>
    			<div id="comments">
    				<h2>Commentaires</h2> 
    		<?		$i=0;
    				while($plxShow->plxMotor->plxRecord_coms->loop()): # On boucle sur les commentaires 				
    		$i_com=$i;
    		$ligne_com=		$i_com%2;
    		$id_com= 		$plxShow->plxMotor->plxRecord_coms->f('numero');
    		$auteur_com=	$plxShow->plxMotor->plxRecord_coms->f('author');
    		$auteur_site=	$plxShow->plxMotor->plxRecord_coms->f('site');
    		$date_com=		plxUtils::dateIsoToHum($plxShow->plxMotor->plxRecord_coms->f('date')).' à '.plxUtils::heureIsoToHum($plxShow->plxMotor->plxRecord_coms->f('date'));
    		$contenu_com=	nl2br($plxShow->plxMotor->plxRecord_coms->f('content'));
    		$commentaire[$i] = array($i_com, $ligne_com , $id_com , $auteur_com , $auteur_site , $date_com , $contenu_com  );
    		$i++;
     endwhile; # Fin de la boucle sur les commentaires 
    
     ?>
     
     <?php
     	//recuperation des variables d'url
    		// recuperation du numero de page a afficher
    		if(!isset($_GET['pagenum'])) {$page_num=1;}
    		else {$page_num=$_GET['pagenum'];}
    		
    		// choix du sens d'affichage  croissant ou decroissant
    		if(!isset($_GET['tri'])) {$tri="kr";}
    		else {$tri="k";}
    		
    	// mise en place variables pour pagination comptage des commentaires , et configuration
    	
    	$compteur=0; //raz
    	$nb=count($commentaire);//nombre de commentaires
    	$comm_par_page=15; // nombres de commentaires a affichée par pages
    	$pages_com_ar=ceil($nb/$comm_par_page); // nombre de pages
    	$pages_com=floor($nb/$comm_par_page); //  pour gestion des liens
    	// verification et nettoyage des numeros de pages qui n'existent pas avec renvoi a la premiere page .
    	if (($page_num==0) || ($page_num > $pages_com_ar)) {$page_num=1;}
    	$page_numero=$page_num; //numero de page
    	$prem=($page_numero*$comm_par_page)-$comm_par_page;//numero du premier message a afficher
    	$der=$prem+$comm_par_page;//numero du dernier message a afficher
    	$before=$page_numero-1 ;
    	$after=$page_numero+1 ;	
    	
    	//  fin variables de pagination			
    		
    		
    // lien de navigations de page en page 
    //test si premiere page 
    echo '<p id="nav_comment">page(s) : · ';
    	// test si plusieurs pages si besoin d'afficher une pagination (liens precedents/premier)
    	if ($pages_com>=0){
    		if (($page_num!=0) && ($page_num!=1)) // test que ce n'est pas la premiere page
    		{	echo '<a href="?article'.$plxShow->artId().'/#comments" title="premiere page de commentaires">1</a> · ';
    		}
    		$pagesbefore=2;  // boucle affichant les liens des pages precedentes existantes 
    			     while($pagesbefore < $page_num)
    			     {
    			           echo '<a href="?article'.$plxShow->artId().'/'.'&pagenum='.$pagesbefore.'#comments" title="page N°'.$pagesbefore.'">'.$pagesbefore.'</a> · ';
    
    			           $pagesbefore++;
    			     }
    	}
    echo ' <b style="color:#DCA61C">'.$page_num.' </b> · ' ; // affiche numero de page en cours
    
    	// test si plusieurs pages si besoin d'afficher une pagination (liens suivants/derniers)
    	if ($pages_com>0){
    
    		if ($page_num!=$pages_com_ar) // test que ce n'est pas la derniere page
    		{	echo '<a href="?article'.$plxShow->artId().'/'.'&pagenum='.$after.'#comments" title="page N°'.$after.' " >'.$after.'</a> · ';
    		}
    		
    		// boucle affichant les liens des pages suivantes existantes 
    		$pagesafter=$after; 
    		$pagesafter++;	
    		     while(($pagesafter < $pages_com_ar) && ($pagesafter > $after))
    		     {
    		           echo '<a href="?article'.$plxShow->artId().'/'.'&pagenum='.$pagesafter.'#comments" title="page N°'.$pagesafter.'">'.$pagesafter.'</a> · ';
    
    		           $pagesafter++;
    		     }
    	 // on affiche le lien vers la derniere page si celle ci n'est pas la page courante
    		if (($page_numero!=$pages_com_ar) && ($after!=$pages_com_ar)) //test si pages precedentes existent
    		{	echo '<a href="?article'.$plxShow->artId().'/'.'&pagenum='.$pages_com_ar.'#comments"  title="Derniere page" >'.$pages_com_ar.'</a>  · ';
    		}
    	}
    	echo '</p>';
    
    	
    	eval($tri.'sort($commentaire);');
    		$comnum=$nb;
    foreach($commentaire as $valeur)
        {
    	if ($compteur!=$nb) {
    
    		if(($compteur>=$prem) && ($compteur<$der) ) {
    					
    $aopen='';$aclose='';
    if($valeur[4]!='') {$aopen='<a href="'.$valeur[4].'">';$aclose='</a>';}
    echo'<div id="'.$valeur[2].'" class="comment ligne'.$valeur[1].'">
    						<div class="info_comment"><p><span style="float:right;">N°'.$comnum .'/'.$nb.' .</span>Par '.$aopen.$valeur[3].$aclose.' le '.$valeur[5].'</p></div>
    						<blockquote><p>'.$valeur[6].'</p></blockquote>
    					</div>';
    
    		
    			}
    		$comnum--;	
    		$compteur++;
    	}
        }  ?>
    		
    				<?php # On affiche le fil Atom de cet article ?>
    				<div class="feed_article"><?php $plxShow->comFeed('atom',$plxShow->artId()); ?></div>
    			</div>
    		<?php endif; # Fin du if sur la prescence des commentaires ?>
    
    La gestion de la pagination des commentaires se fait dans le theme sans toucher a Pluxml.

    GC

    exemple de mise en place d'un article en tant que livre d'or : http://gcyrillus.com/zaicha/static6/livre-d-or


    Cordialement,
    gcyrillus

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • Bonjour,

    Merci gcyrillus, je vais tester ta solution, je ne l'avais pas vu, elle a l'air pas mal car utilise les commentaires des articles, ce qui est astucieux, je vais voir si elle est adaptée à mon blog.

    Sinon, j'ai mis à jour dans mon premier post, le code avec la modification de l'ordre des commentaires pour avoir les plus récents en premier

    Cordialement
    Fabrice
  • Tu devrais le mettre en wiki ça a l'air sympa

    ça peut servir pour ajouter des commentaires à une page statique comme sous un article ? Je voudrais créer une page de liens et laisser aux visiteurs la possibilité de commenter
  • la solution de gcyrillus-nomade est parfaite. Je l'ai installé il y a un bout de tps déjà, c'est vraiment très efficace et intégré totalement à pluxml.
  • antistressantistress Member
    janvier 2010 modifié
    Je viens d'essayer la solution de vidub2001 pour permettre à des visiteurs de rajouter des liens utiles ou commentaires à une page statique "liens utiles" existante http://libre-ouvert.toile-libre.org/?static3/liens-utiles
    Ça marche bien excepté à deux détails près :
    * je préférerais une présentation en 2 colonnes (invisibles) c-a-d dans celle de gauche : les nom, mél et bouton de validation ; dans celle de droite : le champ commentaire. Car là le champ commentaire vient après et il y a un gâchis d'espace
    * le mél est rendu publque et le site web ne peut être renseigné

    au final c'est dommage que ce module ne soit pas calqué sur le module commentaire normal (avec indication du site web du visiteur mais pas de son adresse - enfin je crois)

    je n'ai pas osé tester l'autre solution qui semble modifier PluXml en profondeur ?
  • janvier 2010 modifié
    antistress a écrit:
    au final c'est dommage que ce module ne soit pas calqué sur le module commentaire normal (avec indication du site web du visiteur mais pas de son adresse - enfin je crois)

    je n'ai pas osé tester l'autre solution qui semble modifier PluXml en profondeur ?
    L'autre solution ne modifie en rien pluxml ,
    tout se joue dans le themes et la page statique redirige vers une page 'article' definie (avec son formulaire de commentaire comme les autres ) et utilisé comme livre d'or . , cette page peut-etre une page de lien ou n'importe quoi d'autre .

    Ce que je proposesert a paginer les commentaires ceci est la seule modification , fonction dont tu n'as pas besoin a priori .

    Une page article normale se suffit a elle-même selon la description que tu fait.

    Ce sujet parle de "livre d'or" :) et les deux approches ne peuvent pas te convenir .

    GC

    note : penser a remplacer plxUtils::dateIsoToHum par plxDate::dateIsoToHum pour les dernieres versions de pluxml .

    edit : mise a jour pour la v4.3.1 (objet date) pour paginer les commentaires.
    <?php # Si on a des commentaires ?>
            <?php if($plxShow->plxMotor->plxGlob_coms->count): ?>
                <div id="comments">
                    <h2>Commentaires</h2> 
            <?php        $i=0;
                    while($plxShow->plxMotor->plxRecord_coms->loop()): # On boucle sur les commentaires                 
            $i_com=$i;
            $ligne_com=        $i_com%2;
            $id_com=         $plxShow->plxMotor->plxRecord_coms->f('numero');
            $auteur_com=    $plxShow->plxMotor->plxRecord_coms->f('author');
            $auteur_site=    $plxShow->plxMotor->plxRecord_coms->f('site');
            $date_com=        plxDate::dateIsoToHum($plxShow->plxMotor->plxRecord_coms->f('date')).' à '.plxDate::heureIsoToHum($plxShow->plxMotor->plxRecord_coms->f('date'));
            $contenu_com=    nl2br($plxShow->plxMotor->plxRecord_coms->f('content'));
            $commentaire[$i] = array($i_com, $ligne_com , $id_com , $auteur_com , $auteur_site , $date_com , $contenu_com  );
    		
            $i++;
     endwhile; # Fin de la boucle sur les commentaires 
    
     ?>
     
     <?php
         //recuperation des variables d'url
            // recuperation du numero de page a afficher
            if(!isset($_GET['pagenum'])) {$page_num=1;}
            else {$page_num=$_GET['pagenum'];}
            
            // choix du sens d'affichage  croissant ou decroissant
            if(!isset($_GET['tri'])) {$tri="kr";}
            else {$tri="k";}
            
        // mise en place variables pour pagination comptage des commentaires , et configuration
        
        $compteur=0; //raz
        $nb=count($commentaire);//nombre de commentaires
        $comm_par_page=15; // nombres de commentaires a affichée par pages
        $pages_com_ar=ceil($nb/$comm_par_page); // nombre de pages
        $pages_com=floor($nb/$comm_par_page); //  pour gestion des liens
        // verification et nettoyage des numeros de pages qui n'existent pas avec renvoi a la premiere page .
        if (($page_num==0) || ($page_num > $pages_com_ar)) {$page_num=1;}
        $page_numero=$page_num; //numero de page
        $prem=($page_numero*$comm_par_page)-$comm_par_page;//numero du premier message a afficher
        $der=$prem+$comm_par_page;//numero du dernier message a afficher
        $before=$page_numero-1 ;
        $after=$page_numero+1 ;    
        
        //  fin variables de pagination            
            
            
    // lien de navigations de page en page 
    //test si premiere page 
    echo '<p id="nav_comment">page(s) : · ';
        // test si plusieurs pages si besoin d'afficher une pagination (liens precedents/premier)
        if ($pages_com>=0){
            if (($page_num!=0) && ($page_num!=1)) // test que ce n'est pas la premiere page
            {    echo '<a href="?article'.$plxShow->artId().'/#comments" title="premiere page de commentaires">1</a> · ';
            }
            $pagesbefore=2;  // boucle affichant les liens des pages precedentes existantes 
                     while($pagesbefore < $page_num)
                     {
                           echo '<a href="?article'.$plxShow->artId().'/'.'&pagenum='.$pagesbefore.'#comments" title="page N°'.$pagesbefore.'">'.$pagesbefore.'</a> · ';
    
                           $pagesbefore++;
                     }
        }
    echo ' <b style="color:#DCA61C">'.$page_num.' </b> · ' ; // affiche numero de page en cours
    
        // test si plusieurs pages si besoin d'afficher une pagination (liens suivants/derniers)
        if ($pages_com>0){
    
            if ($page_num!=$pages_com_ar) // test que ce n'est pas la derniere page
            {    echo '<a href="?article'.$plxShow->artId().'/'.'&pagenum='.$after.'#comments" title="page N°'.$after.' " >'.$after.'</a> · ';
            }
            
            // boucle affichant les liens des pages suivantes existantes 
            $pagesafter=$after; 
            $pagesafter++;    
                 while(($pagesafter < $pages_com_ar) && ($pagesafter > $after))
                 {
                       echo '<a href="?article'.$plxShow->artId().'/'.'&pagenum='.$pagesafter.'#comments" title="page N°'.$pagesafter.'">'.$pagesafter.'</a> · ';
    
                       $pagesafter++;
                 }
         // on affiche le lien vers la derniere page si celle ci n'est pas la page courante
            if (($page_numero!=$pages_com_ar) && ($after!=$pages_com_ar)) //test si pages precedentes existent
            {    echo '<a href="?article'.$plxShow->artId().'/'.'&pagenum='.$pages_com_ar.'#comments"  title="Derniere page" >'.$pages_com_ar.'</a>  · ';
            }
        }
        echo '</p>';
    
        
        eval($tri.'sort($commentaire);');
            $comnum=$nb;
    foreach($commentaire as $valeur)
        {
        if ($compteur!=$nb) {
    
            if(($compteur>=$prem) && ($compteur<$der) ) {
                        
    $aopen='';$aclose='';
    if($valeur[4]!='') {$aopen='<a href="'.$valeur[4].'">';$aclose='</a>';}
    echo'<div id="'.$valeur[2].'" class="comment ligne'.$valeur[1].'">
                            <div class="info_comment"><p><span style="float:right;">N°'.$comnum .'/'.$nb.' .</span>Par '.$aopen.$valeur[3].$aclose.' le '.$valeur[5].'</p></div>
                            <blockquote><p>'.$valeur[6].'</p></blockquote>
                        </div>';
    
            
                }
            $comnum--;    
            $compteur++;
        }
        }  ?>
            
                    <?php # On affiche le fil Atom de cet article ?>
                    <div class="feed_article"><?php $plxShow->comFeed('atom',$plxShow->artId()); ?></div>
                </div>
            <?php endif; # Fin du if sur la prescence des commentaires ?>
    
    Dans le fichier "commentaires.php" du themes
    remplacer le code ci-dessous par le code ci-dessus :
    <?php # Si on a des commentaires ?>
    <?php if($plxShow->plxMotor->plxGlob_coms->count): ?>
    	<div id="comments">
    		<h2>Commentaires</h2>
    		<?php while($plxShow->plxMotor->plxRecord_coms->loop()): # On boucle sur les commentaires ?>
    			<div id="<?php $plxShow->comId(); ?>" class="comment type-<?php $plxShow->comType(); ?>">
    				<blockquote>
    					<p class="info_comment">Le <?php $plxShow->comDate('#num_day #month #num_year(4)'); ?> <?php $plxShow->comAuthor('link'); ?> à dit :</p>
    					<p class="content_com"><?php $plxShow->comContent() ?></p>
    				</blockquote>
    				<div class="clearer"></div>
    			</div>
    		<?php endwhile; # Fin de la boucle sur les commentaires ?>
    		<?php # On affiche le fil Atom de cet article ?>
    		<div class="feed_article"><?php $plxShow->comFeed('atom',$plxShow->artId()); ?></div>
    	</div>
    <?php endif; # Fin du if sur la prescence des commentaires ?>
    


    Cordialement,
    gcyrillus

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • Ce que je proposesert a paginer les commentaires ceci est la seule modification , fonction dont tu n'as pas besoin a priori .

    Une page article normale se suffit a elle-même selon la description que tu fait.
    ah oui en effet, j'avais pas vu la fonction pagination.
    Mais comment « faire rentrer » une « page article normale » dans mes pages statiques ?
  • 1) Creer un nouvel Article , lui donner un nom et l'anti-daté (pour en en faire le plus viel article par exemple) .
    récuperer le lien vers cette page .

    2) Pour creer un lien direct via une page statique
    Creer une page statique avec comme nom celui de votre page et l'editer en incorporant cette redirection pour eviter le duplicate content :
    <?php
    // Permanent redirection
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: lien absolue vers l'article");
    exit();
    ?>
    
    En cliquant sur le lien de la page statique la redirection est se fait automatiquement vers l'article ciblé .

    (La je ne repete que ce que j'explique plus haut , je ne peut pas faire plus , prend donc le temps de bien lire les sujet.)
    GC


    Cordialement,
    gcyrillus

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • je n'avais pas compris que ces seules étapes suffisaient
    merci d'avoir pris le temps de m'éclairer
  • antistressantistress Member
    janvier 2010 modifié
    bon pour que ma page article qui doit être affichée en page statique ne se remarque pas trop j'ai crée une catégorie "non classé" et j'ai mis dans le chapô un espace (enfin son code ISO) pour diminuer l'empreinte de la page dans mes articles

    c'est du bricolage mais c'est plus cohérent comme ça
  • janvier 2010 modifié
    Bien joué :)

    Si tu ne veut pas voir cette catégorie s'afficher dans ton menu vertical (dans la sidebar) , donnes lui le n° 0 .

    GC


    Cordialement,
    gcyrillus

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • Bien joué :)

    Si tu ne veut pas voir cette catégorie s'afficher dans ton menu vertical (dans la sidebar) , donnes lui le n° 0 .

    GC
    comment ça "donnes lui le n° 0" ?
  • StéphaneStéphane Member, Former PluXml Project Manager
    Sur la page de gestion des catégories dans l'administration, dans la colonne ordre, mets la valeur 0 pour ta catégorie. De cette façon elle n'apparaitra pas dans la sidebar avec les autres catégories

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • cool merci :-)
Connectez-vous ou Inscrivez-vous pour répondre.