ajout des données structurées dans un thème

bonjour;)
j'ai découvert, testé et essayé ce plugin:
http://forum.pluxml.org/viewtopic.php?id=4801
+100:)
Cependant en ce qui concerne les ajouts de tels codes je préférerais les intégrer directement au fichier, header.php, du thème par exemple, pour éviter, comme bien souvent de surcharger 'mon' PluXml en plugins ...
Les ajouts les plus courants à faire sont ceux-ci:
[== HTML ==]
<link rel="author" href="URL de la page perso sur Google+"/>
<link rel="publisher" href="URL de la page Google+" />
<!-- Open graph -->
<meta property="og:locale" content="fr-FR">
<meta property="og:type" content="article" />
<meta property="og:headline" content="Titre du billet" />
<meta property="og:description" content="Description de la page" />
<meta property="og:image" content="URL de l'image" />
<meta property="og:url" content="URL de la page" />
<meta property="og:site_name" content="Nom du site" />
<!-- Facebook -->
<meta property="article:publisher" content="URL de votre page Facebook" />
<meta property="article:author" content="URL de votre page Facebook" />
<!-- Twitter -->
<meta name="twitter:card" content="summary"/>
<meta name="twitter:site" content="Votre pseudo Twitter"/>
<meta name="twitter:domain" content="Nom du site"/>
<meta name="twitter:creator" content="Votre pseudo Twitter"/>
<!-- Organization -->
<meta itemprop="name" content="Titre de la page" />
<meta itemprop="description" content="Description de la page" /> 
ET, là où je coince, c'est au niveau des balise ' Opengraph ' justement, pour réussir à les générer en fonction du codage du PluXml ...
Si pour 'title' je pense avoir compris:
[== PHP ==]
<meta property="og:title" <?php $plxShow->pageTitle(); ?>"/>
Pour les autres qui pourrait me donner le codage précis ??? à placer pour :
[== HTML ==]
<!-- Open graph -->
<meta property="og:locale" content="fr-FR">
<meta property="og:type" content="article" />
<meta property="og:headline" content="Titre du billet" />
<meta property="og:description" content="Description de la page" />
<meta property="og:image" content="URL de l'image" />
<meta property="og:url" content="URL de la page" />
<meta property="og:site_name" content="Nom du site" />
:8
Moi et le code ..., mais bon cela servira aussi à tous :)
grands merci à l'avance
@-

