Problème adaptation de thème

Bonjour,

J'ai besoins d'un coup de main sur l'adaptation d'un thème et d'une erreur que je ne comprends pas.

L'adaptation se passe bien sauf pour l'intégration des commentaires.

Sur un article ayant 1 commentaire ou plus : pas d'erreur. Les commentaires et le formulaire s'affiche.
Sur un article ayant 0 commentaire l'erreur apparait se qui casse la mise en page.
Ca bloque au niveau de
<?php while($plxShow->plxMotor->plxRecord_coms->loop()): # On boucle sur les commentaires ?>
qui produit :

Fatal error: Call to a member function loop() on a non-object in C:\Program Files\EasyPHP-5.3.3\www\PluXml\themes\blog_style\commentaires.php on line 6

Ce que je ne comprends pas c'est qu'avec le thème par défaut (ou d'autres thèmes que j'ai testé/adapté) cette erreur ne se produit pas.
Je pense que cela vient du thème, mais je vois vraiment pas où ni pourquoi puisque je fait des copié/collé bref de l'adaptation basique...

(ou alors j'aurai pas dû bosser sur ce thème à 6h du mat' ^^ )

Un petit coup de pouce svp :) merciiii

Réponses

  • je te conseille ce post où j'ai le même problème et où Stéphane (and co ;)) cherche : http://forum.pluxml.org/viewtopic.php?id=1903

    ça me fait presque plaisir de voir que je ne suis pas seul, sans doute oublions-nous un "truc" ...
  • Alors je ne vois pas quoi ! Je prends les bouts de code sur le thème par défaut et j'y colle sur le thème à adapter, c'est pour ça que je comprends pas :/ J'ai rien touché d'autre et jusqu'à ce thème tout allé bien.

    Surtout que ça me fait cette erreur sur un thème que j'aime bien :

    289801.jpeg

    La vilaine erreur en affichage article et 0 commentaire :

    289802.jpeg

    C'est sur la boucle, mais je vois pas pourquoi sur ce thème.
  • Personnellement je viens d'adapter quelques thèmes et je n'est pas rencontré ce soucis ...

    Peut être est-ce tout simplement une div fermé avant une fin de boucle ou autre ?

    Vos droits sur ces dis fichiers sont en 755 / 777 ?
  • super_g2super_g2 Member
    août 2010 modifié
    Pour ma part, oui pour répondre à ta dernière question ;)
    Pour la question sur une div mal fermée, ce n'est pas le cas, car ce n'est que l'absence de commentaire qui déclenche l'erreur.
    Au départ, je pensai à une boulette dans la fonction de détection de présence de commentaire pour l'article concerné, le fameux
    <?php if($plxShow->plxMotor->plxGlob_coms->count): ?>
    
    il y a eu une modif ici?

    sinon, lis mon post frédéric, car j'y fais mention aussi de ton "système" de chatbox (webradio, tout ça..) ;)
  • 777 et div fermé.
    L'erreur se déclenche bien sur la boucle. Perso, ligne 6 c'est bien
    <?php while($plxShow->plxMotor->plxRecord_coms->loop()): # On boucle sur les commentaires ?>
    
    Ca viens de là, mais pourquoi ? Ca c'est mystère pour moi.
  • StéphaneStéphane Member, Former PluXml Project Manager
    BiTwink peux-tu envoyé ton theme zippé à frederic pour qu'il controle dans un premier temps la structure du theme. Il doit surement manquer quelque chose au niveau syntaxe

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • BiTwinkBiTwink Member
    août 2010 modifié
    Ok, j'envoie ça dans les 30 minutes...


    Edit : (j'ai envoyé un message via le forum car je sais pas comment ça se passe dans le coin pour envoyé du zip)
  • super_g2super_g2 Member
    août 2010 modifié
    je viens de faire un diff entre le fichier du thème defaut et le mien, à l’exception de différences de présentation, rien.
    diff themes/defaut/commentaires.php themes/srpulz_v1/commentaires.php
    4,5c4,5
    < 	<div id="comments">
    < 		<h2>Commentaires</h2>
    ---
    > 	<div id="comments"><hr />
    > 		<span class="titre_com">Commentaires</span>
    9,10c9,10
    < 					<p class="info_comment">Le <?php $plxShow->comDate('#num_day #month #num_year(4)'); ?> <?php $plxShow->comAuthor('link'); ?> a dit :</p>
    < 					<p class="num_comment"><a href="<?php $plxShow->ComUrl() ?>" title="#<?php echo $plxShow->plxMotor->plxRecord_coms->i+1 ?>">#<?php echo $plxShow->plxMotor->plxRecord_coms->i+1 ?></a></p>
    ---
    > 					<p class="info_comment"><a href="<?php $plxShow->ComUrl() ?>" title="#<?php echo $plxShow->plxMotor->plxRecord_coms->i+1 ?>">#<?php echo $plxShow->plxMotor->plxRecord_coms->i+1 ?></a>
    > 					Le <?php $plxShow->comDate('#num_day #month #num_year(4) à #hour:#minute'); ?>, <?php $plxShow->comAuthor('link'); ?> a dit :</p>
    13d12
    < 				<div class="clearer"></div>
    17c16
    < 		<div class="feed_article"><?php $plxShow->comFeed('atom',$plxShow->artId()); ?></div>
    ---
    > 		<!--<div class="feed_article"><?php $plxShow->comFeed('atom',$plxShow->artId()); ?></div>-->
    23c22
    < 		<h2>Ecrire un commentaire</h2>
    ---
    > 		<span class="titre_com_form">Ecrire un commentaire</span>
    29c28
    < 					<input name="name" type="text" size="20" value="<?php $plxShow->comGet('name',''); ?>" maxlength="30" /><br />
    ---
    > 					<input name="name" type="text" size="20" value="<?php $plxShow->comGet('name',''); ?>" maxlength="30" />
    31c30
    < 					<input name="site" type="text" size="20" value="<?php $plxShow->comGet('site',''); ?>" /><br />
    ---
    > 					<input name="site" type="text" size="20" value="<?php $plxShow->comGet('site',''); ?>" />
    33c32
    < 					<input name="mail" type="text" size="20" value="<?php $plxShow->comGet('mail',''); ?>" /><br />
    ---
    > 					<input name="mail" type="text" size="20" value="<?php $plxShow->comGet('mail',''); ?>" />
    36,37c35,36
    < 				<textarea name="content" cols="35" rows="6"><?php $plxShow->comGet('content',''); ?></textarea>
    < 				<div class="clearer"></div>
    ---
    > 				<textarea name="content" cols="35" rows="6"><?php $plxShow->comGet('content',''); ?></textarea><br /><br />
    > 				<label><strong>Vérification anti-spam</strong> :</label>
    41,42c40,41
    < 						<?php $plxShow->capchaQ(); ?> : <input name="rep" type="text" size="10" />
    < 						<input name="rep2" type="hidden" value="<?php $plxShow->capchaR(); ?>" />
    ---
    > 						<?php $plxShow->capchaQ(); ?> : <input name="rep" type="text" size="5" />
    > 						<input name="rep2" type="hidden" value="<?php $plxShow->capchaR(); ?>" /><br />
    
    avec l'apparition des gabarit pour les articles, (et perso, comme indiqué dans mon topic, j'ai un fichier de commentaire de présentation différente pour un de mes gabarits) n'y aurait-il pas eu un souci dans la façon de "compter" les coms?

    merci en tout cas ;)

    ps : oui, j'ai mis des "span" hors de balises "p", je compte corrigé cette erreur, ne vous inquiétez pas, il y avait avant une autre balise, que j'ai viré, d'où cette "erreur".
  • Je pense avoir trouvé le problème, valable pour toi aussi super_g2,

    Vous utiliser 2 fois la boucle :
    <?php $plxShow->lastComList('<li><a href="#com_url">#com_author a dit : #com_content(34)</a></li>'); ?>
    
    dans votre template.

    A part pour BiTwink qui lui n'intègre pas sidebar.php dans le template article....

    Ce qui laisse supposer (à tester !) que cette boucle ne peux être appelé que du template sidebar (tu peux confirmer Stéphane ?)

    Dans tout les cas en enlevant cette ligne de ton header, le problème est résolus.
  • bingo, en tout cas, cela résout le pb.
    j'avais commenté le html mais pas l'appel php, fait avec // devant la requête ;)

    par contre, ton tuto sur la chatbox va poser un problème non?
    tu n'as pas eu le souci toi ?

    de plus, l'appel pour la partie chatbox est spécifique à la catégorie "chatbox" de mon article, bizarre :s
    en tout cas, cela fonctionne.

    Merci
  • J'ai réactivé mon ancien thème et javais fais appel à la "chatbox" que depuis le template home.

    J'ai poussé les test et il s'avère que tu peux l'utiliser partout ailleurs SAUF dans le header.
  • super_g2super_g2 Member
    août 2010 modifié
    je en fais appel à la fonction "chatbox" que dans le home.
    et la fonction à désactiver, j'y fais appel dans home et dans sidebar.php..

    xD
    [super_g2 dedicated-server /site/themes/srpulz_v1 ] grep "lastComList" *.php
    
    home.php:			<ul><?php $plxShow->lastComList('<li><span class="chatdate">(#com_date, à #com_hour)</span><br /><a href="#com_url">#com_author </a> : #com_content(80)<br /><br /></li>',$max=20,$art_id='2'); ?></ul>
    
    sidebar.php:					<?php //$plxShow->lastComList('<li><a href="#com_url">#com_author : #com_content(20)</a></li>'); ?>
    
  • Oula j'ai relus ton explication 5 fois !... me réveille d'une grosse sieste.

    Oui en effet l'affichage des derniers articles dans les autres thèmes je les met dans sidebar.php et là il se trouve que c'est le premier thème où je les appelle ailleurs que dans sidebar.php.

    J'ai commenté la ligne et ça fonctionne nickel. Merci pour le coup de main :)
  • super_g2super_g2 Member
    août 2010 modifié
    au fait, merci fred de ton superbe message ;) (je parle sur mon site xD)

    tu as du voir que j'ai légèrement réadapté la chatbox avec ce nouveau et génialissime système de template pour les articles et pages statiques xD
    j'ai aussi remis la fancybox, car la zoombox en faisait trop pour un si petit effet. moins complète, la fancybox est plus légère ;)
  • BiTwinkBiTwink Member
    août 2010 modifié
    Je viens également de remarquer (test sur un autre thème) que si j'appel sidebar.php juste après header.php l'erreur se reproduit.

    Alors je me demande pourquoi cette petite ligne de code
    <?php include(dirname(__FILE__).'/sidebar.php'); # On insere la sidebar ?>
    
    ne peut pas bouger de quelques lignes ?

    Sur le thème par défaut de PluXml avec article.php :
    <?php include(dirname(__FILE__).'/header.php'); # On insere le header ?>
    <div id="page">
    	<div id="content">
    		<h2 class="title"><?php $plxShow->artTitle(''); ?></h2>
    		<p class="info_top">Rédigé par <?php $plxShow->artAuthor() ?> | Classé dans : <?php $plxShow->artCat(); ?></p>
    		<p class="date"><?php $plxShow->artDate('<span>#num_day</span><br />#num_month | #num_year(2)'); ?></p>		
    		<div class="post"><?php $plxShow->artContent(); ?></div>
    		<p class="info_bottom">Mots clés : <?php $plxShow->artTags(); ?></p>
    		<?php $plxShow->artAuthorInfos('<div class="infos">#art_authorinfos</div>'); ?>
    		<?php include(dirname(__FILE__).'/commentaires.php'); # On insere les commentaires ?>
    	</div>
    	<?php include(dirname(__FILE__).'/sidebar.php'); # On insere la sidebar ?>
    </div>
    <?php include(dirname(__FILE__).'/footer.php'); # On insere le footer ?>
    
    Et sur le thème que je test (article.php):
    <?php include(dirname(__FILE__).'/header.php'); # On insere le header ?>
    <?php include(dirname(__FILE__).'/sidebar.php'); # On insere la sidebar ?>
    		<div id="content">
    		<h2><img src="<?php $plxShow->template(); ?>/images/circles.jpg" alt="" /><?php $plxShow->artTitle('link'); ?></h2>	
    		<p class="big">Par <?php $plxShow->artAuthor() ?> dans <?php $plxShow->artCat(); ?></p>
    		<blockquote><p><?php $plxShow->artContent(); ?></p></blockquote>
    		<p><strong><?php $plxShow->artDate('#num_day.#num_month.#num_year(2)'); ?> / Tags : <?php $plxShow->artTags(); ?> / <?php $plxShow->artNbCom(); ?></strong></p>
    
    <p class="big">L'auteur</p>
    <?php $plxShow->artAuthorInfos('<div class="infos">#art_authorinfos</div>'); ?>
    <?php include(dirname(__FILE__).'/commentaires.php'); # On insere les commentaires ?>
    
    	</div>
    <?php include(dirname(__FILE__).'/footer.php'); # On insere le footer ?>
    
    Faut-il alors que sidebar.php soit toujours appelé après le contenu ?
    (oula je sais pas si je m'explique bien là, désolé)

    edit : l'erreur ne se produit plus si sidebar.php se trouve après l'appel de commentaire.php.
  • ahah, j'ai la même façon de faire pour mon thème actuel.
    très bonne remarque BiTwink ;)
  • J'ai quand même du mal à me comprendre lol. Dans ma tête c'est clair, au clavier ça l'est moins alors j'espère que les pros comprendront !
  • Vous devez inclure autre chose,
    Voici le test avec la sidebar juste après le header dans le template article.php du thème défaut sur ce lien.
  • BiTwinkBiTwink Member
    août 2010 modifié
    L'erreur se produit si 0 commentaire. Dans ce cas là commentaire.php bloque et ne s'affiche pas.
    Enfin chez moi en faisant comme ca
    <?php include(dirname(__FILE__).'/header.php'); # On insere le header ?>
    <?php include(dirname(__FILE__).'/sidebar.php'); # On insere la sidebar ?>
    
    et sans rien ajouter ou toucher d'autres à la place des commentaires j'ai une erreur.
    Par contre si je met en commentaire la ligne de code qui affiche les derniers commentaires (comme tu m'as dit de faire), ca refonctionne.

    Edit : sur ton exemple on voit bien que tu as mis sidebar.php après header.php car il y a un décalage entre le header et l'article, mais pourrais-tu créer un article sans commentaire ? ... pour voir si 0 commentaire = erreur avec le thème officiel.

    Edit 2 : je viens de faire le test en local --> appel de sidebar.php juste après header.php sur le thème officiel. L'erreur se produit si 0 commentaire :/

    290516.jpeg

    290519.jpeg
  • Ha oui autant pour moi, pas repensez aux 0 Commentaires ^^

    Je remonte l'info en tant que bogue dans ce cas, en attendant essayer d'agencer autrement votre thème.
  • BiTwinkBiTwink Member
    août 2010 modifié
    Ok merci.
    Agencement du thème : oula que ça va être chaud ! Je vais plutôt le mettre en pause et passer à un autre. Ca sera plus simple ^^.
    Sinon il faut désactiver l'affichage des derniers commentaires... pas tip top :/
  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour voilà la solution pour résoudre l'erreur
    Commentaires
    Fatal error: Call to a member function loop() on a non-object in /var/www/site/themes/xxxxxx/commentaires.php on line 6
    
    Editez le fichier commentaires de votre thème et remplacer la ligne
    <?php if($plxShow->plxMotor->plxGlob_coms->count): ?>
    
    par
    <?php if($plxShow->plxMotor->plxRecord_coms): ?>
    
    nb: si votre thème n'utilise pas de fichier commentaires.php, regardez dans le fichier article.php

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Merci, le formulaire d'ajout de commentaire s'affiche bien même si il y en 0 tout en laissant les derniers commentaires dans la sidebar.

    Merci pour l'aide :)
  • bravo Stéphane, bien vu l'artiste :)
Connectez-vous ou Inscrivez-vous pour répondre.