PluXml.org

Blog ou CMS à l'Xml

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

#51 25/01/2016 17:10:41

Francis
Membre
Inscription : 19/11/2011
Messages : 407
Site Web

Re : [SPXSHORTCODES] environnement pour shortcodes

Lorsqu'un shortcode est utilisé à partir d'un éditeur comme CKEditor, il est entouré de balises <p> et </p> qu'il faut enlever si le shortcode génère une balise <div> par exemple, sinon le HTML n'est plus valide.

Le préfixe -p- devant le nom du shortcode enlève ces balises p, mais ça ne fonctionne pas bien si le shortcode possède un contenu sur plusieurs lignes, encadré par [-p-nomdushortcode] et [/-p-nomdushortcode].

Les cas de figure à prendre en compte sont les suivants :

[== HTML ==]
<p>[-p-nomdushortcode]</p>


<p>[-p-nomdushortcode] ... [/-p-nomdushortcode]</p>


<p>[-p-nomdushortcode]</p>
 ... ... ...
<p>[/-p-nomdushortcode]</p>

et celui-ci, avec <br> ou <br />, qui se produit si le rédacteur a utilisé Maj+Entrée :

[== HTML ==]
<p>[-p-nomdushortcode]<br>
 ... ... ...
<br>[/-p-nomdushortcode]</p>

Pour traiter tous ces cas de figure, j'ai modifié de la façon suivante la fonction shortcode_p_replace, dans le fichier spxshortcodes.php du plugin :

[== PHP ==]
  # Delete p for shorcode with :
  #        <p>[-p-...]</p>
  #   or   <p>[-p-...]...[/-p-...]</p>
  #   or   <p>[-p-...]</p> ... <p>[/-p-...]</p>
  # Move p into the shorcode with :
  #        <p>[-p-...]<br> ... <br>[/-p-...]</p>     (<br> instead of </p> or <p> inside the shortcode - works too with <br />)
  public static function shortcode_p_replace($txtcontenu) {
  // 1- del p for shorcodes with  <p>[-p-...]</p>
  // 2- del p for shorcodes with  <p>[-p-...]...[/-p-...]</p>
  // 3- del p for CLOSING shorcodes in   <p>[-p-...]</p> ... <p>[/-p-...]</p> ONLY
    $pattern1 = '/(<p[^>]*>[^<]*\[-p-(.*)\][^<]*<\/p>)/u';
    $pattern2 = '/(<p[^>]*>[^<]*\[-p-(.*)\][^<]*<\/p>)/u';
    $pattern3 = '/(<p[^>]*>[^<]*\[\/-p-(.*)\][^<]*<\/p>)/u'; 
    foreach (array($pattern1, $pattern2, $pattern3) as $pattern) {
        if ($pattern==$pattern3) { $openbracket = '[/'; }  else  { $openbracket = '[';}
        $existe_lignecode = false;
        $existe_lignecode = preg_match_all($pattern, $txtcontenu, $tab_shortcodes, PREG_SET_ORDER);
        if ($existe_lignecode) {
          foreach ($tab_shortcodes as $tab_shortcodecourant) { 
            $shortcode_avec_balise_p = $tab_shortcodecourant[1];
            $shortcode_seul = $openbracket . $tab_shortcodecourant[2] . "]";
            $txtcontenu = str_replace($shortcode_avec_balise_p, $shortcode_seul, $txtcontenu);
          } 
        }
    } 
    
    // 4- move <p> for opening shorcodes   <p>[-p-...]<br>  or  <p>[-p-...]<br /> => [...]<p>
    // 5- move </p> for CLOSING shorcodes   <br>[/-p-...]</p>  or  <br />[-p-...]</p> => [...]<p>
    foreach (array('<br>', '<br \/>') as $br_tag) {
      $pattern4 = '/(<p[^>]*>[^<]*\[-p-(.*)\][^<]*' . $br_tag . ')/u';
      $pattern5 = '/(' .$br_tag. '[^<]*\[-p-(.*)\][^<]*<\/p>)/u';
      foreach (array($pattern4, $pattern5) as $pattern) {
        if ($pattern==$pattern4) {
            $openbracket = '[';
            $closebracket = ']<p>'; }
        elseif ($pattern==$pattern5) {
            $openbracket = '</p>[';
            $closebracket = ']'; }
        $existe_lignecode = false;
        $existe_lignecode = preg_match_all($pattern, $txtcontenu, $tab_shortcodes, PREG_SET_ORDER);
        if ($existe_lignecode) {
            foreach ($tab_shortcodes as $tab_shortcodecourant) { 
                $shortcode_avec_balise_p = $tab_shortcodecourant[1];
                $shortcode_seul = $openbracket . $tab_shortcodecourant[2] . $closebracket;
                $txtcontenu = str_replace($shortcode_avec_balise_p, $shortcode_seul, $txtcontenu);
            } 
        }
      } 
    } 
    
    // for close [/-p-...]
    $txtcontenu = str_replace("[/-p-", "[/", $txtcontenu);

    return $txtcontenu;
  }

J'ai testé, normalement ça marche.

Dernière modification par Francis (25/01/2016 17:18:59)

Hors ligne

#52 26/01/2016 12:09:00

je-evrard
Pluxml Staff
Lieu : pau
Inscription : 08/05/2012
Messages : 1 128
Site Web

Re : [SPXSHORTCODES] environnement pour shortcodes

Hello Francis et bonne année,

Merci pour les modifications, je vais tester ça rapidement et ferais une nouvelle version. Désolé de ne pas être trop sur le forum en ce moment mais je bosse sur un gros gros projet qui se termine. Je pourrais ainsi reprendre mes devs pluxml très bientôt.

