web-dev-qa-db-ja.com

ChronoForms内からページタイトルを設定するにはどうすればよいですか?

ページのタイトル、メタの説明、メタキーワードを設定して、[読み込み時]セクションにカスタムコードアクションを追加することで ChronoForms v4ページのSEOを改善しようとしています。

<?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およびsetMetaDataは正常に機能しますが、setTitleは機能しません。

https://stackoverflow.com/a/31458607/1983389 のように、特にChronoFormsコンテンツプラグイン(この例のように)。

On Loadセクションにメタタガー(シック)アクションを追加しようとしました

メタタガーオプションには、メタ説明とメタキーワードがOKに設定されているがページタイトルが設定されていない場合と同じ問題があります。

コンテンツプラグインの順序を変更しようとしました

私は最後にChronoFormsコンテンツプラグインを移動しようとしましたが、これは役に立ちませんでした。

Regular Labs Sourcerer を使用してコードを記事に追加しようとしました

記事にコードを直接追加しようとしましたが、これはうまくいきませんでした:

{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で救出

ページタイトルはJavaScriptを介して設定できます https://stackoverflow.com/a/24881134

ChronoFormsで、次のコードを使用して、「Load JS」アクションを「On Load」セクションに追加します。

window.onload=function() {
  changeTitle ('<?php echo $form->data['LongTitle']; ?>')
}
function changeTitle (newTitle) {
  document.title=newTitle;            
}  

これは機能し、 どうやら GoogleはJavaScriptによって挿入されたコンテンツをクロールします。

他の検索エンジンはJavaScriptが挿入されたコンテンツを表示しない可能性があるため、これはおそらくベストプラクティスではなく、この方法は、ページタイトルを更新するためのより良い方法がない場合にのみ推奨されます。

私はこの貧弱な回避策よりもいくつかの良い答えを見つけてうれしいです。

1
Neil Robertson

以下を変更できます。

joomla\components\com_chronoforms6\chronoforms6.php

行の前に追加

$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'));
}

よろしく。

0
DigitalDot