オープンソースCMSのMODxでは、MODxマネージャの「リソース」→「METAタグとキーワードの管理」で登録したmeta要素の属性値とキーワードを、「ドキュメントの作成/編集」→「META キーワード」タブからドキュメントごとに設定することができます。設定したmeta要素の属性値とキーワードは、head要素の開始タグの直後に自動的に挿入されますが、プラグインとスニペットを作成することによってmeta要素の挿入位置を変えることができます。
現在のMODx(0.9.6)では、head要素の開始タグ内に空白文字がある場合や属性が指定されている場合に、METAタグとキーワードの自動挿入が機能しない不具合がある。なんらかの原因でmeta要素の自動挿入が機能しない場合も、この方法で解決することができる。
次の手順で、meta要素の自動挿入を無効化するプラグインを作成します。
$modx->documentObject['haskeywords'] = '0';
$modx->documentObject['hasmetatags'] = '0';
優先順位を最下位にしなかった場合、METAタグやキーワードを扱うほかのプラグインが正常に機能しない可能性がある。
次の手順で、「META キーワード」タブで設定されているmeta要素を出力するスニペットを作成します。
<?php
$MetaTags = '';
$id = $modx->documentObject['id'];
$obj = $modx->getDocumentObject('id', $id);
if ($obj['haskeywords'] == 1) {
$keywords = implode(', ', $modx->getKeywords());
$MetaTags = '<meta name="keywords" content="' . $keywords . '" />' . "\n";
}
if ($obj['hasmetatags'] == 1) {
$tags = $modx->getMETATags();
foreach ($tags as $n => $col) {
$attr = $col['http_equiv'] ? 'http-equiv' : 'name';
$value = strtolower($col['tag']);
$content = $col['tagvalue'];
$MetaTags .= '<meta ' . $attr . '="' . $value . '" content="' . $content . '" />' . "\n";
}
}
return $MetaTags;
?>
ドキュメント内のmeta要素を出力したい部分で、次のようにスニペットコールします。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
<head profile="http://purl.org/net/ns/metaprof">
[[MetaTags]]
<title>ページタイトル</title>
</head>