Je te tiens au courant,

a+

jéjé


Petit à petit l'oiseau fait son nid.
- Sites : Création web - Création artistique
- pluxml : Plugins - Simplebox - Visual Wizard
- Projet SPX : Vitrine - Blog
facebook

Hors ligne

#53 26/01/2016 16:41:46

Francis
Membre
Inscription : 19/11/2011
Messages : 407
Site Web

Re : [SPXSHORTCODES] environnement pour shortcodes

Merci Jéjé, je me doutais que tu étais très occupé, on te voyait beaucoup moins sur le forum depuis quelque temps.
Bonne année à toi aussi et bon courage pour ton méga-projet !
Et à très bientôt sur le forum, pour de nouvelles aventures autour de PluXml !  smile

Hors ligne

#54 28/04/2016 17:37:09

je-evrard
Pluxml Staff
Lieu : pau
Inscription : 08/05/2012
Messages : 1 128
Site Web

Re : [SPXSHORTCODES] environnement pour shortcodes

Coucou,

J'ai testé ta fonction francis.


Declaration des shorcodes theme/config.php :

[== Indéfini ==]
<?php 

function button_shortcode1() {
    return '<a href="http://twitter.com/filipstefansson" class="twitter-button">Follow me on Twitter!</a>';
}
add_shortcode('button1', 'button_shortcode1'); 


function caption_shortcode1( $atts, $content = null ) {
	return '<span class="caption">' . $content . '</span>';
}
add_shortcode( 'caption1', 'caption_shortcode1' );

?>

html dans l'article :

[== Indéfini ==]
<p>[button1]</p>
<p>[caption1]My caption[/caption1]</p>
<p>[caption1]</p>
<p>My caption</p>
<p>[/caption1]</p>
<p>-------------------------------------</p>
<p>[-p-button1]</p>
<p>[-p-caption1]My caption[/-p-caption1]</p>
<p>[-p-caption1]</p>
<p>My caption</p>
<p>[/-p-caption1]</p>

Rendu fontend html :

[== Indéfini ==]

<p><a href="http://twitter.com/filipstefansson" class="twitter-button">Follow me on Twitter!</a></p>
<p><span class="caption">My caption</span></p>
<p><span class="caption"></p>
<p>My caption</p>
<p></span></p>
<p>-------------------------------------</p>
<a href="http://twitter.com/filipstefansson" class="twitter-button">Follow me on Twitter!</a>
<span class="caption">My caption</span>
<span class="caption">
<p>My caption</p>
</span>

Ca marche plutot pas mal Francis ! J'intègre ça dans la version avant fin de semaine. Bravo a toi. Comment font-ils dans wordpress ?

a+

jeje

PS : oui j'étais très occupé mais je reviens sur la scène pluxml. héhé.


Petit à petit l'oiseau fait son nid.
- Sites : Création web - Création artistique
- pluxml : Plugins - Simplebox - Visual Wizard
- Projet SPX : Vitrine - Blog
facebook

Hors ligne

#55 28/04/2016 23:06:36

Francis
Membre
Inscription : 19/11/2011
Messages : 407
Site Web

Re : [SPXSHORTCODES] environnement pour shortcodes

Merci bien Jéjé !
Bien content de te revoir ici smile

En cherchant pour Wordpress, je vois une fonction qui remplace "<p>[" par "[", etc.
Pas idéal, ça pourrait modifier autre chose que les shortcodes.
Je vois aussi un filtre Wordpress wpautop à modifier et des expressions régulières hyper compliquées, bref pas de solution miracle à première vue.

Dernière modification par Francis (28/04/2016 23:06:54)

Hors ligne

#56 29/04/2016 09:59:38

je-evrard
Pluxml Staff
Lieu : pau
Inscription : 08/05/2012
Messages : 1 128
Site Web

Re : [SPXSHORTCODES] environnement pour shortcodes

Mise a jour 1.3 (contribution francis)

**** v 1.3 ****
- mod function shortcode_p_replace


Petit à petit l'oiseau fait son nid.
- Sites : Création web - Création artistique
- pluxml : Plugins - Simplebox - Visual Wizard
- Projet SPX : Vitrine - Blog
facebook

Hors ligne

#57 08/06/2016 21:30:54

je-evrard
Pluxml Staff
Lieu : pau
Inscription : 08/05/2012
Messages : 1 128
Site Web

Re : [SPXSHORTCODES] environnement pour shortcodes

Un petit shortcode intéressant :

[== PHP ==]
// [staticUrl id=001]
function staticUrl_func ( $atts, $content = null ) {
	$plxMotor = plxMotor::getInstance();
	
	extract(shortcode_atts(array(
		'id' => '',
	), $atts));
	
	$type='relatif';
	# Recupération ID URL
	$staticId = $id;
	$staticIdFill = str_pad($staticId,3,'0',STR_PAD_LEFT);
	if(!empty($staticId) AND isset($plxMotor->aStats[ $staticIdFill ]))
	return  $plxMotor->urlRewrite('?static'.$staticId.'/'.$plxMotor->aStats[ $staticIdFill ]['url']);

}

add_shortcode( 'staticUrl', 'staticUrl_func' );

Par exemple pour créer des liens via des boutons entre pages statiques :

[== Indéfini ==]
<a class="button" title="" href="[staticUrl id=012]">En savoir plus</a>

Affiche l'url de la page statique en question.

Dernière modification par je-evrard (08/06/2016 21:33:02)