Réponses

  • hello,
    t'as trouvé depuis ? :P
  • pas trop grand chose !!!
    je me sers donc de ce plugin pour l'instant, mais il remplit sa fonction à 90% = pas mal :)
  • ok bon ben on va le faire ensemble lol
  • danielsandanielsan Member
    janvier 2016 modifié
    j'inclue un fichier metas.php dans le header, dans lequel j'y regroupe les meta balises
    j'ai pas fini, c'est en court ... reste les statics, tags, archives, home, lol
    me suis inspiré de plxSocialMeta et plxMyAutoMetaDescription

    j'ai un bug sur l'extraction d'image d'un contenu
    éventuellement si chacun peut y mettre sa pierre ... je vais y rajouter tes balises
    [== PHP ==]
    <?php
    # méthode qui extrait une image d'un contenu
    function extractImgUrl($string){
    	$image = '';
    	if (preg_match('~<img[^>]*?src="(.*?)"[^>]+>~', $string, $match)) {
    		$image = trim($match[1]);
    		if (strpos($image, 'http') !== 0) {
    			$image = 'http://' . $_SERVER['SERVER_NAME'] . '/' . trim($match[1]);
    		}
    	}
    	return $image;
    }
    
    	/**
    	 * Méthode qui extrait n mots dans une chaine de caractères
    	 *
    	 * @param 	$string 	chaine à couper
    	 * @param 	$len 		nombre de mots à garder
    	 * @param 	$ending 	caractères de fin
    	 * @param 	$char 		caractère de séparation
    	 * @return	string
    	 * @author	Stephane F
    	 **/
    	function subtok($string,$len=200,$ending='...',$chr=' ') {
    		$explode=explode($chr,$string);
    		if(sizeof($explode)>$len)
    			return implode($chr,array_slice($explode,0,$len)).$ending;
    		else
    			return implode($chr,array_slice($explode,0,$len));
    	}
    ?>
    
    <meta charset="<?php $plxShow->charset('min'); ?>">
    <meta name="viewport" content="width=device-width, user-scalable=yes, initial-scale=1.0">
    <META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
    <meta property="fb:admins" content="XXX" />
    
    <?php
    
    ob_start();
    $plxShow->pageTitle();
    $title =  ob_get_clean();
    
    if(!empty($plxShow->plxMotor->aConf['meta_keywords'])){
    	$keywords = explode(", ",plxUtils::strCheck($plxShow->plxMotor->aConf['meta_keywords']));
    }else{}
    
    $metas = array( // paramètres par défaut
    				'description'		=> trim($plxShow->plxMotor->aConf["meta_description"]),
    				'image'				=> '',
    				'url'				=> '',
    				'title'				=> $title,
    				'type'				=> 'article',
    				'category'			=> 'news',
    				'author'			=> 'moi',
    				'keywords'			=> $keywords,
    );
    
    
    switch($plxShow->mode()){
        case 'article': // sur les pages articles
    		
    		// $metas['type'] = "product";
    		
    		# image
    		if($plxShow->plxMotor->plxRecord_arts->f('thumbnail')){
    			$metas['image'] = $plxShow->plxMotor->urlRewrite($plxShow->plxMotor->plxRecord_arts->f('thumbnail'));
    		}elseif(extractImgUrl($plxShow->plxMotor->plxRecord_arts->f('chapo'))!=""){
    			$metas['image'] = extractImgUrl($plxShow->plxMotor->plxRecord_arts->f('chapo'));
    		}elseif(extractImgUrl($plxShow->plxMotor->plxRecord_arts->f('content'))!=""){
    			$metas['image'] = extractImgUrl($plxShow->plxMotor->plxRecord_arts->f('content'));
    		}else{}
    
    		# description
    		$description=trim($plxShow->plxMotor->plxRecord_arts->f("meta_description"));
    		if(!empty($description)) {
    			$metas['description'] = $description;
    		}else{
    			$chapo=trim($plxShow->plxMotor->plxRecord_arts->f("chapo"));
    			$content=trim($plxShow->plxMotor->plxRecord_arts->f("content"));
    			if(!empty(strip_tags($chapo.$content))){
    				$description = str_replace("\"","\'",strip_tags($chapo." ".$content)); # pour protéger le champ content de la balise meta
    				$description = subtok($description); # on coupe
    				$metas['description'] = trim($description);
    			}
    		}
    		
    		# url
    		$id = intval($plxShow->plxMotor->plxRecord_arts->f('numero'));
    		$url = $plxShow->plxMotor->plxRecord_arts->f('url');
    		$metas['url'] = $plxShow->plxMotor->urlRewrite('?article'.$id.'/'.$url);
    		
    		# author
    		$metas['author'] = $plxShow->artAuthor(false);
    		
    		# category
    		ob_start();
    		$plxShow->artCat('#cat_name', ', ');
    		$metas['category'] .=  ", ".ob_get_clean();
    		
    		# keywords
    		$meta_content=trim($plxShow->plxMotor->plxRecord_arts->f('meta_keywords'));
    		if(!empty($meta_content)){
    			$metas['keywords'] = array_merge($metas['keywords'], explode(", ",plxUtils::strCheck($meta_content)));
    		}else{}
    		
    		ob_start();
    		$plxShow->artTags('#tag_name', ', ');
    		$temp = ob_get_clean();
    		if($temp!=""){
    			$metas['keywords'] = array_merge($metas['keywords'], explode(", ",$temp));
    		}
    
    		break;
        case 'categorie': // page catégorie
    		
    		# type
    		
    		# image
            $metas['image'] = extractImgUrl($plxShow->plxMotor->aCats[$plxShow->plxMotor->cible]['description']);
    
    		# description
    		if(!empty($plxShow->plxMotor->aCats[ $plxShow->plxMotor->cible ]['meta_description'])) {
    			$metas['description'] = plxUtils::strCheck($plxShow->plxMotor->aCats[ $plxShow->plxMotor->cible ]['meta_description']);
    		}else{
    			$description = $plxShow->plxMotor->aCats[$plxShow->plxMotor->cible]['description'];
    			if(!empty(strip_tags($description))){
    				$description = subtok(strip_tags($description)); # on coupe
    				$metas['description'] = trim($description);
    			}
    		}
    		
    		# url
    		$metas['url'] = $plxShow->catUrl($plxShow->plxMotor->cible);
    		
    		# keywords
    		$temp = plxUtils::strCheck($plxShow->plxMotor->aCats[ $plxShow->plxMotor->cible ]['meta_keywords']);
    		$metas['keywords'] = array_merge($metas['keywords'], explode(", ",$temp));
    
    		break;
    
    	default :
    		echo '<meta property="og:type"         content="restaurant.menu_section" />'."\n";
    		// echo '<meta property="restaurant:menu" content="Pizzas" />'."\n";
    }
    
    # on effectue l'affichage
    foreach($metas as $meta => $value){
    	if(!empty($value)){
    		switch($meta){
    			case 'title' :
    				echo '<meta itemprop="name" content="'.$value.'"/>'."\n";
    				echo '<title>'.$value.'</title>'."\n";
    				echo '<meta property="og:'.$meta.'" content="'.$value.'"/>'."\n";
    				break;
    			case 'type' :
    				echo '<meta property="og:'.$meta.'" content="'.$value.'"/>'."\n";
    				break;
    			case 'category' :
    				echo '<meta name="'.$meta.'" content="'.$value.'"/>'."\n";
    				break;
    			case 'author' :
    				echo '<meta name="'.$meta.'" lang="fr" content="'.$value.'"/>'."\n";
    				break;
    			case 'keywords' :
    				echo '<meta name="'.$meta.'" content="'.implode(", ",array_unique($value)).'"/>'."\n";
    				break;
    			default :
    				echo '<meta property="og:'.$meta.'" content="'.$value.'"/>'."\n";
    				echo '<meta itemprop="'.$meta.'" content="'.$value.'"/>'."\n";
    				echo '<meta name="'.$meta.'" content="'.$value.'"/>'."\n";
    		}
    	}
    	echo "\n";
    
    }
    
    echo '<meta name="copyright" content="'.$metas['author'].'">'."\n";
    ?>
    <meta name="generator" content="PluXml">
    
  • ben dis donc ... = chapeau bas !
    mais tu comptes en faire un plugin ou ajouter tout cela ' à la main ' ensuite ?
    Le plugin, serait plus que top de chez top, surtout avec les deux que tu cites au départ.
    Quant ensuite à ' faire cela ensemble ' = non, je ne suis pas du tout de ce niveau là ;) ( tu le sais ! )
    juste je pourrais donner un avis si je 'vois' qq chose en ligne, donc reste à espérer que d'autres fous / kadors du codage dans ton genre vont venir se greffer à ce post.
    @+
  • ben tu peux déjà faire les tests d'affichage et voir les balises qui manquent ..?

    j'ai désactivé les plugins sus-cités pour éviter les redondances.
    Au moins là tout sera au même endroit aussi.

    En faire un plugin ... je sais pas, on verra.
    Là on ne parle que d'un seul fichier inclus ... avec très peu de paramètres personnalisés.
    Par contre j'ai un plugin "myParams" où j'y fourre tout type de paramètre que j'affiche/appelle de ci de là ... ;)
    genre le logo du site, l'image du site, les trucs par défaut ...
  • note pour la metabalise keywords :
    je prends les mot-clefs du site, ceux de l'article + les tags de l'article et je dédoublonne l'ensemble ...
  • pour cette 'balise' ( keywords ) je ne pense pas que ce soit super important, puisqu'elle n'est plus prise ni par GG ni par ... bon, mais sait-on jamais, 'si' un jour ... :)
Connectez-vous ou Inscrivez-vous pour répondre.