Jul 03, 2009, 09:40 PM *
Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length
Search via SMF or Google: modx forums all of modxcms.com web
  MODxCMS.com   Forums   Help Login Register  
News:Donate to MODx: Donations
Pages: [1]   Go Down
  Print  
Author Topic: キーワード、ディスクリプションについて。  (Read 4803 times)
0 Members and 1 Guest are viewing this topic.
kenzooo
Jr. Member
*
Posts: 11


« on: Jan 31, 2007, 05:56 PM »

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

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



WWW
« Reply #1 on: Jan 31, 2007, 08:34 PM »

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


* keyword.gif (4.74 KB, 251x101 - viewed 374 times.)
Logged
MEGU
Committed to MODx
*****
Posts: 873



WWW
« Reply #2 on: Jan 31, 2007, 08:39 PM »

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

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



WWW
« Reply #3 on: Jan 31, 2007, 09:19 PM »

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

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

MEGU
Committed to MODx
*****
Posts: 873



WWW
« Reply #4 on: Feb 01, 2007, 03:38 AM »

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



WWW
« Reply #5 on: Feb 01, 2007, 04:31 AM »

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

MEGU
Committed to MODx
*****
Posts: 873



WWW
« Reply #6 on: Feb 01, 2007, 08:22 PM »

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


* metadescription01.gif (2.45 KB, 589x66 - viewed 379 times.)

* metadescription02.gif (2.88 KB, 475x128 - viewed 388 times.)
Logged
ZeRo
Sr. Member
****
Posts: 426



WWW
« Reply #7 on: Feb 01, 2007, 08:56 PM »

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

Logged

Phize
Member
**
Posts: 82



WWW
« Reply #8 on: Jun 24, 2007, 11:47 AM »

こんばんは、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要素が正しく出力されるようになります


Code:
$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から取得する必要がありそうです。
« Last Edit: Jun 24, 2007, 12:41 PM by Phize » Logged

yama
Moderator
*
Posts: 765

MODx研究中


WWW
« Reply #9 on: Jun 27, 2007, 10:10 AM »

この部分、
<meta name=”keywords" content="[*keywords*]" />

というふうにしてくれたほうが汎用性があって便利なのになー。と思わなくもないです。
今の仕様だとDreamweaverなどでまるごと作ったテンプレートを外部ファイルとして
読み込んだ時、この機能が働かないんですよねー。。
Logged
Phize
Member
**
Posts: 82



WWW
« Reply #10 on: Jun 27, 2007, 10:58 AM »

Quote
<meta name=”keywords" content="[*keywords*]" />
というふうにしてくれたほうが汎用性があって便利なのになー。と思わなくもないです。

同感です。気になったので、自分のところでは応急処置としてスニペットでキーワードなどを表示するようにして対応してみました。
ひょっとしたらどなたかのお役に立つのかもしれませんのでそちらの手順も上げておきます Roll Eyes
もっとスマートな方法がありそうな気もしていますが…
そして、これだと'haskeywords'、'hasmetatags'を使うプラグインなどが間に挟まるとおかしくなるかもしれません Cry

【1】'haskeywords'、'hasmetatags'を'0'にするプラグインを登録する
 1.適当な名前のプラグインを新規作成する
 2.下記のコードをペースト
 3.「OnParseDocument」イベントにチェックして保存

Code:
$modx->documentObject['haskeywords'] = '0';
$modx->documentObject['hasmetatags'] = '0';

【2】キーワードなどを表示するスニペットを作る
 1.適当な名前のスニペットを新規作成する(ここでは例として「metaTags」にしました。)
 2.下記のコードをペーストして保存
 3.キーワードなどのmeta要素を入れたい場所に [[metaTags]] と挿入する

Code:
<?php
$metaTags 
"";

$docId $modx->documentObject['id'];
$docObj $modx->getDocumentObject('id'$docId);

if (
$docObj['haskeywords'] == 1) {
    
$keywords implode(', '$modx->getKeywords());
    
$metaTags '<meta name="keywords" content="' $keywords '" />' "\n";
}

if (
$docObj['hasmetatags'] == 1) {
    
$tags $modx->getMETATags();
    foreach (
$tags as $n => $col) {
        
$tag strtolower($col['tag']);
        
$tagvalue $col['tagvalue'];
        
$tagstyle $col['http_equiv'] ? 'http-equiv' 'name';
        
$metaTags .= '<meta ' $tagstyle '="' $tag '" content="' $tagvalue '" />' "\n";
    }
}

return 
$metaTags;
?>


【おまけ】キーワードだけを取得・表示したい場合は次のようなスニペットを用意する。

Code:
<?php
$keywords 
"";

$docId $modx->documentObject['id'];
$docObj $modx->getDocumentObject('id'$docId);

if (
$docObj['haskeywords'] == 1) {
    
$keywords implode(', '$modx->getKeywords());
}

return 
$keywords;
?>
« Last Edit: Jun 27, 2007, 11:27 AM by Phize » Logged

Pages: [1]   Go Up
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP

Copyright © 2005-2008 MODxCMS, All rights reserved. Contact Us
Styles by ziworks.com

Powered by SMF | SMF © 2006-2008, Simple Machines LLC

Valid XHTML 1.0! Valid CSS!