Petit à petit l'oiseau fait son nid.
- Sites : Création web - Création artistique
- pluxml : Plugins - Simplebox - Visual Wizard
- Projet SPX : Vitrine - Blog
facebook

Hors ligne

#58 09/06/2016 23:07:02

Francis
Membre
Inscription : 19/11/2011
Messages : 407
Site Web

Re : [SPXSHORTCODES] environnement pour shortcodes

Merci Jéjé, c'est intéressant à la fois pour le shortcode et pour le principe.

Ça montre qu'on peut mettre un shortcode à l'intérieur d'une balise, dans un attribut, je n'avais pas pensé à ce type d'utilisation.

Hors ligne

#59 10/06/2016 09:32:59

je-evrard
Pluxml Staff
Lieu : pau
Inscription : 08/05/2012
Messages : 1 128
Site Web

Re : [SPXSHORTCODES] environnement pour shortcodes

On peut faire mieux Francis !

Ce shortcode ci dessous a insérer dans la config.php de votre thème bien sur :

[== Indéfini ==]
function plx_get_the_ip() {
    if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
        return $_SERVER["HTTP_X_FORWARDED_FOR"];
    }
    elseif (isset($_SERVER["HTTP_CLIENT_IP"])) {
        return $_SERVER["HTTP_CLIENT_IP"];
    }
    else {
        return $_SERVER["REMOTE_ADDR"];
    }
}

function plx_contact_form_func( $atts ) {
	global $plxShow;
	$plxShow = plxShow::getInstance();
	$plxShow->plxMotor->plxCapcha = new plxCapcha();
	
    // This line of comment, too, holds the place of the brilliant yet simple shortcode that creates our contact form. And yet you're still wasting your time to read this comment. Bravo.
	extract( shortcode_atts( array(
    // if you don't provide an e-mail address, the shortcode will pick the e-mail address of the admin:
    "email" => "",
	"email_cc" => "",
	"email_bcc" => "",
	
    "subject" => "",
    "label_name" => "Your Name",
    "label_email" => "Your E-mail Address",
    "label_subject" => "Subject",
    "label_message" => "Your Message",
    "label_submit" => "Submit",
    // the error message when at least one of the required fields are empty:
    "error_empty" => "Please fill in all the required fields.",
    // the error message when the e-mail address is not valid:
    "error_noemail" => "Please enter a valid e-mail address.",
	"error_sendemail" => "There is an error, sorry",
	
	"error_antispam" => "There is an error antispam, sorry",
	"captcha" => "true",
	"label_antispam" => "Antispam",
    // and the success message when the e-mail is sent:
    "success" => "Thanks for your e-mail! We'll get back to you as soon as we can.",
	
	), $atts ) );
	
	// if the <form> element is POSTed, run the following code
	if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
		$error = false;
		// set the "required fields" to check
		$required_fields = array( "your_name", "email", "message", "subject" );
	 
		// this part fetches everything that has been POSTed, sanitizes them and lets us use them as $form_data['subject']
		foreach ( $_POST as $field => $value ) {
			if ( get_magic_quotes_gpc() ) {
				$value = stripslashes( $value );
			}
			$form_data[$field] = strip_tags( $value );
		}
	 
		// if the required fields are empty, switch $error to TRUE and set the result text to the shortcode attribute named 'error_empty'
		foreach ( $required_fields as $required_field ) {
			$value = trim( $form_data[$required_field] );
			if ( empty( $value ) ) {
				$error = true;
				$result = $error_empty;
			}
		}
	 
		// and if the e-mail is not valid, switch $error to TRUE and set the result text to the shortcode attribute named 'error_noemail'
		if (! filter_var($form_data['email'], FILTER_VALIDATE_EMAIL)) {
			$error = true;
			$result = $error_noemail;
		}
		
		if($captcha == "true" AND $_SESSION['capcha'] != sha1($_POST['rep'])){
			$error = true;
			$result = $error_antispam;
		}
	 
		// but if $error is still FALSE, put together the POSTed variables and send the e-mail!
		if ( $error == false ) {
			
			$email_subject = $form_data['subject'];
			// get the message from the form and add the IP address of the user below it
			$email_message = $form_data['message'] . "\n\nIP: " . plx_get_the_ip();
			
			if(plxUtils::sendMail($form_data['your_name'],$form_data['email'],$email,$email_subject,$email_message,'text',$email_cc,$email_bcc)) {
				// and set the result text to the shortcode attribute named 'success'
				$result = $success;
				// ...and switch the $sent variable to TRUE
				$sent = true;
			}else{
				$result = $error_sendemail;
			}
			
		}
	}
	
	if ( $result != "" ) {
		if ($error == true)
			$info = '<div class="alert red">' . $result . '</div>';
		else
			$info = '<div class="alert blue">' . $result . '</div>';
	}
	
	
	
	ob_start();
	$plxShow->capchaQ();
	$capcha = ob_get_clean();
	
	
	// anyways, let's build the form! (remember that we're using shortcode attributes as variables with their names)
	$email_form = '<form class="contact-form" method="post" action="#form">
		<div>
			<label for="cf_name">' . $label_name . ':</label>
			<input type="text" name="your_name" id="cf_name" size="50" maxlength="50" value="' . $form_data['your_name'] . '" />
		</div>
		<div>
			<label for="cf_email">' . $label_email . ':</label>
			<input type="text" name="email" id="cf_email" size="50" maxlength="50" value="' . $form_data['email'] . '" />
		</div>
		<div>
			<label for="cf_subject">' . $label_subject . ':</label>
			<input type="text" name="subject" id="cf_subject" size="50" maxlength="50" value="' . $subject . $form_data['subject'] . '" />
		</div>
		<div>
			<label for="cf_message">' . $label_message . ':</label>
			<textarea name="message" id="cf_message" cols="50" rows="15">' . $form_data['message'] . '</textarea>
		</div>
		';
	if($captcha == "true") {
	$email_form .='
		<div>
			<label for="id_rep"><strong>' . $label_antispam. '</strong></label>
			'.$capcha.'
			<input id="id_rep" name="rep" type="text" size="2" maxlength="1" style="width: auto; display: inline;" autocomplete="off" />
		</div>
		';
	}
	$email_form .='
		<div>
			<input type="submit" value="' . $label_submit . '" name="send" id="cf_send" />
		</div>
		
	</form>';
	
	if ( $sent == true ) {
		return $info;
	} else {
		return $info . $email_form;
	}

 }
