Dotclear

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

Annonce

#1 2009-01-28 13:07:16

Mirovinben
M comme Mathusalem
Lieu : Dole (Jura)
Inscription : 2007-02-06
Site Web

OtherBlog, nouvelle version...

J'ai le plaisir de vous annoncer la mise à disposition de la v1.5.0 du plugin OtherBlog pour Dotclear v2.

Ce qui évolue :

    * possibilité de filtrer sur plusieurs catégories, soit à prendre en compte, soit à exclure.
    * possibilité d'afficher une invite pour lire la suite si seul l'extrait est demandé.

Toutes les infos, la doc (revue, corrigée et optimisée) et le fichier ZIP à télécharger ici.

Hors ligne

#2 2009-01-28 14:06:13

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

Re : OtherBlog, nouvelle version...

Hop ! Mis à jour sur mon site, où j'use et abuse avec grand plaisir de ce plugin in-dis-pen-sa-ble :)

Hors ligne

#3 2009-01-28 18:24:28

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

Re : OtherBlog, nouvelle version...

euh... j'ai un petit souci : le widget marche toujours très bien dans la sidebar, mais je ne parviens pas à utiliser la balise de template dans category.html. Ce code dans home.html fonctionne très bien :

<tpl:Widget id="mrvbOtherBlog">
              <setting name="title">Actualités</setting>
              <setting name="blogid">blog1,blog2,blog3,blog4</setting>
              <setting name="maxitems">3</setting>
              <setting name="formdate">%d/%m/%Y</setting>
              <setting name="formitem">%D% : %T%</setting>
</tpl:Widget>

mais rien n'apparait si je le mets dans category.html.

Actuellement en place sur mon site. J'ai cassé quelque chose ?

Hors ligne

#4 2009-01-29 10:52:43

Mirovinben
M comme Mathusalem
Lieu : Dole (Jura)
Inscription : 2007-02-06
Site Web

Re : OtherBlog, nouvelle version...

amalgame > Pardon pour le silence mais j'ai fait un malaise ce matin et ne suis pas encore tout à fait en état de répondre.

Le défaut disparait-il avec un retour à la v1.4.2 ?

Hors ligne

#5 2009-01-29 10:55:11

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

Re : OtherBlog, nouvelle version...

Je n'ai pas essayé avec le retour à la v1.4, je vais le faire et te tiendrai au courant.

Ne t'en fais pas ce n'est pas urgent, et repose-toi plutôt :)

pareil avec la v1.4.2

Dernière modification par Philippe (2009-01-29 11:42:26)

Hors ligne

#6 2009-01-29 16:57:55

Mirovinben
M comme Mathusalem
Lieu : Dole (Jura)
Inscription : 2007-02-06
Site Web

Re : OtherBlog, nouvelle version...

Quelque part ça me rassure que la v1.4.2 fasse ça aussi. Me demande si c'est pas ma requête à base de jointure sur les catégories. Requête ajoutée avec la v1.4.2. et enrichie (complexifiée ?) avec la v1.5.0.

Du coup je ne sais que faire. Je lance un appel aux sorciers pour m'aider.

Voici le contenu du fichier principal common.php, utilisé par les différentes routines et par le widget :

