Bonjour à tous,
Vous savez mon attachement aux Custom Fields
Et pour un site, j'avais besoin de créer des MetaData un peu particulières, au format "DublinCore".
En particulier, c'est même pas que un Custom Field correspond à une Meta DublinCore... car en fait c'est souvent la concaténation de plusieurs champs qui est nécessaire.
Autant dire qu'il n'y avait pas d'extensions permettant de faire exactement ça.
Bref, c'était l'occasion de me lancer : je viens d'écrire mon tout premier plugin de contenu
Ci-dessous, mon code...
Mais je suis sûr que les codeurs parmi vous seront contents de me faire des suggestions (surtout que maintenant que je suis lancé, je veux m'améliorer ).
Pour visualiser le résultat, ce que ça va générer c'est p ex ceci :
Déjà, merci pour vos retours...
Vous savez mon attachement aux Custom Fields
Et pour un site, j'avais besoin de créer des MetaData un peu particulières, au format "DublinCore".
En particulier, c'est même pas que un Custom Field correspond à une Meta DublinCore... car en fait c'est souvent la concaténation de plusieurs champs qui est nécessaire.
Autant dire qu'il n'y avait pas d'extensions permettant de faire exactement ça.
Bref, c'était l'occasion de me lancer : je viens d'écrire mon tout premier plugin de contenu
Ci-dessous, mon code...
Mais je suis sûr que les codeurs parmi vous seront contents de me faire des suggestions (surtout que maintenant que je suis lancé, je veux m'améliorer ).
Pour visualiser le résultat, ce que ça va générer c'est p ex ceci :
Code HTML:
<link rel="schema.DCTERMS" href="http://purl.org/dc/terms/" /> <meta name="DC.title" content="Maclotte" /> <meta name="DC.subject" content="instrumental | maclotte | accordéon" /> <meta name="DC.creator" content="Elisabeth XXX | Françoise YYY" /> <meta name="DC.coverage" content="Liège | Walk (Malmedy) | Hautes-Fagnes" /> <meta name="DC.date" content="" /> <meta name="DC.rights.holder" content="Françoise YYY" /> <meta name="DC.identifier" content="FL-14" /> <meta name="DC.format" content="bande magnétique" /> <meta name="DC.source" content="C B C D C A G E C B" />
Code PHP:
<?php
// no direct access
defined( '_JEXEC' ) or die;
jimport( 'joomla.plugin.plugin' );
jimport( 'joomla.environment.uri' );
class plgContentDublincoreMeta extends JPlugin
{
public function onContentPrepare($context, &$row, &$params, $page = 0)
{
$document = JFactory::getDocument();
// !!! the 2 following IF come from hotometa. I don't know if they are still useful in our case and phrased correctly.
// is this an article that is displayed
if ( JRequest::getVar( 'view' ) == 'article' )
// does the article have custom fields
if ( is_array( $row->jcfields ) || is_object( $row->jcfields ) ) {
// Our Dublin Core are only for Articles of Category ID = 11 (Séquences)
if ($row->catid == 11) {
// DublinCore Schema
$dublincoreschema = '<link rel="schema.DCTERMS" href="http://purl.org/dc/terms/" />';
// Output the custom tag to the html header as html safe
$document->addCustomTag($dublincoreschema);
// DublinCore Title: Article Title
$dublincoremeta ='<meta name="DC.title" content="' . $row->title . '" />';
$document->addCustomTag($dublincoremeta);
// DublinCore Subject: Genre + Type + Thématiques + Instruments
$dublincoremeta ='<meta name="DC.subject" content="' . rtrim(html_entity_decode($row->jcfields[1]->value) . ' | ' . html_entity_decode($row->jcfields[2]->value) . ' | ' . html_entity_decode($row->jcfields[3]->value) . ' | ' . html_entity_decode($row->jcfields[4]->value), ' |') .'" />';
$document->addCustomTag($dublincoremeta);
// DublinCore Creator: Interprètes, Collecteurs
// sometimes the Custom Field only contains one Article ID (like 8) but not if there are multiple Article IDs (an array with 8 and 9)
$article = JTable::getInstance("content");
$articletitles = '';
$ids = $row->jcfields[24]->rawvalue; // interprètes
if (!is_array($ids))
{
$ids = [$ids]; // we transform it into an array. So we can simplify the code instead of having to manage a value if one ID and an array if multiple IDs
}
foreach ($ids as $id) {
$article->load($id);
$articletitles .= $article->get("title") . ' | ';
}
$ids = $row->jcfields[25]->rawvalue; // collecteurs
if (!is_array($ids))
{
$ids = [$ids]; // we transform it into an array. So we can simplify the code instead of having to manage a value if one ID and an array if multiple IDs
}
foreach ($ids as $id) {
$article->load($id);
$articletitles .= $article->get("title") . ' | ';
}
$dublincoremeta ='<meta name="DC.creator" content="' . rtrim($articletitles, ' |') . '" />';
$document->addCustomTag($dublincoremeta);
// DublinCore Coverage: Province, Lieu, Aire Culturelle
$dublincoremeta ='<meta name="DC.coverage" content="' . html_entity_decode($row->jcfields[17]->value) . ' | ' . html_entity_decode($row->jcfields[7]->value) . ' | ' . html_entity_decode($row->jcfields[18]->value) .'" />';
$document->addCustomTag($dublincoremeta);
// DublinCore Date: Date
$dublincoremeta ='<meta name="DC.date" content="' . html_entity_decode($row->jcfields[9]->value) .'" />';
$document->addCustomTag($dublincoremeta);
// DublinCore Rights holder: Propriétaire
$dublincoremeta ='<meta name="DC.rights.holder" content="' . html_entity_decode($row->jcfields[19]->value) .'" />';
$document->addCustomTag($dublincoremeta);
// DublinCore Identifier: N° d'inventaire
$dublincoremeta ='<meta name="DC.identifier" content="' . html_entity_decode($row->jcfields[11]->value) .'" />';
$document->addCustomTag($dublincoremeta);
// DublinCore Format: Support
$dublincoremeta ='<meta name="DC.format" content="' . html_entity_decode($row->jcfields[20]->value) .'" />';
$document->addCustomTag($dublincoremeta);
// DublinCore HasVersion: Autres versions
$articletitles = '';
$ids = $row->jcfields[26]->rawvalue; // other versions of the music
if(!empty($ids)) // need to check this otherwise we could have the Title of last used article while this Custom Field was empty
{
if (!is_array($ids))
{
$ids = [$ids]; // we transform it into an array. So we can simplify the code instead of having to manage a value if one ID and an array if multiple IDs
}
foreach ($ids as $id) {
$article->load($id);
$articletitles .= $article->get("title") . ' | ';
}
$dublincoremeta ='<meta name="DC.hasversion" content="' . rtrim($articletitles, ' |') . '" />';
$document->addCustomTag($dublincoremeta);
}
// DublinCore Source: Incipit
$dublincoremeta ='<meta name="DC.source" content="' . html_entity_decode($row->jcfields[14]->value) .'" />';
$document->addCustomTag($dublincoremeta);
}
}
return;
}
}
Commentaire