- 2010-03-10 (水) 18:19
- MovableType


- キーワードとかオーサーとか
もうじきオープンに出来るだろう某案件で「こんなの有り得ない」と言われた、没ネタです。
メタタグのキーワード(keywords)に、エントリータグとかカテゴリーをセットするコードはよく見かけるけれど、エントリータグとカテゴリーが同じだった時に、重複して登録されちゃうのは納得いかなかったので。(よく運用で重ならないように入力ってのもあるけど、そういう縛りが無いケースと思ってください)
で、ブログ記事(エントリー)のケースはこんな感じに・・・
<mt:SetVar name="meta_keywords{キーワード1}" value="1" />
<mt:SetVar name="meta_keywords{キーワード2}" value="1" />
<mt:SetVar name="meta_keywords{キーワード3}" value="1" />
<mt:EntryCategories>
<mt:CategoryLabel setvar="cat_label" />
<mt:Unless name="meta_keywords{$cat_label}">
<mt:SetVar name="meta_keywords{$cat_label}" value="0" />
</mt:Unless>
<mt:SetVar name="meta_keywords{$cat_label}" op="++" />
</mt:EntryCategories>
<mt:EntryTags>
<mt:TagName setvar="tag_name" />
<mt:Unless name="meta_keywordsn{$tag_name}">
<mt:SetVar name="meta_keywords{$tag_name}" value="0" />
</mt:Unless>
<mt:SetVar name="meta_keywords{$tag_name}" op="++" />
</mt:EntryTags>
<meta name="keywords" content="<mt:Loop name="meta_keywords" glue=" ," sort_by="value numeric reverse"><$mt:Var name="__key__"$></mt:Loop>" />
キーワード1とかは、いわゆる初期値って奴で、固定で入る奴をプリセット。一応重複個数でソートかかって出力されるので、どっかで個数リミットかけてもいいのかも。確か10個以下とか言われてましたよね。
カテゴリーは、その子カテゴリーのカテゴリーラベルと、最新10件のカテゴリーに含まれるエントリーのタグを使う様にしてみると、こんな感じに。
<mt:SetVar name="meta_keywords{キーワード1}" value="1" />
<mt:SetVar name="meta_keywords{キーワード2}" value="1" />
<mt:SetVar name="meta_keywords{キーワード3}" value="1" />
<mt:SubCategories include_current="1">
<mt:CategoryLabel setvar="cat_label" />
<mt:Unless name="meta_keywords{$cat_label}">
<mt:SetVar name="meta_keywords{$cat_label}" value="0" />
</mt:Unless>
<mt:SetVar name="meta_keywords{$cat_label}" op="++" />
</mt:SubCategories>
<mt:EntriesWithSubcategories lastn="10">
<mt:EntryTags>
<mt:TagName setvar="tag_name" />
<mt:Unless name="meta_keywordsn{$tag_name}">
<mt:SetVar name="meta_keywords{$tag_name}" value="0" />
</mt:Unless>
<mt:SetVar name="meta_keywords{$tag_name}" op="++" />
</mt:EntryTags>
</mt:EntriesWithSubcategories>
<meta name="keywords" content="<mt:Loop name="meta_keywords" glue=" ," sort_by="value numeric reverse"><mt:If name="__counter__" le="10"><$mt:Var name="__key__"$></mt:If></mt:Loop>" />
こうやって関連しそうなものを、ハッシュにぶち込んでやれば、自動でキーワードが生成できます。月別とかもあるけど、そこら辺も似たような感じで処理すれば良い筈です。
あと、エントリーキーワードも追加可能だけど、昔のエントリーキーワードをタグとして使ってた頃(MT3.2まで)を知ってる人なら解るだろうけど、タグのように分割はされていません。なので「複数語をカンマ区切りで入力」している様な昔ながらのヒト(たぶん居ないと思うけど)の場合には、プラグイン使って個別のタグに分解しなくてはならないかったりします。
実はまだそういう用途にTagwireプラグインが使えたりしますけど、MT3.3以降用MTタグとの重複回避で修正が必要なので、「ファンクションタグの内容を区切って配列に格納する SetArray プラグイン | Blog | weeeblog+」とか使うのが便利かもしれません。
さて、デスクリプション(description)は基本分岐のみだから飛ばして、メタタグのオーサー(author)について。
エントリーを書いたヒトというのがわかり易い設定ですが、じゃあ月別やカテゴリー別のアーカイブはどうしたら・・・と考えた結果、そのアーカイブに含まれるエントリーの書いたヒトをリストアップで良いんじゃないかと思ったわけです。
もちろんハッシュ使ってで重複削除するから、書いたヒトが一人だったら一人になります。(普通一人なんだから直書きしちゃえばと言われれば、その通りなんですが)
<meta name="author" content="<mt:Entries><mt:EntryAuthorDisplayName setvar="authorname"$><mt:SetVar name="seen" key="$authorname" value="1"></mt:Entries><mt:Loop name="seen" glue=" ,"><$mt:Var name="__key__"$></mt:Loop>" />
一応、汎用的に使えるテンプレートのコードとして作ったつもりなので、次期のmt.Vicunaに使おうかなと思案中です。
- Newer >: 2冊目の本が出ます
- < Older: バグらしきもののその後
ping a Trackback
- TrackBack URL for this entry.(1)




スクリプトの読み込みが完了していません。
メールフォーム(Javascriptを使用していません)や、
Twitter経由のCommentでもReplyいたします。ただし返信はブログのコメントとして行う事もあります。