add_shortcode( 'contact', 'plx_contact_form_func' );

Il permet tout simplement d'afficher un formulaire de contact avec tout ce qui va bien n'importe ou (compatible plucss) et avec antispam optionnel.

Pour l'usage :

[== Indéfini ==]
[contact 
email="mymail@toto.fr" 
subject="Projet spx 5" 
label_name="Votre nom" 
label_email="Votre addresse email" 
label_subject="Sujet" 
label_message="Votre message" 
label_submit="Envoyer" 
label_antispam="Vérification anti-spam." 
error_empty="Veuillez remplir tous les champs." 
error_noemail="Veuillez entrer une adresse email valide." 
error_sendemail="Il y a eu une erreur d'envoie" 
error_antispam="Vous n'avez pas rentrer la bonne lettre pour l'antispam" 
success="Merci pour votre message ! Nous reviendrons vers vous dès que possible."
]

A utiliser sans modération dans une bonne page statique sans une ligne de code et sans plugin ! Enjoy !

Ca serait inéressant d'avoir un petit emplacement lié au sujet car les possiblités sont nombreuses et flexibles !

Dernière modification par je-evrard (14/06/2016 08:24:51)


Petit à petit l'oiseau fait son nid.
- Sites : Création web - Création artistique
- pluxml : Plugins - Simplebox - Visual Wizard
- Projet SPX : Vitrine - Blog
facebook

Hors ligne

#60 12/06/2016 00:10:35

Francis
Membre
Inscription : 19/11/2011
Messages : 407
Site Web

Re : [SPXSHORTCODES] environnement pour shortcodes

Merci Jéjé pour cette version du formulaire.

En fait, j'utilise déjà régulièrement une méthode voisine pour afficher un formulaire, avec ce shortcode :

[== PHP ==]
/* ---------------------------- FONCTION SHORTCODE affichage_formulaire ---------------------------------*/

// Affiche le formulaire de contact
//
// Utilisation :     [-p-affichage_formulaire]     ou     [-p-affichage_formulaire lienform="formulaire-contact.php"]
//
// Le préfixe "-p-" avant le shortcode "affichage_formulaire" enlève la balise <p...>...</p> autour du shortcode, pour qu'elle n'entoure pas le formulaire
//
function affichage_formulaire_func($atts) {
// Fonction qui inclut le fichier PHP contenant le formulaire de contact
  extract(shortcode_atts(array("lienform" => 'formulaire-contact.php'), $atts));
  
  $plxShow = plxShow::getInstance(); // pour appeler les fonctions de la classe plxShow
  
  // Chemin du formulaire = celui du template courant (ATTENTION : il faut ici utiliser le chemin RELATIF vers le fichier du formulaire)
  // Chemin absolu vers le dossier template
  ob_start();      $plxShow->template();      $cheminabsolu = ob_get_clean();
  // Chemin de la racine du site
  ob_start();      $plxShow->racine();        $chemin_racine = ob_get_clean();
  // Chemin relatif vers le dossier template
  $cheminrelatif = str_replace($chemin_racine, "", $cheminabsolu) . "/";
  
  $fichieraveccheminrelatif = $cheminrelatif . $lienform;
  
  ob_start();
      include $fichieraveccheminrelatif;
  $txt_form = ob_get_clean();
  
  return $txt_form;
}


add_shortcode( 'affichage_formulaire', 'affichage_formulaire_func' );

et comme indiqué en commentaire, l'utilisation de cette façon à l'intérieur d'une page :

[affichage_formulaire lienform="monformulaire.php"]

avec dans le dossier du thème courant, un fichier "formulaire-contact.php" contenant un formulaire inspiré du plugin plxMyContact de Stéphane.

Dernière modification par Francis (12/06/2016 00:11:42)

Hors ligne

#61 13/06/2016 16:08:47

ppmt
Membre
Lieu : UK
Inscription : 18/06/2015
Messages : 340
Site Web

Re : [SPXSHORTCODES] environnement pour shortcodes

Oh je peux supprimer un plugin!

Je n'ai rien contre les plugins mais un de moins ne fera pas de mal

Une petite faute dans le code au niveau de la ligne pour envoyer le mail. Le $email_cc est repeter 2 fois. Le 2eme doit etre remplacer pas $email_bcc je pense smile

Merci beaucoup.

PS:Je me rends bien compte que j'utilise un plugin pour remplacer un autre plugins mais comme j'utilise deja spxshortcodes...

PS2: desole pour le message original en anglais....des fois j'oublie a qui je parle !

Dernière modification par ppmt (13/06/2016 19:56:56)

Hors ligne

#62 14/06/2016 08:23:55

je-evrard
Pluxml Staff
Lieu : pau
Inscription : 08/05/2012
Messages : 1 128
Site Web

Re : [SPXSHORTCODES] environnement pour shortcodes

