web-dev-qa-db-fra.com

Comment définir le titre de la page depuis ChronoForms?

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}
1
Neil Robertson

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.

1
Neil Robertson

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.

0
DigitalDot