<?php
  # ============= 
  # script      : OtherBlog
  # version     : v1.5.0
  # maintenance : Mirovinben
  # mise a jour : 27/01/2009 16:00
  #
  # A partir d'un script pour DC1 par David Larlet, (http://www.biologeek.com/)
  # avec l'aide de Moe (forum Dotclear) pour rendre ce script independant
  # du type de base de donnees utilise grace au module dbLayer de Clearbricks
  # et de Dsls (forum Dotclear) pour son aide pour les jointures de table,
  # permettant de filtrer également a partir de tags et/ou de categories.
  #
  # ============= 
  # fonction OtherBlog();
  # ------------- 
  # Fonction interne utilisee par _public.php, interne.php et externe.php
  # qui affiche les derniers billets sous forme d'une liste (balises <ul><li>...</li></ul>)
  # en utilisant les parametres facultatifs suivants :
  #
  #   blogid    = identifiant(s) du/des blog(s) (separes par une virgule, si absent alors tous les blogs)
  #   category  = liste des categories (nom URLise) a filtrer pour le listage des billets
  #             - la virgule "," sert de separateur entre chaque element de la liste, 
  #             - si la liste est vide, alors toutes les categories sont prises en compte, 
  #             - NULL sera utilise pour lister les billets sans categorie,
  #             - "!" devant le nom d'une categorie l'exclut du listage.
  #   metatag   = mot-clé (tag / meta) permettant de n'afficher que les billets qui ont ce mot-clé
  #               (si absent, alors pas de filtre)
  #   maxitems  = nombre maximum de billets a lister
  #   formdate  = formatage de la date (syntaxe : voir lisezmoi.txt)
  #   formitem  = formatage de chaque item (syntaxe : voir lisezmoi.txt) 
  #   titlemax  = longueur maximum de chaque titre de billet ("0": pas de troncature)
  #   titlecut  = texte indiquant si le titre du billet a ete tronque
  #   noexcerpt = affiche un texte de remplacement si l'extrait est vide
  #   readmore  = affiche une invite pour lire la suite si seul l'extrait est prevu et s'il est non vide. 
  #
  /* valeurs par defaut : 
     'blogid'    => ' ',
     'category'  => '',
     'meta'      => '',
     'maxitems'  => '8',
     'formdate'  => '%d/%m/%Y %Hh%M',
     'formitem'  => '%D% : %B% - %T%',
     'titlemax'  => '0',
     'titlecut'  => '[…]',
     'noexcerpt' => '',
     'readmore'  => '',
  */
  #
  # Remarque : un parametre supplementaire est utilise en interne pour indiquer 
  # le mode de fonctionnement du plugin. Il peut prendre une des valeurs suivantes :
  # "widget", "template", "interne" ou "externe" (valeur par defaut : 'mode' => 'interne')
  #
  # ============= 

  function truncate($str, $max, $etc) 
  {
    if ($max > 0 and strlen($str) > $max) 
    {
      $str = substr($str, 0, $max);
      $espace = strrpos($str, " ");
      $str = htmlentities(substr($str, 0, $espace), ENT_QUOTES, 'UTF-8')." <span class=\"orbg-etc\">".$etc."</span>";
    } else {
      $str = htmlentities($str, ENT_QUOTES, 'UTF-8');
    }
    return $str;
  }
  
  function OtherBlog($attr)
  {
    $mode      = isset($attr['mode']) ? $attr['mode'] : "interne";
    $blogid    = isset($attr['blogid']) ? $attr['blogid'] : " ";
    $category  = isset($attr['category']) ? $attr['category'] : "";
    $metatag   = isset($attr['metatag']) ? $attr['metatag'] : "";
    $maxitems  = isset($attr['maxitems']) ? $attr['maxitems'] : "8";
    $formdate  = isset($attr['formdate']) ? $attr['formdate'] : "%d/%m/%Y %Hh%M";
    $formitem  = isset($attr['formitem']) ? $attr['formitem'] : "%D% : %B% - %T%";
    $titlemax  = isset($attr['titlemax']) ? $attr['titlemax'] : "0";
    $titlecut  = isset($attr['titlecut']) ? $attr['titlecut'] : "[…]";
    $noexcerpt = isset($attr['noexcerpt']) ? $attr['noexcerpt'] : "";
    $readmore  = isset($attr['readmore']) ? $attr['readmore'] : "";
    $tmp = str_replace(' ','',$blogid);
    if (strlen($tmp) > 0) {
      $blogs = explode(',',$tmp);
      $nbblogs = count($blogs);
    } else {
      $nbblogs = 0;
    }
    if ((strpos($formitem,'%t%') === FALSE) AND (strpos($formitem,'%T%') === FALSE)){$formitem .= '%T%';}
    $query  = ' SELECT P.post_id, P.post_url, P.post_title, P.post_dt, P.blog_id, P.cat_id, P.post_excerpt_xhtml, P.post_content_xhtml, P.post_meta FROM '.DC_DBPREFIX.'post P ';
    $filter = '';
    $catOK = '';
    $catKO = '';
    $tmp = str_replace(' ','',$category);
    if (strlen($tmp) > 0) {
      $cats = explode(',',$tmp);
      $nbcats = count($cats);
      $query  .= 'LEFT JOIN '.DC_DBPREFIX.'category C on C.cat_id = P.cat_id ';
      for($i = 0 ; $i < $nbcats ; $i++)
      {
        $cat = $cats[$i];
        if (substr($cat,0,1) == '!') {
          if ($cat == '!NULL') {
            $cat = 'P.cat_id is NOT NULL';
          } else { 
            $cat = 'C.cat_url!=\''.substr($cat,1).'\'';
          }
          if (strlen($catKO) == 0) {
            $catKO .= $cat;
          } else {
            $catKO .= ' AND '.$cat;
          }
        } else {
          if ($cat == 'NULL') {
            $cat = 'P.cat_id is NULL';
          } else {
            $cat = 'C.cat_url=\''.$cat.'\'';
          }
          if (strlen($catOK) == 0) {
            $catOK .=  $cat;
          } else {
            $catOK .= ' OR '.$cat;
          }
        }
      }
      if (strlen($catKO) > 0) {
        $filter .= ' AND ('.$catKO.')';
      };
      if (strlen($catOK) > 0) {
        $filter .= ' AND ('.$catOK.')';
      };
    }
    if (strlen($metatag) > 0) {
      $query  .= 'LEFT JOIN '.DC_DBPREFIX.'meta M on M.post_id = P.post_id and M.meta_type = \'tag\' ';
      $filter .= ' AND M.meta_id=\''.$metatag.'\'';
    }
    switch ($nbblogs) {
    case 0 : 
      $query .= ' WHERE P.post_status = 1 AND P.post_type = \'post\''.$filter.' AND P.post_password IS NULL';
      break;
    case 1 : 
      $query .= ' WHERE P.blog_id = \''.$blogs[0].'\' AND P.post_status = 1 AND P.post_type = \'post\''.$filter.' AND P.post_password IS NULL';
      break;
    default : 
      $txt = 'P.blog_id = \''.$blogs[0].'\'';
      for($i = 1 ; $i < $nbblogs ; $i++)
      {
        $txt = $txt.' OR P.blog_id = \''.$blogs[$i].'\'';
      }
      $query .= ' WHERE ('.$txt.') AND P.post_status = 1 AND P.post_type = \'post\''.$filter.' AND P.post_password IS NULL';
    }
    $query .= ' ORDER BY P.post_dt DESC LIMIT '.$maxitems;
    if ($mode == 'externe') {
      global $con;
      $res_post = $con->select($query);
    } else {
      global $core;
      $res_post = $core->con->select($query);
    }
    $p = "<ul class=\"orbg-list\">\n";
    while ($res_post->fetch())
    {
      $query = 
      ' SELECT  blog_url, blog_name
        FROM '.DC_DBPREFIX.'blog
        WHERE blog_id = \''.$res_post->f('blog_id').'\'';
      if ($mode == 'externe') {
        $res_blog = $con->select($query);
      } else {
        $res_blog = $core->con->select($query);
      }
      $blog_id = $res_post->f('blog_id');
      $blog_url = $res_blog->f('blog_url');
      $blog_name = htmlentities($res_blog->f('blog_name'), ENT_QUOTES, 'UTF-8');
      $post_url = $blog_url.'post/'.$res_post->f('post_url');
      $post_title = $res_post->f('post_title');
      $dat = strftime($formdate, strtotime($res_post->f('post_dt')));
      $post_excerpt = $res_post->f('post_excerpt_xhtml');
      if (strlen($post_excerpt) > 0) {
        $ext = $post_excerpt;
        if ((strpos($formitem,'%C%') === FALSE) AND (strlen($readmore) > 0)) {
          $ext .= "<p class=\"orbg-readmore\"><a href=\"".$post_url."\">".$readmore."</a></p>";
        }
      } else {
        $ext = $noexcerpt;
      }
      $post_content = $res_post->f('post_content_xhtml');
      $p .= "<li class=\"orbg-item blog-$blog_id\">";
      $t = "<span class=\"orbg-post\">".truncate($post_title, $titlemax, $titlecut)."</span>";
      $T = "<a class=\"orbg-postlink\" href=\"".$post_url."\">".truncate($post_title, $titlemax, $titlecut)."</a>";
      $b = "<span class=\"orbg-blog\">".$blog_name."</span>";
      $B = "<a class=\"orbg-bloglink\" href=\"".$blog_url."\">".$blog_name."</a>";
      $d = "<span class=\"orbg-date\">".$dat."</span>";
      $e = "<div class=\"orbg-excerpt\">".$ext."</div>";
      $c = "<div class=\"orbg-content\">".$post_content."</div>";
      $tmp = $formitem;
      $tmp = str_replace('%t%', $t, $tmp);
      $tmp = str_replace('%T%', $T, $tmp);
      $tmp = str_replace('%b%', $b, $tmp);
      $tmp = str_replace('%B%', $B, $tmp);
      $tmp = str_replace('%D%', $d, $tmp);
      $tmp = str_replace('%E%', $e, $tmp);
      $tmp = str_replace('%C%', $c, $tmp);
      $p .= $tmp;
      $p .= "</li>\n";
    }
    $p .= "</ul>";
    echo $p;
  }
