J'utilise le modèle Protostar par défaut de Jommla. J'ai des champs personnalisés pour les articles et je souhaite afficher ce champ personnalisé dans l'en-tête de la page, pas à l'intérieur de l'article. Comment puis-je y arriver?
Vous devez obtenir l'article en utilisant le modèle d'article. Puis obtenez ses champs en utilisant FieldsHelper. Un inconvénient ici est que cet article n'est pas mis en cache ici, donc nous obtenons une requête en double.
// Check that we are on article view.
if ($option === 'com_content' && $view === 'article')
{
$context = 'com_content.article';
// Get the article.
$article = JModelLegacy::getInstance('Article', 'ContentModel')->getItem();
// Get article fields.
JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php');
$fields = FieldsHelper::getFields($context, $article);
// We have the fields, do something, e.g.
echo FieldsHelper::render($context, 'fields.render', array('context' => $context, 'item' => $article, 'fields' => $fields));
}
1. Désactiver l'affichage automatique
Vous souhaitez définir l'affichage automatique dans l'onglet Options du champ sur "Ne pas afficher automatiquement". Cela fera en sorte qu'il n'apparaisse pas dans le corps HTML dans le cadre de l'article.
2. Créer un article de remplacement.
Ensuite, vous devrez créer un remplacement de la vue d'article, si elle n'existe pas déjà. Copiez default.php et default_links.php à partir des composants/com_content/views/article/tmpl/et collez-les dans templates/YOUR_TEMPLATE/html/com_content/article /.
Ces fichiers remplaceront les fichiers de vue d'article de composant par défaut.
. Ajouter un champ personnalisé à l'en-tête HTML
Pour ajouter le contenu du champ personnalisé au <head>
de la page, vous devrez éditer le fichier default.php que vous venez de créer.
Si vous ajoutiez une balise canonique, cela ressemblerait un peu à ceci.
//Insert custom field into HTML head if not empty
foreach ($this->item->jcfields as $field) {
//Replace X with the field ID number
if ($field->id === 'X') {
//Makes sure the field is not empty
if (!empty($field->rawvalue)) {
//Inserts the field content with markup into the HTML head
$customField = '<link href="' . $field->rawvalue . '" rel="canonical" />';
$document = JFactory::getDocument();
$document->addCustomTag($customField);
}
continue;
}
};
Vous devrez fournir le balisage HTML correct dans votre code. Vous devrez remplacer $customField = '<link href="' . $field->rawvalue . '" rel="canonical" />';
avec le balisage correct.
Par exemple, si vous souhaitez inclure un auteur de carte Twitter, vous utiliserez quelque chose comme ceci: $ customField = 'rawvalue. '"/>';`
Notez également que vous devrez remplacer le X
par l'ID de votre champ personnalisé.
Enfin, je renommerais $customField
à quelque chose d'un peu plus relavent.