[plugin] plxornament

Bonjour,

J'ai créé un plugins pour avoir un champs complémentaire à la saisie d'un article pour pouvoir lier une illustration (image) à un article.

Utilisant le theme shaken adapté par hamtaro
(theme disponible ici http://forum.pluxml.org/viewtopic.php?id=2391)
j'ai modifié ce theme pour ne plus utiliser le chapo mais mon nouveau champs (nommé ornament)

http://www.ologram.fr/?static1/projets

J'aimerais ajouter un bouton pour aider la saisie du lien vers l'image, si quelqu'un veux bien me donner un coup de main.
«1

Réponses

  • Concernant le thème, j'ai remplacé :

    <?php if ($plxShow->plxMotor->plxRecord_arts->f('chapo') != '') {
    $thumbID = $plxShow->plxMotor->plxRecord_arts->f('chapo'); ?>

    par

    <?php if ($plxShow->plxMotor->plxRecord_arts->f('ornament') != '') {
    $thumbID = $plxShow->plxMotor->plxRecord_arts->f('ornament'); ?>

    Dans le fichier home.php
  • Sympa l'idée du champs supplémentaire mais est-ce qu'il n'aurait pas été plus simple d'utiliser timthumb qui prend la première image de l'article pour en faire la vignette ?

    J'ai un string de l'array

  • Le thème utilise déjà timbthumb, mais cela permet d'avoir une image associé à l'article
  • @ologram, grand merci j'attendais ce plugin depuis des mois. :P

    @flipflip : si tu veux un slider cliquable vers l'article (par exemple), c'est tout de même plus simple avec un champ de donnée supplémentaire.
    J'aimerais ajouter un bouton pour aider la saisie du lien vers l'image, si quelqu'un veux bien me donner un coup de main.
    Pourquoi, ce n'est pas utile, car il s'agit d'un champ d'information de plus comme le custom-field de Wordpress. :)

    Il pourrait servir de source d'information pour autre chose que l'url d'une image.
    Genre le prix de vente d'un produit, l'url d'un site pour une annuaire, une css différente sans changer de template, un script jquery spécifique à un article, un sous-titre, un info disant qu'un article fait partie d'une série d'article, etc ...

    STP Ologram, ne change rien. :P
  • Au fait, Ologram sur un thème quel code je dois mettre ?
    <?php $plxShow->callHook('ornament') ?> ou autre chose ? :)

    Un aide à la flipflip, ça serait bien !! ;)
  • Le code que tu cite permet de récupérer le lien vers l'image.
    Après, libre à toi de la mettre comme tu veux dans ton template (balise img pour insérer une image ou lightbox...)
  • Merci. ;) Je voulais juste savoir si c'était le bon code. Pour son utilisation, ça devrait aller. :D

    Je te fais un petit retour. Le code HTML généré est coupé, je n'obtient que l'url du site.
    En résumé ça donne : http://www.monsite.com/ et non http://www.mon-site.com/data/images/mon-images.jpg.

    Je l'ai formaté ainsi :
    <img src="<?php $plxShow->callHook('ornament') ?>"  alt="<?php $plxShow->artTitle(''); ?>">
    
  • Bloody a écrit:
    Merci. ;) Je voulais juste savoir si c'était le bon code. Pour son utilisation, ça devrait aller. :D

    Je te fais un petit retour. Le code HTML généré est coupé, je n'obtient que l'url du site.
    En résumé ça donne : http://www.monsite.com/ et non http://www.mon-site.com/data/images/mon-images.jpg.

    Je l'ai formaté ainsi :
    <img src="<?php $plxShow->callHook('ornament') ?>"  alt="<?php $plxShow->artTitle(''); ?>">
    
    il faut mettre :
    <?php echo $plxShow->plxMotor->plxRecord_arts->f('ornament'); ?>
    
  • BloodyBloody Member
    juillet 2011 modifié
    Merci Grenouille !! ;)

    As-tu remarqué que l'attribut "alt" n'était pas généré ? :/
  • oui en fait jetais un peu rapide
    reprend ta balise <img src=" et met ici le code que j'ai donné plus haut, puis tu rajoute le "alt" comme tu avait fait
    il faut juste que tu mette le bon chemin de ton image dans le champ ornament,
  • BloodyBloody Member
    juillet 2011 modifié
    Merci Grenouille. ;)
    J'avais testé cette manière, mais j'avais laissé mon image en chapô et je ne comprenais pas pourquoi j'avait 2 images générées. :D
    J'ai enfin pu y ajouter ma class css.

    Pour ne pas avoir à recharger une image et reprendre mes anciens articles, j'ai ajouté une condition de plus, comme suit :
    <?php ob_start(); 
    	$plxShow->artContent($chapo=true);
    	$content = ob_get_clean();
    	$masque = '#<img.+src="(.+?)"#i'; preg_match($masque, $content, $resultats);
    	$extension = pathinfo($resultats[1], PATHINFO_EXTENSION); ?>
                        
    	<?php if($extension['extension'] == ('jpg'||'jpeg'||'png'||'gif')) : ?>
    							
    
    <a href="<?php $plxShow->artUrl($type='relatif'); ?>" rel="bookmark" title="Lien vers <?php $plxShow->artTitle(''); ?>">        
    <img src="<?php $plxShow->template(); ?>/thumb.php?src=<?php echo $resultats[1]; ?>&w=400&h=150&zc=1&q=100" alt="<?php $plxShow->artTitle(''); ?>" width="400px" height="150px" class="thumbnail-400-150" />
    </a>					
    <?php else : ?>
    
    <a href="<?php $plxShow->artUrl($type='relatif'); ?>" rel="bookmark" title="Lien vers <?php $plxShow->artTitle(''); ?>">        
    <img src="<?php echo $plxShow->plxMotor->plxRecord_arts->f('ornament'); ?>"  alt="<?php $plxShow->artTitle(''); ?>" width="400px" height="150px" class="thumbnail-400-150">
    </a>
    
    <?php endif; ?>
    
    Résolu pour moi. :)
  • Ce plugin est vraiment excellent et le travail tout simplement génial car du coup ça permet de faire des articles une vrai gestion d'annonce.

    En revanche ce qui serait un vrai plus cela serait de remplacer le champ d'url de l'image par un boutn appelant le gestionnaire de média, c'est juste pour l'ergonomie.
    Si pour tout ceux qui sont ici cela ne posera aucun problème, pour un utilisateur lambda c'est plus complexe ;)

    Et encore merci pour cette fonction ! ! !
  • Bonjour,

    Petite remarque à ne pas prendre mal mais je ne comprends pas trop l'intérêt de ce plugin : le châpo ne permet-il pas directement de faire ça, surtout si on utilise plxToolbar qui permet d'importer une image directement depuis le gestionnaire de médias) ??? :/
  • Jerry Wham es-tu utilisateur de Wordpress ? :)

    Ce plugin ne sert pas que pour image. Pour moi, c'est un champ d'information supplémentaire qui associé a un article. Niveau usage, je te fais un C/C de ce que j'ai dis plus haut. ;)
    Il pourrait servir de source d'information pour autre chose que l'url d'une image.
    Genre le prix de vente d'un produit, l'url d'un site pour une annuaire, une css différente pour un article sans changer de template, un script jquery spécifique à un article, un sous-titre, un info disant qu'un article fait partie d'une série d'article, etc ...
    Ce plugin permet de placer n'importe où dans une page article (et pas seulement le chapô) une information.

    En tant que codeur, tu verras vite les possibilités d'un tel plugin. L'idéal serait que ce plugin permette d'ajouter pas un seul mais plusieurs champs. Pour l'instant, j'ai modifié le plugin pour avoir 2 champs d'info en bas de mes articles, coté admin.

    Alors si ça te dis de le modifier ? Je suis preneur :P
  • @Bloody : Merci pour ta réponse. Je n'avais pas bien compris. Il faut que je teste pour me rendre compte. Et pour répondre à ta question, non je n'utilise pas wordpress. Trop l'usine à gaz pour ce que j'attends d'un CMS (et c'est pour ça que j'aime bien pluxml).
    Si je cherche des fonctionnalités autres, je préfère utiliser un framework (comme Yii par exemple ou Cakephp). J'ai pas encore eu la patience de me plonger dans la doc de wordpress pour en tirer la substantifique moelle (ouh, ça me rappelle mes années lycée tout ça... :lol: )
  • danielsandanielsan Member
    août 2011 modifié
    ben moi j'aime bien cette idée d'avoir le bouton qui va bien juste à côté du champ qui va bien :D

    Pour cela, il y a quelques petits trucs:
    1/ plxtoolbar s'insère automatiquement avant un textarea ( via une fonction javascript )
    2/ les nouveaux champs se trouvent en dehors des balises fieldset
    3/ plxtoolbar doit savoir où insérer l'image

    Pour se faire:
    1/ dans plxornament.php:
    remplacez
    echo '<?php plxUtils::printInput("ornament",plxUtils::strCheck($ornament),"text","66-255"); ?>';
    
    par
    echo '<?php plxUtils::printArea("ornament",plxUtils::strCheck($ornament),"35","1","",""); ?>';
    
    cela va insérer un textarea plutôt qu'un input, qui aura pour conséquence d'insérer automatiquement le bandeau plxtoolbar avant

    2/ dans core/admin/article.php
    déplacez
    <?php eval($plxAdmin->plxPlugins->callHook('AdminArticleContent')) ?>
    
    dans le fieldset ( je trouve qu'il a une place plus logique ici ... )

    3/ dans plugin/plxtoolbar/medias.php
    # Recuperation de l'id de l'éditeur appelant
    $editor = (isset($_GET['id']) AND in_array($_GET['id'], array('content', 'chapo'))) ? $_GET['id'] : die;
    
    rajoutez ornament dans le tableau
    # Recuperation de l'id de l'éditeur appelant
    $editor = (isset($_GET['id']) AND in_array($_GET['id'], array('content', 'chapo', 'ornament'))) ? $_GET['id'] : die;
    
    ben ça à l'air de marcher chez moi ... :P et chez vous ?

    Et si vous ne souhaitez avoir que le bouton image, à l'étape 1/ remplacez par:
    echo '<?php plxUtils::printInput("ornament",plxUtils::strCheck($ornament),"text","66-255"); ?>';
    			echo '<input class="media" type="button" onclick="plxToolbar.openPopup(\'../../plugins/plxtoolbar/medias.php?id=ornament\',\'Médias\',\'750\',\'580\');return false;" title="Gestionnaire de médias">';
    
    ( ça insère un input et rajoute juste le bouton qui va bien à côté du champ qui va bien :P )


    Cordialement,
    _____
    D.San
  • Merci danielsan, ca marche nickel.

    2 petites "améliorations" :

    - j'ajouterais un value="Explorer" dans ton input type="button"

    - comment peut-on ne récupérer que l'url de l'image plutôt que le code complet <img src="url_de_l_image"> dans la zone de texte car il peut être utile de maitriser les arguments de la balise (ajout d'une classe, etc...) ?

    Merci
  • danielsandanielsan Member
    septembre 2011 modifié
    de rien, cool de voir que c'est utilisé ;)

    les modifs que tu souhaites concernent donc le plugin plxToolbar si je comprend bien ?

    Je ne vois pas ce qui mérite d'être automatisé autre que l'attribut alt ?
    Tu peux préciser ton cas de figure ? Il y a peut-être un autre moyen ... ?

    Sinon, pour le rajout de "explorer", on peut aussi passer par le CSS ;)
    dans plugins/plxornament/plxornament.php, rajoute la class ornament à l'input type button:
    <input class="media ornament" type="button" onclick="plxToolbar.openPopup(\'../../plugins/plxtoolbar/medias.php?id=ornament\',\'Médias\',\'750\',\'580\');return false;" title="Gestionnaire de médias">
    
    et dans plugin/plxtoolbar/plxtoolbar/style.css, rajoute:
    input.media.ornament { width: 22px; height: 22px; margin: 0; padding: 0; border: 0px; outline:none; background: url(img/media.png) no-repeat; border: none; padding: 2px 4px; }
    
    et ça fera un beau bouton avec l'icone d'insertion d'image :P

    Cordialement,
    _____
    D.San
  • Bien vu pour le bouton ! Merci.

    Pour mon autre question (c'est effectivement peut-être une amélioration de plxtoolbar):

    Lorsque j'insère une image via le gestionnaire des médias, il insère dans la zone de texte <img src="url_de_l_image" />. Donc le code : <?php echo $plxShow->plxMotor->plxRecord_arts->f('ornament'); ?> retourne <img src="url_de_l_image" />.
    Or, j'ai besoin d'obtenir <img src="url_de_l_image" alt="texte" class="class" />.

    Donc ce que j'aimerais c'est que lorque j'insère une image, le gestionnaire colle seulement l'url de l'image (sans la balise <img>) pour que je puisse utiliser le code <img src="<?php echo $plxShow->plxMotor->plxRecord_arts->f('ornament'); ?>" alt="texte" class="class"> et contrôler manuellement (et pas automatiquement justement) les classes et textes alternatifs en fonction des pages.
  • danielsandanielsan Member
    septembre 2011 modifié
    ah ouais, donc en gros:
    1/ un champ pour une image associée à l'article ( ornament )
    2/ un bouton pour ouvrir le gestionnaire de média ( toolbar )
    3/ lorsqu'on sélectionne l'image voulue, ça n'insère que l'url de l'image ( gestionnaire media )
    4/ et la moulinette dans le template ...

    faudrait rajouter une nouvelle fonction toolbar appelée par un nouveau bouton
    ou approfondir le plugin ornament
    ( mais je ne vois pas pour l'instant, et surtout n'ai pas le temps )

    j'ai bien trouvé un truc,
    mais ça agit sur l'ensemble des boutons d'insertion d'image,
    tu perdras ainsi cette fonctionnalité,
    je la déconseille ...

    si tu veux absolument savoir, ;)
    dans plugins/plxtoolbar/medias.php ( script qui ouvre et formate la fenêtre de gestionnaire des médias ),
    le bloc ci-dessous gère le formatage de ce qui est inséré ...
    if(type=='1') { // 1 == images, 0 = documents
    			if(p_src!='') {
    				return alignStart+'<a href="'+basename(p_href)+'"'+p_title+p_rel+p_class+'><img src="'+basename(p_src)+'" alt="" /></a>'+alignEnd;
    			} else {
    				return alignStart+'<img src="'+basename(p_href)+'" alt="" />'+alignEnd;
    			}
    		} else {
    			return alignStart+'<a href="'+basename(p_href)+'"'+p_title+p_rel+p_class+'>'+basename(p_href)+'</a>'+alignEnd;
    		}
    
    mais bon, ce n'est pas la bonne solution selon moi car:
    lorsqu'on insère une image avec le gestionnaire, ça rajoute déjà alt="" ( pas chez toi ? ),
    dans mon template, j'encadre l'appel du plugin ornament dans un div
    <div class="ornament">
    	<?php if($plxShow->plxMotor->plxRecord_arts->f('ornament')): ?>
    		<?php echo $plxShow->plxMotor->plxRecord_arts->f('ornament'); ?>
    	<?php endif; ?>
    </div>
    
    pour atteindre ladite image via le css
    div#section div.ornament img{ ... }
    
    l'attribut alt doit normalement être propre à l'image,
    je le rajoute donc aussi manuellement.

    Cordialement,
    _____
    D.San
  • Merci pour les infos. Comme j'appelle mes images à différents endroits, et que je souhaite gérer aussi les attributs width et height, que mon attribut alt peut changer aussi en fonction de la page, je voudrais vraiment avoir cette possibilité.

    Je me risque à une modif de plxtoolbar :

    Dans medias.php :
    ligne 110 - ajout d'une variable (p_editor) à la fonction formatHTML :
    function formatHTML(p_editor,p_href, p_src, type) {
    
    ligne 130 - insertion d'une condition
    if(p_editor!='ornament') {
    
    ligne 138 - fin de la condition
    } else {
    		return alignStart+''+basename(p_href)+''+alignEnd;
    	  }
    
    ligne 268 à 269 - on remplace :
    echo '<a onclick="window.opener.plxToolbar.insert(\''.$editor.'\',formatHTML(\''.$v['path'].'\', \'\',\''.($_SESSION['medias']==$plxAdmin->aConf['images']).'\'),\'\');self.close();return false;" title="'.plxUtils::strCheck($v['name']).'" href="javascript:void(0)">'.plxUtils::strCheck($v['name']).'</a><br />';
    	if($v['thumb']) {
    		echo '<a onclick="window.opener.plxToolbar.insert(\''.$editor.'\',formatHTML(\''.$v['path'].'\', \''.plxUtils::thumbName($v['path']).'\',\''.($_SESSION['medias']==$plxAdmin->aConf['images']).'\'),\'\');self.close();return false;" title="'.L_MEDIAS_ADD.' '.L_MEDIAS_THUMB.' : '.plxUtils::strCheck($v['name']).'" href="javascript:void(0)">'.L_MEDIAS_THUMB.'</a> : '.$v['thumb']['infos'][0].' x '.$v['thumb']['infos'][1]. ' ('.plxUtils::formatFilesize($v['thumb']['filesize']).')';
    	}
    
    par
    echo '<a onclick="window.opener.plxToolbar.insert(\''.$editor.'\',formatHTML(\''.$editor.'\',\''.$v['path'].'\', \'\',\''.($_SESSION['medias']==$plxAdmin->aConf['images']).'\'),\'\');self.close();return false;" title="'.plxUtils::strCheck($v['name']).'" href="javascript:void(0)">'.plxUtils::strCheck($v['name']).'</a><br />';
    	if($v['thumb']) {
    		echo '<a onclick="window.opener.plxToolbar.insert(\''.$editor.'\',formatHTML(\''.$editor.'\',\''.$v['path'].'\', \''.plxUtils::thumbName($v['path']).'\',\''.($_SESSION['medias']==$plxAdmin->aConf['images']).'\'),\'\');self.close();return false;" title="'.L_MEDIAS_ADD.' '.L_MEDIAS_THUMB.' : '.plxUtils::strCheck($v['name']).'" href="javascript:void(0)">'.L_MEDIAS_THUMB.'</a> : '.$v['thumb']['infos'][0].' x '.$v['thumb']['infos'][1]. ' ('.plxUtils::formatFilesize($v['thumb']['filesize']).')';
    	}
    
    Ca fonctionne chez moi : ca n'insère que l'URL.
    Dites-moi ce que vous en penser.
  • ologramologram Member
    mai 2012 modifié
    Je suis en train de modifier mon plugins pour ajouter différentes petites choses.
    Par contre, est-ce que quelqu'un peux m'aider, j'aimerai ajouter un hook dans le moteur de pluxml.

    La fonction où j'aimerai ajouter un hook est lastArtList. actuellement il existe le hook plxShowLastArtList, mais il n'en existe pas pour pouvoir ajouter des variables.

    J'ai donc ajouté à la fin de la fonction une ligne (ligne 842):
    if(eval($this->plxMotor->plxPlugins->callHook('plxShowLastArtListVar'))) return;
    

    Ensuite dans mon plugins, j'ai ajouté :
    	public function plxShowLastArtListVar() {
    			$row = str_replace('#art_ornament',$art['ornament'], $row);
            }
    

    J'ai du louper quelque chose.
  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour

    pour injecter du code php au niveau du hook à partir de ton plugin, il faut utiliser cette syntaxe
    public function plxShowLastArtListVar() {
    	echo "<?php $row = str_replace('#art_ornament',$art['ornament'], $row); ?>";
    }
    

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • ologramologram Member
    Merci pour ton coup de main,

    Y'avais aussi \ à mettre avant les $ et cela donne :
    public function plxShowLastArtListVar() {
    echo "<?php     \$row = str_replace('#art_ornament',\$art['ornament'], \$row); ?>";
    }	
    
  • StéphaneStéphane Member, Former PluXml Project Manager
    exact, et si tu veux alléger le code pour ne pas te prendre la tete avec les \
    public function plxShowLastArtListVar() {
       echo '<?php  $row = str_replace("#art_ornament",$art["ornament"], $row); ?>';
    }
    

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • ologramologram Member
    merci ;-)

    Comment fais t'on pour demander l'ajout du Hook dans la prochaine version de pluxml ?
  • StéphaneStéphane Member, Former PluXml Project Manager
    tu me fais un gros chèque approvisionné avec plein de zéro :D


    suffit de me dire (forum ou par mail directement) où tu veux un hook, pourquoi (pour que je comprenne ce qui justifie l'ajout du hook). Apres si c'est vraiment justifié je le rajouterai.

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Stéphane a écrit:
    tu me fais un gros chèque approvisionné avec plein de zéro :D

    Arf, je me doutais bien qu'il était vénal :D
  • ologramologram Member
    Merci Stéphane,

    Pour le hook, c'est dans le fichier class.plx.show.php,
    public function lastArtList
    ...
    $row = str_replace('#art_nbcoms',$art['nb_com'], $row);
    if(eval($this->plxMotor->plxPlugins->callHook('plxShowLastArtListVar'))) return;
    # On genère notre ligne
    echo $row;
    

    Cela permet d'ajouter dans un plugins des modifications sur les variables utilisables par la fonction lastArtList.
  • ologramologram Member
    mai 2012 modifié
    Je travaille toujours sur le plugins, cette fois ci, j'essaye d'ajouter l'image ornament dans le flux RSS.

    J'ai donc ajouté à la ligne 203 du fichier class.plx.feed.php
    $entry .= "\t\t".'<media:content xmlns:media="http://search.yahoo.com/mrss/" type="image/png" width="305" height="230" url="http://www.site.com/'.plxUtils::strCheck($this->plxRecord_arts->f('ornament')).'">'."\n";
    $entry .= "\t\t".'<media:description>'.plxUtils::strCheck($this->plxRecord_arts->f('title')).'</media:description></media:content>'."\n";
    

    le fil généré parait correct.

    Maintenant, j'aimerai basculer ce code dans un hook nommé plxFeedArticleItem de mon plugins.

    J'ai donc mis ceci à la ligne 203 du fichier class.plx.feed.php en remplacement de mon code
    # Hook plugins
    if(eval($this->plxMotor->plxPlugins->callHook('plxFeedArticleItem'))) return;
    

    mais ca ne marche pas ;-( même en ayant laisser la fonction vide dans mon plugins, j'ai le message :
    Fatal error: Call to a member function callHook() on a non-object in class.plx.feed.php on line 226
Connectez-vous ou Inscrivez-vous pour répondre.