web-dev-qa-db-fra.com

Les champs personnalisés ne rendent pas le shortcode du plugin

J'utilise les champs personnalisés introduits dans Joomla 3.7 pour structurer les articles dans Joomla 3.8.3. installation. Un de mes champs personnalisés contient un shortcode qui doit être rendu par un autre plugin. Mais tout ce que je peux obtenir en affichant ce champ est la valeur du champ personnalisé, pas le contenu rendu.

Par exemple:

  • champ personnalisé id = 3;
  • type de champ personnalisé = texte;
  • valeur de champ personnalisé = {image} chemin/vers/image.jpg {/ image}.

Dans l'article, j'appelle {field 3}.

Le résultat attendu serait image avec chemin url/to/image.jpg.

Le résultat réel est le texte brut {image} chemin/vers/image.jpg {/ image}.

Je ne sais pas s'il y a une option que je dois changer pour forcer le rendu du champ personnalisé par plug-in ou créer un remplacement. Cela fonctionne dans mon installation précédente de Joomla, mais après avoir piraté mon serveur, la sauvegarde ne restaure pas le comportement attendu.

Edit: j’ai oublié de mentionner que l’utilisation du rendu du code court du plug-in est correcte, il ne s’agit donc pas d’un problème de plug-in, de Joomla ou de serveur.

Quelqu'un peut-il m'aider s'il vous plaît. Cordialement; Luka

1
Luka Oman

La réponse a été donnée sur le forum: https://forum.joomla.org/ par l'utilisateur effrit .

Vous devez créer un remplacement de mise en page pour le champ. Allez dans Extensions => Modèles => Modèles. Sélectionnez [VOTRE MODÈLE] - Détails et fichiers. Cliquez sur Create override et sélectionnez Layouts => com_fields => fields. Cela copiera le fichier render.php de com_field dans le répertoire de substitution d'un modèle (chemin d'accès: /templates/YOUR-TEMPLATE/html/layouts/com_fields/field/render.php). Allez dans l'éditeur et sélectionnez le html => layouts => com_fields => field => render.php.

Trouvez la chaîne suivante

<span class="field-value"><?php echo $value; ?></span>

et le remplacer par

<span class="field-value"><?php echo JHtml::_('content.prepare',$value); ?></span>

Vous pouvez bien sûr utiliser id de champ uniquement pour remplacer les champs qui en ont besoin:

<?php if ( ($field->id == 'X') or ($field->id == 'Y') ) : ?>
    <span class="field-value"><?php echo JHtml::_('content.prepare',$value); ?></span>
<?php else : ?>
    <span class="field-value"><?php echo $value; ?></span>
<?php endif; ?>
2
Luka Oman