Hello,

Merci pour le feedback et la petite correction (je matrise l'anglais il y a pas de soucis).

Je vais surement faire un plugin qui va rassembler un ensemble de shortcodes indispensables. J'en ai deja créé pas mal et la centralisation me parait importante.

a+

jéjé


Petit à petit l'oiseau fait son nid.
- Sites : Création web - Création artistique
- pluxml : Plugins - Simplebox - Visual Wizard
- Projet SPX : Vitrine - Blog
facebook

Hors ligne

#63 14/06/2016 09:42:14

Suricat
Membre
Inscription : 26/05/2011
Messages : 145

Re : [SPXSHORTCODES] environnement pour shortcodes

Je vais surement faire un plugin qui va rassembler un ensemble de shortcodes indispensables. J'en ai deja créé pas mal et la centralisation me parait importante.

Excellente idée !
Je vais peut-être enfin me mettre aux shortcodes, car si le principe me semble excellent, il me manque des exemples d'utilisation pour en apprécier vraiment l'utilité...

Hors ligne

#64 14/06/2016 09:45:59

Francis
Membre
Inscription : 19/11/2011
Messages : 407
Site Web

Re : [SPXSHORTCODES] environnement pour shortcodes

Effectivement, ce serait pratique d'avoir un ensemble de shortcodes réunis.

Ce qui serait vraiment très utile aussi, ce serait d'avoir sur le site de PluXml une sous-section dédiée aux shortcodes, pour recenser tous ceux qui existent.
Est-ce que ça pourrait être mis en place dans le Wiki ?

Hors ligne

#65 14/06/2016 09:49:32

ppmt
Membre
Lieu : UK
Inscription : 18/06/2015
Messages : 340
Site Web

Re : [SPXSHORTCODES] environnement pour shortcodes

je plussoie l'idee de centraliser tous les shortcodes!

Hors ligne

#66 14/06/2016 10:12:57

je-evrard
Pluxml Staff
Lieu : pau
Inscription : 08/05/2012
Messages : 1 128
Site Web

Re : [SPXSHORTCODES] environnement pour shortcodes

On est tous d'accord un plugin dédié (et un petit emplacement dans le forum en plus ça serait top !)  héhé !  smile

Dernière modification par je-evrard (14/06/2016 10:13:52)


Petit à petit l'oiseau fait son nid.
- Sites : Création web - Création artistique
- pluxml : Plugins - Simplebox - Visual Wizard
- Projet SPX : Vitrine - Blog
facebook

Hors ligne

#67 14/06/2016 17:12:13

Pierre
Membre
Lieu : La belle province
Inscription : 22/06/2014
Messages : 1 099

Re : [SPXSHORTCODES] environnement pour shortcodes

Je vais peut-être vous surprendre mais je trouve que les plugins auraient leur place dans la rubrique Ressources au même titre qu'on traite les thèmes.  En réutilisant le même système, Stéphane pourrait garder le contrôle des entrées indésirées et l'auteur d'un plugin pourrait y mettre une description, même une image pour identifier. 

Dans l'exemple présent, une page dédiée à SpxShortcodes aurait l'option d'inclure un fichier d'aide vers un glossaire des codes disponibles, bien tenus à jour.  Aujourd'hui, on les relègue au Wiki, c'est pas mal mais moins visible.  Ça fait un peu hack et moins véritable outil d'amélioration pour répondre à un besoin.

Ce genre de classement est très pratique pour Drupal, Wordpress, etc.  On donne aux plugins une place bien en vue pour s'afficher, on indique si le produit est en développement ou mature, la date de la dernière mise à jour, etc.  On peut même rêver un peu et penser y inclure des mots clés pour recherche dans les plugins.

Si tout est maintenu par l'auteur dudit plugin, Stéphane n'aurait alors qu'à autoriser l'ouverture et les mises à jour, ça ne devrait pas prendre plus de temps que d'autoriser un thème.


#titanic {
    float: none;
    bottom: 0;
}

Hors ligne

#68 14/06/2016 18:56:22

Francis
Membre
Inscription : 19/11/2011
Messages : 407
Site Web

Re : [SPXSHORTCODES] environnement pour shortcodes

Bonne remarque, Pierre, car bien que je n'aille pas souvent chercher les plugins sur le site (je les télécharge quand ils apparaissent sur le forum), quand je vais en chercher un, je clique toujours sur "Ressources", avant de me dire : Zut, c'est vrai, ils sont dans "Wiki" !

Hors ligne

#69 14/06/2016 19:08:08

Pierre
Membre
Lieu : La belle province
Inscription : 22/06/2014
Messages : 1 099

Re : [SPXSHORTCODES] environnement pour shortcodes

Et pour les habitués, ça finit par devenir naturel de fouiller partout, on oublie vite nos premiers jours et on fait avec.  Mais pour un nouveau qui "magasine" son prochain CMS et qui tombe sur le site de PluXml, plus il verra un site mature avec une bibliothèque florissante de plugins, plus ça pourra montrer la maturité et la promesse de remplir les besoins les plus fous.


#titanic {
    float: none;
    bottom: 0;
}

Hors ligne

#70 15/06/2016 09:07:14

je-evrard
Pluxml Staff
Lieu : pau
Inscription : 08/05/2012
Messages : 1 128
Site Web

Re : [SPXSHORTCODES] environnement pour shortcodes

Hello,

Puisque vous êtes tous sympas, je vais vous montrer comment faire simplement un breadcrumb en shortcode : c'est très simple (ce shortcode sera lui aussi dans le futur plugin qui intégrera des shorcodes indispensables ;=) ). Vous n'auriez pas été sympas, je le montrais quand même nanana.


