Dotclear

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

Annonce

13 février 2024 Sortie de Dotclear 2.29

#1 2017-05-27 19:20:49

i_love_dc
Membre
Inscription : 2007-07-13

Comment transfer du php d'un template html dans un _public.php ?

Bonjour.

Pour ajouter des balises qui permettent "en autre" à Google de détecter des
données dans un billet (votes + notes via le plugin Rate It).

J'ai trouvé une solution en ajoutant ce code php dans le template de mon post.php.

<tpl:rateIt type="post">
                           <div class="rateit">{{tpl:rateItLinker}}</div>
                           
                          
                           <?php
                           if (empty($rateit_voted)) {?>
                            <span>Notez cet article</span>
                            <?php 
                           } else {?>
                           <div class="item" vocab="http://schema.org/" typeof="Blog">
                           <div class="rateit-title" property="name">{{tpl:EntryTitle encode_html="1"}}</div>
                           <div class="note" property="aggregateRating" typeof="AggregateRating">
                          {{tpl:lang Note:}} <span property="ratingValue">{{tpl:rateItNote}}</span> - {{tpl:lang Votes:}} <span property="ratingCount">{{tpl:rateItTotal}}</span>
                          <meta property="bestRating" content="5">
                          <meta property="worstRating" content="1">
                          </div>
                          </div>
                          <?php
                          }?>
                           
                         </tpl:rateIt>

Plus particulièrement cette partie :

<?php
                           if (empty($rateit_voted)) {?>
                            <span>Notez cet article</span>
                            <?php 
                           } else {?>
                           <div class="item" vocab="http://schema.org/" typeof="Blog">
                           <div class="rateit-title" property="name">{{tpl:EntryTitle encode_html="1"}}</div>
                           <div class="note" property="aggregateRating" typeof="AggregateRating">
                          {{tpl:lang Note:}} <span property="ratingValue">{{tpl:rateItNote}}</span> - {{tpl:lang Votes:}} <span property="ratingCount">{{tpl:rateItTotal}}</span>
                          <meta property="bestRating" content="5">
                          <meta property="worstRating" content="1">
                          </div>
                          </div>
                          <?php
                          }?>

Est-il possible de traduire ce code afin de l'inclure directement dans le _public.php ?
Et si oui, de quelle manière dois-je procéder svp ?

Merci pour vos lumières.

.

Dernière modification par i_love_dc (2017-05-28 13:00:18)

Hors ligne

#2 2017-05-28 10:01:51

i_love_dc
Membre
Inscription : 2007-07-13

Re : Comment transfer du php d'un template html dans un _public.php ?

J'essaye de suivre le tuto Modifier le fichier _public.php de son thème

Si j'ai bien compris, il s'agit de creer et d'inclure une nouvelle balise comme par exemple, {{tpl:RateThis}} dans mon post.html

<tpl:rateIt type="post">
                           <div class="rateit">{{tpl:rateItLinker}}</div>
                           
                          
                          {{tpl:RateThis}}
                           
                         </tpl:rateIt>

J'ai ensuite pris le bout de code php (ci-dessous) actuellement inclut dans mon post.html

                                          
                           <?php
                           if (empty($rateit_voted)) {?>
                            <span>Notez cet article</span>
                            <?php 
                           } else {?>
                           <div class="item" vocab="http://schema.org/" typeof="Blog">
                           <div class="rateit-title" property="name">{{tpl:EntryTitle encode_html="1"}}</div>
                           <div class="note" property="aggregateRating" typeof="AggregateRating">
                          {{tpl:lang Note:}} <span property="ratingValue">{{tpl:rateItNote}}</span> - {{tpl:lang Votes:}} <span property="ratingCount">{{tpl:rateItTotal}}</span>
                          <meta property="bestRating" content="5">
                          <meta property="worstRating" content="1">
                          </div>
                          </div>
                          <?php
                          }?>

Et tenté de traduire ce code dans le _public.php

$core->tpl->addValue('RateThis', array('tplMyThemeAdditions', 'RateThis'));

class tplMyThemeAdditions {
        public static function RateThis($attr)
        {
                return '<?php echo
                           if (empty($rateit_voted)) {
                            <span>Notez cet article</span>
                           } else {
                           <div class="item" vocab="http://schema.org/" typeof="Blog">
                           <div class="rateit-title" property="name">{{tpl:EntryTitle encode_html="1"}}</div>
                           <div class="note" property="aggregateRating" typeof="AggregateRating">
                          {{tpl:lang Note:}} <span property="ratingValue">{{tpl:rateItNote}}</span> - {{tpl:lang Votes:}} <span property="ratingCount">{{tpl:rateItTotal}}</span>
                          <meta property="bestRating" content="5">
                          <meta property="worstRating" content="1">
                          </div>
                          </div>
                          } ?>';
        }
}

