• キーワード、ディスクリプションについて。#

  • kenzooo Reply #1, 5 years ago

    Reply
    マネージャー画面でキーワード、ディスクリプションを設定するのは理解しているのですが、
    設定後、HTMLを確認してもそのとおりにキーワード等が埋め込まれていないと思うのですが。

    これはどういう仕組みになっているのでしょうか、初歩的な質問で申し訳ないのですが
    みなさま、ご教示のほどよろしくお願いします。


  • MEGU Reply #2, 5 years ago

    Reply
    えーと。。
    こういう状態で、保存しないと、キーワードとしてページに書き出されない仕様と思いますが。。
    どうでしょう。。


  • MEGU Reply #3, 5 years ago

    Reply
    ちょっと不親切な説明でごめんなさい。

    リソース>メタタグとキーワードの管理で、設定した後、
    それぞれのページのメタキーワードの画面で、上図のように
    選択状態にして、保存します。


  • zero_07 Reply #4, 5 years ago

    Reply
    META KEYWORDは、MEGUさんの説明の通りに選択したものが自動的にMETAタグで出力されます。
    Descriptionは、テンプレートに以下のようにMETAタグを埋め込まないと駄目だった気がします。
    <meta name=âdescription" content="[*description*]" />
    


    0.9.5のサンプルのテンプレートには入ってなかったので、たぶんそうかと


  • MEGU Reply #5, 5 years ago

    Reply
    あれ。。?
    リソース>メタタグとキーワードの管理で、設定して
    各ドキュメントで、その登録したメタタグを選んで保存。。すると
    descriptionもhtmlに書き出されますよね。。??
    ...違う事言ってます…?^^;


  • zero_07 Reply #6, 5 years ago

    Reply
    あれ? 自動で埋め込まれました??
    おいらのがおかしいのかも・・・


  • MEGU Reply #7, 5 years ago

    Reply
    えっと。確認しました。
    リソース>メタタグとキーワードの管理でmetadescription01.gifの様に設定して
    各ドキュメントのメタキーワードでmetadescription02.gifの様に選んで保存。
    で、書き出されます。


  • zero_07 Reply #8, 5 years ago

    Reply
    META管理の方でしたね すっかり、間違えた。
    ドキュメントの説明(Description)をMETAに利用する方だと思いました(^^;



  • Phize Reply #9, 4 years, 7 months ago

    Reply
    こんばんは、Phizeです。
    どうしてもMetaタグ・キーワードが自動で出力されず困っていました。
    みなさん、問題なく(?)出力されているとのことで、ふとインストール時のテンプレートに戻してみたところうまくいきました。

    結果、なぜ私のテンプレートでうまくいかなかったのかがわかりましたので、
    同じような方の参考になりましたらと思い、ご報告させていただきます(すでに出てましたらすみません)。

    ドキュメントでMetaタグ・キーワードの設定を正しくしているにもかかわらず、meta要素が自動出力されないと言う方は、head要素の開始タグを疑ってみてください。
    開始タグが「<head>」以外の場合、つまり、空白文字があったり、profile属性等の属性の記述がある場合にはmeta要素が出力されません。
    属性を記述したい場合には、プラグインの作成、あるいは、コアスクリプトの改造の必要があります。

    原因となっている箇所があるのは、/manager/includes/document.parser.class.inc.php の mergeDocumentMETATagsメソッドです。
    下記のようなプラグインを作成すると、空白文字、属性の有無にかかわらずmeta要素が出力されるようになります。

    【環境】
    XREA(PHP4 + MySQL 4.0.26) + MODx 0.9.6

    【解決策】
    1.新しくプラグインを作ります(名前は適当に決めてください)
    2.プラグインコードに下記のコードをコピー&ペーストします
    3.「システムイベント」タブで「OnParseDocument」イベントにチェックをつけます
    4.プラグインを「保存」します
    5.これでmeta要素が正しく出力されるようになります


    $event = &$modx->Event;
    
    if ($event->name == 'OnParseDocument') {
            if ($modx->documentObject['haskeywords'] == 1) {
                // insert keywords
                $keywords= implode(", ", $modx->getKeywords());
                $metas= "\t<meta name=\"keywords\" content=\"$keywords\" />\n";
    
    	    // Don't process when cached
    	    $modx->documentObject['haskeywords'] = '0';
            }
            if ($modx->documentObject['hasmetatags'] == 1) {
                // insert meta tags
                $tags= $modx->getMETATags();
                foreach ($tags as $n => $col) {
                    $tag= strtolower($col['tag']);
                    $tagvalue= $col['tagvalue'];
                    $tagstyle= $col['http_equiv'] ? 'http-equiv' : 'name';
                    $metas .= "\t<meta $tagstyle=\"$tag\" content=\"$tagvalue\" />\n";
                }
    
    	    // Don't process when cached
    	    $modx->documentObject['hasmetatags'] = '0';
            }
    
    	if ($metas) {
                $template = &$modx->documentOutput;
                $template = preg_replace("/(<(\s*)head(\s*)(.*?)(\s*)>)/i", "\\1\n\t" . trim($metas), $template);
            }
    }


    (あまりよい正規表現ではないと思いますので、もっとよい書き方がありましたらご教示いただけましたら幸いです。)

    ドキュメントオブジェクトの'haskeywords'、'hasmetatags'の値は、
    meta要素の挿入の可否に関わらず、このプラグイン、またはmergeDocumentMETATagsメソッドが呼ばれた時点で「0」となってしまいます。
    スニペット等でこれらのドキュメントオブジェクトの値を利用したい場合は、事前にgetDocumentObjectメソッドを呼んでDBから取得する必要がありそうです。


  • yama Reply #10, 4 years, 7 months ago

    Reply