Déclaration du shorcode dans config.php du thème avec deux fonctions :

[== Indéfini ==]
function plx_formatLink($href, $name, $link=false, $title='', $class='') {
	if($link) {
		$title = $title=='' ? $name : $title;
		$class = $class=='' ? '' : ' class="'.$class.'"';
		return '<a href="'.$href.'" title="'.plxUtils::strCheck($title).'"'.$class.'>'.plxUtils::strCheck($name).'</a>';
	} else
		return '<span class="here" style="font-weight:bold">'.$name.'</span>';
}

function plx_breadcrumb_func( $atts ) {
	
	extract( shortcode_atts( array(
    // if you don't provide an e-mail address, the shortcode will pick the e-mail address of the admin:
    'L_HERE'			=> 'Vous êtes ici : ',
	'L_HOMEPAGE'		=> 'accueil',
	'L_STATIC'			=> 'page',
	'L_ARTICLE'			=> 'article',
	'L_ARCHIVES'		=> 'archives',
	'L_TAG'				=> 'mot clé',
	'L_CATEGORY'		=> 'catégorie',
	'L_PAGE'			=> 'page',
	'L_ERROR'			=> 'erreur',
	'L_BLOG'			=> 'blog',
	'separator' => '<span class="sep">&nbsp;&#187;&nbsp;</span>'
	
	), $atts ) );
	
	global $plxShow;
	$plxShow = plxShow::getInstance();
	# pages
	preg_match("/\/?page([0-9]+)$/",$plxShow->plxMotor->get,$pages);
	# home
	if($plxShow->plxMotor->get=="blog") {
		$url = "?blog";
		$breadcrumb[] = plx_formatLink($plxShow->plxMotor->urlRewrite($url), $L_BLOG, true, $L_BLOG.$plxShow->plxMotor->aConf["title"], "first");
	} else {
		$url = "?";
		$breadcrumb[] = plx_formatLink($plxShow->plxMotor->urlRewrite($url), $L_HOMEPAGE, true, $L_HOMEPAGE.$plxShow->plxMotor->aConf["title"], "first");
	}
	# traitement des différents modes
	switch($plxShow->mode()) {
		case "categorie":
			$breadcrumb[] = $L_CATEGORY;
			$id = $plxShow->plxMotor->cible;
			$name = $plxShow->plxMotor->aCats[$id]["name"];
			$url = "?categorie".intval($id)."/".$plxShow->plxMotor->aCats[$id]["url"];
			$breadcrumb[] = plx_formatLink($plxShow->plxMotor->urlRewrite($url), $name, isset($pages[1]));
			break;
		case "static":
			$id = $plxShow->plxMotor->cible;
			if($id!=$plxShow->plxMotor->aConf["homestatic"]) {
				$breadcrumb[] = $L_STATIC;
				$group = $plxShow->plxMotor->aStats[$id]["group"];
				if(!empty($group)) $breadcrumb[] = $group;
				$name = $plxShow->plxMotor->aStats[$id]["name"];
				$url = "?static".intval($id)."/".$plxShow->plxMotor->aStats[$id]["url"];
				$breadcrumb[] = plx_formatLink($plxShow->plxMotor->urlRewrite($url), $name);
			}
			break;
		case "tags":
			$breadcrumb[] = $L_TAG;
			$id = $plxShow->plxMotor->cible;
			$name = $plxShow->plxMotor->cibleName;
			$url = "?tag/".$id;
			$breadcrumb[] = plx_formatLink($plxShow->plxMotor->urlRewrite($url), $name, isset($pages[1]), "'.$this->getLang('L_TAG').' ".$id);
			break;
		case "archives":
			$breadcrumb[] = $L_ARCHIVES;
			preg_match("/^(\d{4})(\d{2})?(\d{2})?/",$plxShow->plxMotor->cible, $capture);
			# year
			if(!empty($capture[1])) {
				$url = "?archives/".$capture[1];
				$p = isset($capture[2]) OR isset($pages[1]);
				$breadcrumb[] = plx_formatLink($plxShow->plxMotor->urlRewrite($url), $capture[1], $p, $L_ARCHIVES.$capture[1]);
			}
			# month
			if(!empty($capture[2])) {
				$name = plxDate::getCalendar("month", $capture[2]);
				$url .= "/".$capture[2];
				$breadcrumb[] = plx_formatLink($plxShow->plxMotor->urlRewrite($url), $name, isset($pages[1]));
			}
			break;
		case "article":
			$breadcrumb[] = $L_ARTICLE;
			$id = $plxShow->plxMotor->plxRecord_arts->f("numero");
			$name = $plxShow->plxMotor->plxRecord_arts->f("title");
			$url = "?article".intval($id)."/".$plxShow->plxMotor->plxRecord_arts->f("url");
			$breadcrumb[] = plx_formatLink($plxShow->plxMotor->urlRewrite($url), $name);
			break;
		case "erreur":
			$breadcrumb[] = $L_ERROR;
			break;
		default:
			if(isset($plxShow->plxMotor->aStats[$plxShow->plxMotor->cible])) {
				$breadcrumb[] = $L_STATIC;
				$breadcrumb[] = plx_formatLink("", $plxShow->plxMotor->aStats[$plxShow->plxMotor->cible]["name"]);
			}
	}

	# n° de page
	if(isset($pages[1])) {
		$url .= "/page".$pages[1];
		$breadcrumb[] = plx_formatLink($plxShow->plxMotor->urlRewrite($url), $L_PAGE.$pages[1]);
	}

	$sout=  $L_HERE;
	$sout.= implode($separator, $breadcrumb);
	return $sout;
}
add_shortcode( 'breadcrumb', 'plx_breadcrumb_func' );