Évidement cela ne fonctionne pas et me renvois un message du type :

Parse error: syntax error, unexpected 'if' (T_IF) in C:\Program Files (x86)\EasyPHP-12.1\www\dotclear\cache\cbtpl\ef\87\ef87a794b70369d44268f874653dffe1.php on line 628

Pourriez-vous m'aider pour le code php dans le _public.php svp ?

.

Dernière modification par i_love_dc (2017-05-28 12:02:58)

Hors ligne

#3 2017-05-28 10:05:50

Tomek
Moderator
Inscription : 2006-04-12
Site Web

Re : Comment transfer du php d'un template html dans un _public.php ?

Non, la traduction n'est pas gérée dans le public.php, voici la marche à suivre pour traduire ce que tu veux dans ton thème : http://tips.dotaddict.org/fiche/Ajouter … h%C3%A8mes

Hors ligne

#4 2017-05-28 10:11:43

i_love_dc
Membre
Inscription : 2007-07-13

Re : Comment transfer du php d'un template html dans un _public.php ?

Bonjour Tomek

je me suis mal exprimé et donc mal fait comprendre ^^ méaculpa !

Lorsque je parle de "traduction", je cherchais à dire "rédiger", "transcoder"...
un bout de code php actuellement inclut dans le post.html et l'écrire de façon"correcte et fonctionnelle dans le _public.php.

Hors ligne

#5 2017-05-28 10:17:56

Tomek
Moderator
Inscription : 2006-04-12
Site Web

Re : Comment transfer du php d'un template html dans un _public.php ?

Autant pour moi, j'avais lu trop vite… bon là je ne vais pas pouvoir t'aider. Mais tu devrais trouver des indications dans la doc et/ou tips, ici par exemple : http://tips.dotaddict.org/fiche/Modifie … th%C3%A8me ?

Hors ligne

#6 2017-05-28 10:29:15

i_love_dc
Membre
Inscription : 2007-07-13

Re : Comment transfer du php d'un template html dans un _public.php ?

c'est effectivement de ce tuto (j'ai donné le lien plus haut) dont je m'inspire et avec le quel j'essaye de comprendre son fonctionnement.

J'ai bien réussi à créer une nouvelle balise, inclut cette balise dans mon post.html.
Jusque la pas de problème, là ou les choses ce corses, c'est le _public.php.

Lorsque je copie-colle mon code php (actuellement dans mon post.html)

<?php
                           if (empty($rateit_voted)) {?>
                            <span>Notez cet article</span>
                            <?php 
                           } else {?>
                           <div class="item" vocab="http://schema.org/" typeof="Blog">
                           <div class="rateit-title" property="name">{{tpl:EntryTitle encode_html="1"}}</div>
                           <div class="note" property="aggregateRating" typeof="AggregateRating">
                          {{tpl:lang Note:}} <span property="ratingValue">{{tpl:rateItNote}}</span> - {{tpl:lang Votes:}} <span property="ratingCount">{{tpl:rateItTotal}}</span>
                          <meta property="bestRating" content="5">
                          <meta property="worstRating" content="1">
                          </div>
                          </div>
                          <?php
                          }?>

et le colle là ou il faut dans le _public.php,

$core->tpl->addValue('RateThis', array('tplMyThemeAdditions', 'RateThis'));

class tplMyThemeAdditions {
        public static function RateThis($attr)
        {
                return '<?php echo
                           if (empty($rateit_voted)) {
                            <span>Notez cet article</span>
                           } else {
                           <div class="item" vocab="http://schema.org/" typeof="Blog">
                           <div class="rateit-title" property="name">{{tpl:EntryTitle encode_html="1"}}</div>
                           <div class="note" property="aggregateRating" typeof="AggregateRating">
                          {{tpl:lang Note:}} <span property="ratingValue">{{tpl:rateItNote}}</span> - {{tpl:lang Votes:}} <span property="ratingCount">{{tpl:rateItTotal}}</span>
                          <meta property="bestRating" content="5">
                          <meta property="worstRating" content="1">
                          </div>
                          </div>
                          } ?>';
        }
}

cela ne fonctionne pas.

J'ai bien conscience que le code php que l'on inclut dans un template html ne doit pas certainement pas être rédigé de la même façon dans _public.php...

D’où ma demande d'aide au sorciers dotcleariens du php ;-)


.

Dernière modification par i_love_dc (2017-05-28 12:04:08)

Hors ligne

#7 2017-05-28 14:52:34

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : Comment transfer du php d'un template html dans un _public.php ?

i_love_dc a écrit :