?>

La partie qui traite des catégories se situe entre les lignes #092 et #133.

Je suis largement dans la semoule sur ce coup, surtout que ça marche en widget dans home.html ainsi qu'avec la fonction externe (pour lister dans une page en dehors du blog)...

Hors ligne

#7 2009-01-29 17:27:54

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

Re : OtherBlog, nouvelle version...

Je crois que ça ne peut pas être une question de requête, le même widget dans la sidebar fonctionne parfaitement sur la page. C'est un souci avec la balise de template, pour ce que j'en comprends.

Hors ligne

#8 2009-01-30 08:10:23

Mirovinben
M comme Mathusalem
Lieu : Dole (Jura)
Inscription : 2007-02-06
Site Web

Re : OtherBlog, nouvelle version...

Si je comprends bien tu a testé deux méthodes...

1- dans la sidebar tu utilises le widget de façon conventionnelle (positionné via le module "widgets de présentation" avec les paramètres à saisir comme le décrit cette page de ma doc et ça fonctionne dans tous les cas.

2- ailleurs via le marqueur <tpl:Widget id="mrvbOtherBlog"> dans une page *.html du thème. et il ne s'affiche pas pour category.html...

C'est bien ça ?

Si c'est ça alors, je pressens un pb de compatibilité entre <tpl:Widget> et OtherBlog... Ce qui est gênant car je ne sais pas si c'est de ma faute (et où ?) ou si c'est une limitation d'usage de <tpl:Widget>...

Et ça ne le fait chez toi que pour category.html ?.

Il va sûrement me falloir faire des tests plus complets chez moi... et peut-être remettre au goût du jour {{tpl:ListNewPostOtherBlog}}... Bof... crotte et zut !

Hors ligne

#9 2009-01-30 09:17:22

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

Re : OtherBlog, nouvelle version...

Mirovinben a écrit :

Si je comprends bien tu a testé deux méthodes...
C'est bien ça  ?

C'est ça, la balise <tpl:Widget> du plugin ne fonctionne pas dans category.html, mais tout le reste va bien, on ne peut donc pas dire que ce soit grave :)

Dans post.html ça ne marche pas non plus

Dernière modification par Philippe (2009-01-30 11:42:22)

Hors ligne

#10 2009-01-31 16:36:11

Mirovinben
M comme Mathusalem
Lieu : Dole (Jura)
Inscription : 2007-02-06
Site Web

Re : OtherBlog, nouvelle version...

Bon, en fait après avoir fait des essais complets, j'ai constaté une chose très bête : par défaut le widget ne s'affiche qu'en page d'accueil...

Donc, pour que <tpl:Widget id="mrvbOtherBlog"> s'affiche ailleurs qu'en home, il faut forcer la valeur adhoc :

<tpl:Widget id="mrvbOtherBlog">
              <setting name="title">Actualités</setting>
              <setting name="blogid">blog1,blog2,blog3,blog4</setting>
              <setting name="maxitems">3</setting>
              <setting name="formdate">%d/%m/%Y</setting>
              <setting name="formitem">%D% : %T%</setting>
              <setting name="homeonly">0</setting>
</tpl:Widget>

Je m'en veux de ne pas y avoir pensé plus tôt...

Du coup j'ai modifié la doc de <tpl:Widget id="mrvbOtherBlog">

Dernière modification par Mirovinben (2009-01-31 16:59:00)

Hors ligne

#11 2009-01-31 17:04:22

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

Re : OtherBlog, nouvelle version...

\o/\o/\o/

C'est far-pait !

Hors ligne

#12 2009-02-01 03:38:49

Mirovinben
M comme Mathusalem
Lieu : Dole (Jura)
Inscription : 2007-02-06
Site Web

Re : OtherBlog, nouvelle version...

Une question me vient maintenant à l'esprit :
- comment détecter l'origine de l'utilisation d'un widget, c'est à dire différencier si utilisé via le gestionnaire de widgets en mode wysiwyg ou via le <tpl:Widget id="xxx"> ?

question complémentaire :
- comment savoir si le widget est en sidebar ou dans content ?

S'il y avait moyen de le savoir, je pourrais inverser la valeur par défaut de <setting name="homeonly"> uniquement dans le cas où le <tpl:Widget id="xxx"> est dans content.

Bon, maintenant faut dire que ce n'est pas bien gênant à partir du moment où le comportement actuel est documenté.

Hors ligne

#13 2009-02-01 22:39:24

annso
Responsable de la machine à Twix
Lieu : Lyon
Inscription : 2006-03-05
Site Web

Re : OtherBlog, nouvelle version...

J'ai un message d'insulte visible ici

Parse error: syntax error, unexpected '{' in /homepages/16/d223994261/htdocs/blog-dc2/plugins/otherblog/externe.php on line 56

(qui ne vient pas de la dernière version, ça buguait aussi avec 1.4, mais j'ai mis à jour, dès fois que).

Je ne comprends pas trop car j'ai recopié le code donné dans doc (qui comporte au passage une petite faute: il manque une accolade ouvrante après le  if (!defined('DC_ROOT')) )

Hors ligne

#14 2009-02-02 07:39:35

Mirovinben
M comme Mathusalem
Lieu : Dole (Jura)
Inscription : 2007-02-06
Site Web

Re : OtherBlog, nouvelle version...

annso, merci de m'avoir signalé l'oubli d'une accolade ouvrante dans le deuxième exemple de cette page de la doc. J'ai corrigé.

Par contre je ne vois pas ce qui bogue au niveau de la ligne 56 de externe.php. J'ai bien mon compte d'accolades dans le fichier et pas de message d'erreur chez moi (site portail) qui utilise 3 fois la fonction : deux fois ici et 1 fois ...

Cette fonction extOtherBlog, tu t'en sers bien en dehors des pages du blog ? Si tu veux de servir d'OtherBlog dans une page connexe (avec extension Pages ou Related), il faut utiliser la fonction intOtherBlog...

Hors ligne

#15 2009-02-02 09:27:57

annso
Responsable de la machine à Twix
Lieu : Lyon
Inscription : 2006-03-05
Site Web

Re : OtherBlog, nouvelle version...

je veux m'en servir à la racine de mon site, avec dotclear installé dans le répertoire dotclear/ et les plugins installés ailleurs (pour faire plus propre) dans blog-dc2/plugins/

J'ai donc le code suivant dans mon index.php de la racine:

<?php
  if (!defined('DC_ROOT'))
    define('DC_ROOT', dirname(__FILE__).'/dotclear');

  $attr = array(
	'blogid'	=> 'default',
    'maxitems'  => '5',
    'formdate'  => '%d/%m/%Y',
    'formitem'  => '%T%',
  );

  include_once(DC_ROOT.'/../blog-dc2/plugins/otherblog/externe.php');
  extOtherBlog($attr);
?>

Je ne vois vraiment pas ce qui ne va pas. A tout hasard, je viens d'essayer d'utiliser la fonction interne, mais ça me met une erreur dans common.php.

Hors ligne

#16 2009-02-02 10:26:10

Moe
Responsable du mini-bar
Lieu : France
Inscription : 2004-09-19
Site Web

Re : OtherBlog, nouvelle version...

annso : tu as activé PHP 5 à la racine de ton site ?

Hors ligne

#17 2009-02-02 10:29:26

annso
Responsable de la machine à Twix
Lieu : Lyon
Inscription : 2006-03-05
Site Web

Re : OtherBlog, nouvelle version...

erf pendant un instant j'ai cru que c'était ça, mais oui, c'est bien activé...

Hors ligne

#18 2009-02-02 10:34:43

Moe
Responsable du mini-bar
Lieu : France
Inscription : 2004-09-19
Site Web

Re : OtherBlog, nouvelle version...

Tu peux re-vérifier car le message d'erreur indique le contraire. Sinon place un fichier à la racine pour afficher phpinfo(), tu pourras voir la version de PHP.

Hors ligne

#19 2009-02-02 10:40:01

annso
Responsable de la machine à Twix
Lieu : Lyon
Inscription : 2006-03-05
Site Web

Re : OtherBlog, nouvelle version...

ma propre bétise me surprend parfois: le .htaccess était bien là, avec la bonne ligne. Mais il y avait un petit # devant qui changeait tout...

Mea culpa... ça marche très bien....

Hors ligne

#20 2009-02-02 10:44:39

Moe
Responsable du mini-bar
Lieu : France
Inscription : 2004-09-19
Site Web

Re : OtherBlog, nouvelle version...

Il n'y a que ceux qui ne font rien qui ne se trompent jamais. ;)

Hors ligne

#21 2009-02-02 12:05:21

Mirovinben
M comme Mathusalem
Lieu : Dole (Jura)
Inscription : 2007-02-06
Site Web

Re : OtherBlog, nouvelle version...

Et me voilà soulagé !...

Du coup, tout ça me pousse à créer une mini-FAQ qui peut rendre bien des services.

Hors ligne

#22 2009-02-02 12:08:11

Mirovinben
M comme Mathusalem
Lieu : Dole (Jura)
Inscription : 2007-02-06
Site Web

Re : OtherBlog, nouvelle version...

Par contre il y a encore un blème....

Ca sent le DC_ROOT mal renseigné... Annso, tu confirmes ?

Hors ligne

#23 2009-02-02 13:19:56

annso
Responsable de la machine à Twix
Lieu : Lyon
Inscription : 2006-03-05
Site Web

Re : OtherBlog, nouvelle version...

oui oui, je suis allée manger sans avoir eu le temps de finir de corriger mes bétises. Je regarderais ça ce soir.

Hors ligne

#24 2009-02-07 04:15:19

Mirovinben
M comme Mathusalem
Lieu : Dole (Jura)
Inscription : 2007-02-06
Site Web

Re : OtherBlog, nouvelle version...

Suite à signalement d'un utilisateur constatant certains liens mal formés chez lui, mise en place d'un correctif pour formater correctement les URL des billets qui contiennent des guillemets dans leur titre...

Mise en ligne de la v1.5.1 d'OtherBlog.

Hors ligne

#25 2009-05-22 09:16:00

Mirovinben
M comme Mathusalem
Lieu : Dole (Jura)
Inscription : 2007-02-06
Site Web

Re : OtherBlog, nouvelle version...

OtherBlog passe en v1.5.2.
J'ai ajouté la possibilité d’exclure un ou plusieurs blogs de la liste des blogs. A présent, il suffit de faire précéder les idents des blogs à exclure d'un point d'exclamation.

Hors ligne

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

Pied de page des forums

Sites map