Pour l'affichage et bien sur à placer n'importe ou dans les pages du thème (header en général) :

[== Indéfini ==]
[breadcrumb]

Des options sont dispos pour changer les textes et le séparateur : A vous de jouer les petits gars

Jéjé

Pierre : des choses se mettent en place doucement mais surement (le futur gestionnaire de dépot est un gros gros morceau élaboré sur le temps libre, pas facile a concilier et il est fini a 90%, on en reparle prochainement promis). Sinon, ne pas oublier spxplugindownloader qui reprend tous les plugins officiels, plus une partie des plugins non officiels en un clic pour mise a jour ou installation.

Dernière modification par je-evrard (15/06/2016 09:29:41)


Petit à petit l'oiseau fait son nid.
- Sites : Création web - Création artistique
- pluxml : Plugins - Simplebox - Visual Wizard
- Projet SPX : Vitrine - Blog
facebook

Hors ligne

#71 15/06/2016 12:43:00

Pierre
Membre
Lieu : La belle province
Inscription : 22/06/2014
Messages : 1 099

Re : [SPXSHORTCODES] environnement pour shortcodes

Bonnes nouvelles, tant mieux si nos experts peuvent trouver du temps pour améliorer encore le processus.

Je pense toujours aux nouveaux venus qui ne passent que quelques minutes pour renifler un peu.  Plus on verra de bonnes nouvelles, plus on voudra en savoir plus.  Un bon groupe de plugins prouve que le produit attire les développeurs, c'est un signe très positif.


#titanic {
    float: none;
    bottom: 0;
}

Hors ligne

#72 16/06/2016 14:26:19

je-evrard
Pluxml Staff
Lieu : pau
Inscription : 08/05/2012
Messages : 1 128
Site Web

Re : [SPXSHORTCODES] environnement pour shortcodes

Hello,

Un petit shortcode pour afficher les archives tout simplement avec deux fonctions :

[== Indéfini ==]
function plx_display_archive($v,$format) {
	$out ='';
	foreach($v as $art) {
		$row = str_replace('#art_date', plxDate::formatDate($art['date'],'#num_day/#num_month/#num_year(4)'), $format);
		$row = str_replace('#art_link', '<a href="'.$art['url'].'">'.plxUtils::strCheck($art['title']).'</a>', $row);
		$row = str_replace('#art_author', plxUtils::strCheck($art['author']), $row);
		$out .= '<li>'.$row.'</li>';
	}
	return $out;
}

function plx_archive_func( $atts ) {
	extract( shortcode_atts( array(
    // if you don't provide an e-mail address, the shortcode will pick the e-mail address of the admin:
    'excludeCats'			=> '', # use id|id...
	'sort'		=> 'desc', # critère de tri par date (desc, asc)
	'sortby'			=> 'by_title', # type d'affichage (by_year, by_category, by_author, by_title)
	'format'			=> '#art_date : #art_link par #art_author',
	'noarticle'		=> 'Désolé mais il n\'y a pas d\'article.',
	'class'				=> 'allarchive',
	
	), $atts ) );
	
	$aexcludeCats = explode ("|",$excludeCats); # tableau des categories exclues de l'affichage
	
	$plxMotor = plxMotor::getInstance();
	
	#art_date : #art_link par #art_author	
		$array=array();
		$plxGlob_arts = clone $plxMotor->plxGlob_arts;
		if($files = $plxGlob_arts->query('/^[0-9]{4}.[home|'.$plxMotor->activeCats.',]*.[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/','art',$sort,0,false,'before')) {
			foreach($files as $filename) {
				if(preg_match('/[0-9]{4}.((?:[0-9]|home|,)*(?:'.$plxMotor->activeCats.'|home)(?:[0-9]|home|,)*).[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/',$filename,$capture)){
					$catIds=explode(',',$capture[1]);
					foreach($catIds as $catId) {
						if(!in_array($catId, $aexcludeCats)) {
							$tmp = $plxMotor->parseArticle(PLX_ROOT.$plxMotor->aConf['racine_articles'].$filename);

							if($catId=='000')
								$catName = L_UNCLASSIFIED;
							elseif($catId=='home')
								$catName = L_HOMEPAGE;
							else
								$catName = $plxMotor->aCats[$catId]['name'];

							$art = array(
								'id'		=> $tmp['numero'],
								'category'	=> $catName,
								'url' 		=> $plxMotor->urlRewrite('?article'.intval($tmp['numero']).'/'.$tmp['url']),
								'title' 	=> $tmp['title'],
								'year'		=> substr($tmp['date'], 0,4),
								'date'		=> $tmp['date'],
								'author'	=> $plxMotor->aUsers[$tmp['author']]['name'],
							);
							$array[] = $art;
						}
					}
				}
			}
		}
		if($array) {
			# tri multi-dimentionnel
			foreach ($array as $key => $row) {
				switch ($sortby) {
					case 'by_year':
						$a1[$key] = $row['year'];
						break;
					case 'by_category':
						$a1[$key] = $row['category'];
						break;
					case 'by_author':
						$a1[$key] = $row['author'];
						break;
					case 'by_title':
						$a1[$key] = $row['title'];
						break;
				}
				$a2[$key] = $row['date'];
			}

			array_multisort($a1, ($sortby=='by_year'?SORT_DESC:SORT_ASC), $a2, ($sort=='asc'?SORT_ASC:SORT_DESC), $array);

			# préparation pour l'affichage
			foreach ($array as $key => $row) {
				switch ($sortby) {
					case 'by_year':
						$aArts[$row['year']][$row['id']] = $row;
						break;
					case 'by_category':
						$aArts[$row['category']][$row['id']] = $row;
						break;
					case 'by_author':
						$aArts[$row['author']][$row['id']] = $row;
						break;
					case 'by_title':
						$aArts[$row['title']][$row['id']] = $row;
						break;
				}
			}
		}
		
		if($aArts) {
			$out= '<div id="'.$url.'">';
			if($sortby=='by_title') {
				$out.= '<ul class="'.$class.'" >';
				foreach($aArts as $k => $v) {
					$out.=plx_display_archive($v,$format);
				}
				$out.= '</ul>';
			} else {
				foreach($aArts as $k => $v) {
					$out.= '<p class="p_archive">'.plxUtils::strCheck($k).'</p>';
					$out.= '<ul>';
					$out.=plx_display_archive($v,$format);
					$out.= '</ul>';
				}
			}
			$out.= '</div>';
		} else {
			$out.= '<p>'.$noarticle.'</p>';
		}
		
		return $out;

	}
	