J'ai bien conscience que le code php que l'on inclut dans un template html ne doit pas certainement pas être rédigé de la même façon dans _public.php....

Exactement, notamment les balises de template de dotclear ne peuvent pas y être utilisées. Il te faut donc récupérer le contenu du billet, le nombre de votes, etc. puis renvoyer tout ce php en faisant attention au cache de templates...

À mon avis, et sans avoir regardé le code en détail, il me semble qu'il sera bien plus simple de bricoler le fichier _public.php  du plugin, c'est après tout une amélioration que tu pourrais d'ailleurs suggérer à son auteur ;)

Hors ligne

#8 2017-05-28 19:12:16

i_love_dc
Membre
Inscription : 2007-07-13

Re : Comment transfer du php d'un template html dans un _public.php ?

Bonjour Philippe.

Cela fait un petit moment déjà que j'ai suggéré cette amélioration à nikrou dans le fil dédié au plugin, mais  je suis resté sans réponses à ce jour.

Je cherchais donc à traduire ce bout de PHP inclut dans mon post.html, car j'ai cru comprendre qu'inclure du PHP directement dans un template n'était pas recommandé, bien que pourtant à l'heure actuelle, ce soit tout à fait fonctionnel.

Au stade ou j'en suis (bout de code PHP fonctionel et valide inclut dans template) et vu qu'apparement transcoder mon code PHP dans _public.php du thème semble "très fastidieux" et "requiert de bonnes compétences" que me suggère tu de faire?
Y a t'il une contre indication particulière pour ne pas inclure du PHP dans un template , si oui la/les quelles ?

.

Dernière modification par i_love_dc (2017-05-28 19:26:40)

Hors ligne

#9 2017-05-29 08:19:41

adjaya
Membre
Lieu : Provence - Luberon
Inscription : 2006-09-05
Site Web

Re : Comment transfer du php d'un template html dans un _public.php ?

@ i_love_dc
Pourquoi veux-tu transférer tous le code dans _public.php?
Si comme je le suppose, c'est le fait d'avoir du php en dur dans ton template qui te gène (ce qui n'est pas vraiment l'idéal en effet), se serait déjà plus simple de créer juste un tpl qui pourrait se substituer à ce code php.
ce qui pourrait donner quelque chose comme

<tpl:RateItIf voted="0">
  <span>Notez cet article</span>
</tpl:RateItIf>

<tpl:RateItIf voted="1">
  <div class="item" vocab="http://schema.org/" typeof="Blog">
    <div class="rateit-title" property="name">{{tpl:EntryTitle encode_html="1"}}</div>
    <div class="note" property="aggregateRating" typeof="AggregateRating">
      {{tpl:lang Note:}} <span property="ratingValue">{{tpl:rateItNote}}</span> - {{tpl:lang Votes:}} <span property="ratingCount">{{tpl:rateItTotal}}</span>
      <meta property="bestRating" content="5">
      <meta property="worstRating" content="1">
    </div>
  </div>
</tpl:RateItIf>

Tu voie l'idée?


Photo, Art et Création Numérique : http://benoit-grelier.photo7.fr/

Hors ligne

#10 2017-05-29 08:54:51

i_love_dc
Membre
Inscription : 2007-07-13

Re : Comment transfer du php d'un template html dans un _public.php ?

Bonjour adjaya.

Je n'avais pas pensé à ta proposition ...
Donc si je regarde ton code, il faudrait créer une nouvelle balise de type block <tpl:RateItIf> dans le _public.php,  faire un nouveau template et le mettre en include, exemple : {{tpl:include src="rateitifinclude.html"}}, c'est bien ca?

- Edit -

Je tente de renseigner le _public.php :

$core->tpl->addBlock('RateItIf',array('tplAggregateRating','RateItIf'));
 
class tplAggregateRating
{
	public static function RateItIf($attr,$content)
	{
		$is = isset($attr['is']) ? trim($attr['is']) : '';
		$expr = self::testInExpr($is,'$idx');
		return
		'<?php $idx = $_ctx->posts->index()+1; if ('.$expr.'): ?>'.
		$content.
		'<?php endif; unset($idx); ?>';
	}
}

