J'essaie de définir le titre de la page, la méta-description et les méta-mots-clés pour améliorer le référencement sur une page ChronoForms v4 en ajoutant une action de code personnalisé dans la section Au chargement:
<?php
if ($form->data['LongTitle']) {
$document = JFactory::getDocument();
$document->setTitle($form->data['LongTitle']);
}
if ($form->data['MetaDescription']) {
$document = JFactory::getDocument();
$document->setDescription($form->data['MetaDescription']);
}
if ($form->data['MetaKeywords']) {
$document = JFactory::getDocument();
$document->setMetaData('keywords', $form->data['MetaKeywords']);
}
?>
setDescription
et setMetaData
fonctionnent bien mais setTitle
ne fonctionne pas.
Selon https://stackoverflow.com/a/31458607/1983389 , il apparaît que l'article ou l'option de menu peut définir le titre de la page plus tard que ChronoForm, en particulier lors du chargement de ChronoForm via le plugin de contenu de ChronoForms ( comme c'est le cas dans cet exemple).
Essayé d'ajouter une action Meta Tager (sic) dans la section en charge
L'option Meta Tager pose le même problème lorsque la méta-description et les méta-mots-clés sont définis correctement mais pas le titre de la page.
J'ai essayé de changer l'ordre des plugins de contenu
J'ai essayé de déplacer le plugin de contenu ChronoForms en dernier mais cela n'a pas aidé.
Essayé d'utiliser Regular Labs Sourcerer pour ajouter du code dans l'article
J'ai essayé d'ajouter le code directement dans l'article mais cela n'a pas fonctionné:
{chronoforms}Tour{/chronoforms}
{source}
<?php
$tour = JRequest::getVar('Tour');
$db = JFactory::getDBO();
$db->setQuery("SELECT cf_id,LongTitle FROM #__chronoforms_data_Tours WHERE cf_id='$tour'");
$result = $db->loadObject();
$tourname = $result->LongTitle;
if ($tourname) {
$document = JFactory::getDocument();
$document->setTitle($tourname);
}
?>
{/source}
JavaScript à la rescousse
Le titre de la page peut être défini via JavaScript conformément à https://stackoverflow.com/a/24881134
Dans ChronoForms, ajoutez une action "Load JS" à la section "On Load" avec le code suivant:
window.onload=function() {
changeTitle ('<?php echo $form->data['LongTitle']; ?>')
}
function changeTitle (newTitle) {
document.title=newTitle;
}
Cela fonctionne et apparemment Google analyse le contenu injecté par JavaScript.
Il est possible que d'autres moteurs de recherche ne voient pas le contenu injecté dans JavaScript. Ce n'est donc probablement pas la meilleure pratique. Cette méthode n'est recommandée que s'il n'existe pas de meilleur moyen de mettre à jour le titre de la page.
Je serais ravi de voir de meilleures réponses que ce travail médiocre.
Vous pouvez modifier:
joomla\components\com_chronoforms6\chronoforms6.php
et ajouter avant la ligne
$output = new JoomlaGCLoader2('front', 'chronoforms6', 'chronoforms', $chronoforms6_setup);
$doc = JFactory::getDocument();
$app = JFactory::getApplication();
$menu = $app->getMenu()->getActive()->id;
if ( $app->getMenu()->getActive()->params->get('menu-meta_description') != ''){
$doc->setDescription($app->getMenu()->getActive()->params->get('menu-meta_description'));
}
if ( $app->getMenu()->getActive()->params->get('menu-meta_keywords') != ''){
$doc->setMetadata('keywords', $app->getMenu()->getActive()->params->get('menu-meta_keywords'));
}
Cordialement.