add_shortcode( 'archive', 'plx_archive_func' );

Pour l'affichage et bien sur à placer n'importe ou plutôt dans une page statique :

[== Indéfini ==]
[archive]

Des options sont dispos pour configurer les archives.

[== Indéfini ==]
[archive excludeCats='001|002' sort='asc' sortby='by_author' format='#art_date : #art_link par #art_author'  noarticle='No article sorry'  class='archive' ]

Dernière modification par je-evrard (16/06/2016 16:28:38)


Petit à petit l'oiseau fait son nid.
- Sites : Création web - Création artistique
- pluxml : Plugins - Simplebox - Visual Wizard
- Projet SPX : Vitrine - Blog
facebook

Hors ligne

#73 16/06/2016 15:17:14

je-evrard
Pluxml Staff
Lieu : pau
Inscription : 08/05/2012
Messages : 1 128
Site Web

Re : [SPXSHORTCODES] environnement pour shortcodes

Comment rajouter un commentaire facebook dans une page simplement

Voici le code :

[== Indéfini ==]
function facebook_comment_func($atts, $content = null) {
	# https://developers.facebook.com/docs/plugins/comments/
	
	extract( shortcode_atts( array(
    // if you don't provide an e-mail address, the shortcode will pick the e-mail address of the admin:
    'width'			=> '100%', # width of the plugin
	'numposts'		=> '10', # nb posts
	'colorscheme'	=> 'light'
	
	), $atts ) );
	
	$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
	$s='';
		$s.= '
		
		<div id="fb-root"></div>
				<script>(function(d, s, id) {
				  var js, fjs = d.getElementsByTagName(s)[0];
				  if (d.getElementById(id)) return;
				  js = d.createElement(s); js.id = id;
				  js.src = "//connect.facebook.net/fr_FR/sdk.js#xfbml=1&version=v2.0";
				  fjs.parentNode.insertBefore(js, fjs);
				}(document, "script", "facebook-jssdk"));</script>



				<div class="fb-comments" data-href="'.$actual_link.'" data-width="'.$width.'" data-numposts="'.$numposts.'" data-colorscheme="'.$colorscheme.'"></div>
		';

	
	return $s;
		
}
add_shortcode('facebook_comment', 'facebook_comment_func');

Pour afficher :

[== Indéfini ==]
[facebook_comment]

Dernière modification par je-evrard (16/06/2016 15:17:26)


Petit à petit l'oiseau fait son nid.
- Sites : Création web - Création artistique
- pluxml : Plugins - Simplebox - Visual Wizard
- Projet SPX : Vitrine - Blog
facebook

Hors ligne

#74 16/06/2016 16:27:23

je-evrard
Pluxml Staff
Lieu : pau
Inscription : 08/05/2012
Messages : 1 128
Site Web

Re : [SPXSHORTCODES] environnement pour shortcodes

Pour rajouter de la pub adsense sur son site.

Voici le code :

[== Indéfini ==]
function google_adsense_func($atts, $content = null) {
	extract( shortcode_atts( array(
   
    'client'		=> '', 
	'slot'		=> '', 
	'format'	=> 'auto'
	
	), $atts ) );	
		
		$s='';
		$s.= '<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- Annonce -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="'.$client.'"
     data-ad-slot="'.$slot.'"
     data-ad-format="'.$format.'"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>';


	return $s;
		
}
add_shortcode('google_adsense', 'google_adsense_func');	

Pour afficher :

[== Indéfini ==]
[google_adsense client='ca-pub-xxx' slot='xxx' ]

Je vais en faire un plugin rapidement de toutes ces fonctions, on pourra en discuter.

Dernière modification par je-evrard (16/06/2016 16:29:49)


Petit à petit l'oiseau fait son nid.
- Sites : Création web - Création artistique
- pluxml : Plugins - Simplebox - Visual Wizard
- Projet SPX : Vitrine - Blog
facebook

Hors ligne

#75 17/06/2016 23:41:22

Francis
Membre
Inscription : 19/11/2011
Messages : 407
Site Web

Re : [SPXSHORTCODES] environnement pour shortcodes

Merci Jéjé pour tous ces shortcodes.
Un plugin serait intéressant, pour les regrouper, mais ça ne remplacera pas une page dans le Wiki pour recenser les shortcodes existants.
Je pense que les deux seraient bien utiles.

Hors ligne

Pied de page des forums

A propos Nous soutenir Contact Twitter Google+
Copyright © 2006-2017 PluXml.org, tous droits réservés