Évidement cela ne fonctionne pas :-(

.

Dernière modification par i_love_dc (2017-05-29 09:23:00)

Hors ligne

#11 2017-05-29 10:24:15

adjaya
Membre
Lieu : Provence - Luberon
Inscription : 2006-09-05
Site Web

Re : Comment transfer du php d'un template html dans un _public.php ?

essaye ca pour _public.php  avec le code donné en #9 pour le template

$core->tpl->addBlock('RateItIf',array('tplAggregateRating','RateItIf'));

class tplAggregateRating
{
  public static function RateItIf($attr,$content)
  {
    if (isset($attr['voted'])) {
      if(!$attr['voted']) {
        return
        '<?php if (empty($rateit_voted)) : ?>'.
        $content.
        '<?php endif; ?>';
      } else {
        return
        '<?php if (!empty($rateit_voted)) : ?>'.
        $content.
        '<?php endif; ?>';
      }
    }
  }
}

Dernière modification par adjaya (2017-05-29 12:10:01)


Photo, Art et Création Numérique : http://benoit-grelier.photo7.fr/

Hors ligne

#12 2017-05-29 10:43:56

i_love_dc
Membre
Inscription : 2007-07-13

Re : Comment transfer du php d'un template html dans un _public.php ?

J'ai ajouté au _public.php du thème :

$core->tpl->addBlock('RateItIf',array('tplAggregateRating','RateItIf'));

class tplAggregateRating
{
  public static function RateItIf($attr,$content)
  {
    if (isset($attr['voted'])) {
      if(!$attr['voted']) {
        return
        '<?php if (empty($rateit_voted) : ?>'.
        $content.
        '<?php endif; ?>';
      } else {
        return
        '<?php if (!empty($rateit_voted) : ?>'.
        $content.
        '<?php endif; ?>';
      }
    }
  }
}

Crée un nouveau template rateit.html :

<tpl:RateItIf voted="0">
  <span>Notez cet article</span>
</tpl:RateItIf>

<tpl:RateItIf voted="1">
  <div class="item" vocab="http://schema.org/" typeof="Blog">
    <div class="rateit-title" property="name">{{tpl:EntryTitle encode_html="1"}}</div>
    <div class="note" property="aggregateRating" typeof="AggregateRating">
      {{tpl:lang Note:}} <span property="ratingValue">{{tpl:rateItNote}}</span> - {{tpl:lang Votes:}} <span property="ratingCount">{{tpl:rateItTotal}}</span>
      <meta property="bestRating" content="5">
      <meta property="worstRating" content="1">
    </div>
  </div>
</tpl:RateItIf>
lol <!-- c'est pour vérifié l'affichage du template

dans le template post.html :

<tpl:rateIt type="post">
       <div class="rateit">{{tpl:rateItLinker}}</div>
               {{tpl:include src="rateitif.html"}}      
          </tpl:rateIt>
      </div>

Le "lol" s'affiche, donc le nouveau template fonctionne ...
Mais en ce qui concerne le _public.php, le code pour "notez ce message" (si notes/votes = 0) ou "notes : - votes : (si notes/votes = 1 et +), rien ne s'affiche.

.

Dernière modification par i_love_dc (2017-05-29 10:52:00)

Hors ligne

#13 2017-05-29 11:01:03

adjaya
Membre
Lieu : Provence - Luberon
Inscription : 2006-09-05
Site Web

Re : Comment transfer du php d'un template html dans un _public.php ?

Laisse tomber l'include et met tout le code dans post.html


Photo, Art et Création Numérique : http://benoit-grelier.photo7.fr/

Hors ligne

#14 2017-05-29 11:03:38

i_love_dc
Membre
Inscription : 2007-07-13

Re : Comment transfer du php d'un template html dans un _public.php ?

Je viens de m'apercevoir que dans le

$core->tpl->addBlock('RateItIf',array('tplAggregateRating','RateItIf'));

class tplAggregateRating
{
  public static function RateItIf($attr,$content)
  {
    if (isset($attr['voted'])) {
      if(!$attr['voted']) {
        return
        '<?php if (empty($rateit_voted) : ?>'.
        $content.
        '<?php endif; ?>';
      } else {
        return
        '<?php if (!empty($rateit_voted) : ?>'.
        $content.
        '<?php endif; ?>';
      }
    }
  }
}

il manquait une guillemet à '<?php if (empty($rateit_voted) : ?>'. et '<?php if (!empty($rateit_voted) : ?>'.
Je les est donc rectifié comme suit '<?php if (!empty($rateit_voted)) : ?>'. et '<?php if (!empty($rateit_voted)) : ?>'.

Il y a un resultat visible, mais que les votes/notes soient égales à 0 ou 1et + le message reste "Notez ce message".
On dirait que <tpl:RateItIf voted="1"> n'est pas pris en compte .

- EDIT -

J'ai viré l'include comme tu me l'a conseillé.
Collé le bout de code directement dans le post.html.
Rectifié le public.php avec les guillemets manquantes ...

Ça fonctionne !!!

Merci à vous, vous êtes des chefs !!!

J'ai également suggéré cette amélioration à nikrou dans le fil dédié du plugin Rate It
.

Dernière modification par i_love_dc (2017-05-29 13:23:10)

Hors ligne

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

Pied de page des forums

Sites map