http://から始まる<$mt:BlogURL$>や<$mt:EntryPermalink$>をそのまま使うことはできません。
そういうときに役立った記述をメモしておきます。
■サイトURLをルートパスで出力
<$mt:BlogRelativeURL$>
→ /blogurl/
■記事リストのURLをルートパスで出力
<$mt:BlogRelativeURL$><$mt:CategoryBasename$>/
→ /blogurl/category/
※階層数によって、<mt:ParentCategory>などを使って全ての階層を出力します
■記事のURLをルートパスで出力
<$mt:BlogRelativeURL$><$mt:EntryDate format="%Y/%m/"$><$mt:EntryBasename separator="-"$><$mt:BlogFileExtension$>
→ /blogurl/2013/07/basename.html
以上。
他にもあれば追記してきます。
改行やpタグの制御についてです。
まず、テキストフィールドには下記のように入っているとします。
あいうえお
かきくけこ
さしすせそ
これを改行を活かして出力するには、
下記のようにします。
※本文の「改行を変換」と同様になります
<$mt:customField convert_breaks="1"$>
出力
--------------------
<p>あいうえお<br />
かきくけこ<br />
さしすせそ</p>
--------------------
逆にpタグやbrタグが入らないようにするには、
convert_breaks="0" とします。
<$mt:customField convert_breaks="0"$>
出力
--------------------
あいうえお
かきくけこ
さしすせそ
--------------------
pタグで囲まれずに改行が<br>になるようにするには以下のようにします。
<$mt:customField convert_breaks="0" nl2br="1"$>
出力
--------------------
あいうえお<br />
かきくけこ<br />
さしすせそ
--------------------
参考にしたサイトはこちら。
カスタムフィールドの段落と改行の制御について | タグ:カスタムフィールド | MovableType | いろいろコードスニペット
・サブカテゴリーA
・サブカテゴリーB
・サブカテゴリーC
●カテゴリーB
●カテゴリーC
上記のような構造で、例えばサブカテゴリーAのアーカイブページに、
親であるカテゴリーAの「カテゴリ月別アーカイブリスト」を出力しようとしても、
サブカテゴリーAのものが出力されてしまいました。
ソースは下記のような感じです。
<mt:TopLevelParent>
<ul>
<mt:ArchiveList archive_type="Category-Monthly">
<li><a href="<$mt:ArchiveLink$>"><$mt:ArchiveDate$></a></li>
</mt:ArchiveList>
</ul>
</mt:TopLevelParent>
散々悩みましたが、最終的には次のようにすることで解決できました。
<mt:BlogID setvar="blog_id">
<mt:Blogs include_blogs="$blog_id" ignore_archive_context="1">
<mt:IfCategory name="カテゴリー名">
<ul>
<mt:ArchiveList archive_type="Category-Monthly">
<li><a href="<$mt:ArchiveLink$>"><$mt:ArchiveDate$></a></li>
</mt:ArchiveList>
</ul>
</mt:IfCategory>
</mt:Blogs>
ブログIDからの指定にして「ignore_archive_context="1"」と入れることで、
アーカイブページでも全ての記事を参照できるようになるそうです。
スパムコメントを防ぎきれなかったため、次なる対策を講じることに。
今回はプラグインも取り入れます!
■keystrokes.pl
http://overstated.net/projects/mt-keystrokes/
このプラグインは、
・コメントフォームに直接入力したか
・送信ボタンを直接押したか
をJavaScriptで判断し、そうでないものを弾いてくれます。
JSが無効だとコメントできないため、少し乱暴な気もしますが・・
スパム対策には間違いなく有効だとのことで。
またMT3.X用ですが、修正すれば5.Xでも使えます。
■手順
1. keystrokes.plをダウンロード
http://overstated.net/projects/mt-keystrokes/
上記サイトの右上にある「DOWNLOAD」から、keystrokes-0.1.5.zip をダウンロード。
※0.1.5と書かれていますが落せるデータは0.1.4です。
さらにプラグイン内に書かれたバージョンは0.1.3になってます。不思議ですが問題なし。
2. 解凍後、plugins フォルダ内の keystrokes.pl を修正
return 1 unless $MT::VERSION =~ m(^3\.);
赤字部分を5(使っているMTのバージョン)に変えます。
3. MTフォルダ内の plugins フォルダに keystrokes.pl をアップ
ダイナミック・パブリッシングを使っている場合は、
php フォルダも同様に MT > php フォルダにアップ。
4. テンプレートを修正
コメントフォームのソースが書かれたテンプレートを下記のように書き換える。
(デフォルトなら コメント と コメントプレビュー )
●<form>タグの直後に <$MTKeystrokes$> を追加
<form method="post" action="<$MTCGIPath$><$MTCommentScript$>" name="comments_form" id="comments-form" onsubmit="if (this.bakecookie.checked) rememberMe(this)">
<$MTKeystrokes$>
<input type="hidden" name="static" value="1" />
●<textarea>タグに onkeypress="keystrokes(this.form)" を追加
<textarea id="comment-text" name="text" onkeypress="keystrokes(this.form)" rows="15" cols="50">
●投稿ボタンの<input>タグに onclick="keystrokes(this.form)" を追加
<input type="submit" onclick="keystrokes(this.form)" accesskey="s" name="post" id="comment-submit" value="投稿" />
5. 再構築
以上で完了です。
これで今度こそスパムコメント対策ができた!・・はずです。
【参考にした記事】
Movabletype3.3コメントスパム対策 | フリーソフトダウンロード5
http://ww-ape.com/movabletype/kome_spam3.html
MT5.1の再構築 早し!!
http://trendate.com/blog/archives/2010/02/mt51.php
なにかスパム対策を施してみることに。
※一週間ほど様子をみましたが、下記の方法では現在来ている
スパムコメントを防げないようでした。
そのため新しい対策を こちら で取っています。
どうやらスパマーはコメントフォームのHTMLに書かれている
コメントCGIのパスを参照してくるそうで、
そのパスを実体参照にすればほとんどのスパムコメントを防げるとか。
合わせて、コメントCGIのファイル名も変更すると効果UPだそうです。
(デフォルトではmt-comments.cgi)
■手順
1. MTフォルダにある「mt-comments.cgi」を適当な名前にリネーム
2. 1で新たにつけたファイル名を、こちらのサイト等で変換
3. 同階層にある「mt-config.cgi」を開き、一番下に下記を追記
--------------------
CommentScript ○○○○(2で変換した文字列)
--------------------
4. 再構築
これで完了です。
ブログのテンプレートで<$mt:CommentScript$>タグを使って
コメントCGIを参照しているブログならこれだけでOKですし、
新しくブログを作ったときも反映されるのでお手軽です。
MovableTypeにて、entrytitleやentrybody内の文字列にダブルクオテーション「"」を使うと、javascriptを使用した際にエラーになってしまいます。
以前、この問題で悩んだ際に解決方法を教えてもらったような、検索したような気がしますが、急に対応が必要でなかったこともあり放っておいてしまいました。今、対応が必要となり探ります。
MT タグとあわせて利用する「グローバル・モディファイア」というものがあるようです。アトリビュートですね。
まずは、replaceというものがあるようです。
たとえば、「&」を「&」に置き換えるには
<$mt:entrytitle replace="&","&"$>
となります。
便利そうですが、今回の「"」の置き換えは、これで解決できそうにありません。
ここで、違うグローバルモディファイアを発見しました。
Movable Typeの『グローバル・モディファイアリファレンス』(encode_htmlとかencode_js)
-----
●encode_js
javascriptで「"」を入れるとエラーになるので変換してくれます。
「"」を「¥"」という形に変換してくれます。
『<$mt:EntryTitle encode_js="1" $>』
こんな感じで使用します。
-----
1 に設定すると、MT タグの値が javascript の文字列の値として使えるようにエンコードするようです。解決方法はまさにこれです。
この他にも
●encode_html
1 に設定すると、MT タグの値が 「<」を「<」、「&」を「 」などの形にHTMLエンコード
↓
『<$mt:EntryTitle encode_html="1" $>』
こんなのが、かなり使えそう。助かりました。
すでに多くの方々がまとめていますが、cronの設定が必要です。
基本的には、
・MTディレクトリ/tools/ にある「run-periodic-tasks」のパーミッションを「755」などの実行可能なものにする
・「run-periodic-tasks」を定期実行させるようcronに設定
これで指定日公開が可能になります。
弊社環境(CPIサーバー)の場合、これに加えて、
・「run-periodic-tasks」内の一部を修正する
という作業が必要でした。
修正内容は以下↓
----------------------------------------------------------
use lib 'lib', '../lib', 'extlib', '../extlib';
----------------------------------------------------------
という部分を探し、
サーバー内の絶対パスに修正します。
(修正後)
----------------------------------------------------------
use lib 'lib', '/usr/home/ユーザーID/html/mtディレクトリ/lib', 'extlib', '/usr/home/ユーザーID/html/mtディレクトリ/extlib';
----------------------------------------------------------
この状態でアップしなおせば完了です。
4.MTのインポート機能を使って一括登録
最後はもうわざわざ書くほどのことではないのですが、
できた記事データをMTにインポートします。
メニューの「ツール」から「記事のインポート」を選び、
作成した記事データを指定します。
他の設定はデフォルトでやりました。
ちなみに前回の文字コード変更がうまくいってない場合、
インポートしても記事が登録されません。
これで、無事にすべての記事が登録されれば完了です。
3.テキストエディタなどで文字コードを変換
データの整形は終わりましたが、このままではまだインポートすることができません。
なぜかというと、文字コードと改行コードがMTにあっていないからです。
■MTで扱えるデータ
文字コード:UTF-8
改行コード:LF
■整形したデータ
文字コード:Shift-JIS
改行コード:CR+LF(winの場合?)
となっています。
各種テキストエディタで変換してみてください。
ちなみに自分は秀丸エディタを使っています。
一度テキストをすべてコピーして削除、エンコードの種類をUTF-8に変更/改行コードをLFに変更したのち、貼りつけしています。
もっとうまい方法もありそうな。
次回に続きます。
2.データをMovable Type形式に整形する
登録するデータの準備ができたら、次はMTにインポートできるようにデータを整形します。
まずMT形式がどういうものかですが、適当な記事を作って「記事のエクスポート」をすると以下のような形で吐き出されます。
----------------------------------------------------------------------
AUTHOR: gravity
TITLE: 記事タイトル
BASENAME: 01
STATUS: Publish
ALLOW COMMENTS: 0
CONVERT BREAKS: 0
ALLOW PINGS: 0
PRIMARY CATEGORY: カテゴリー1
CATEGORY: カテゴリー1
CATEGORY: カテゴリー2
DATE: 11/25/2009 03:33:10 PM
TAGS:
-----
BODY:
テスト文章です。
-----
EXTENDED BODY:
-----
EXCERPT:
-----
KEYWORDS:
-----
-----
CF50_test1: カスタムフィールド1
CF50_test2: カスタムフィールド2
--------
----------------------------------------------------------------------これが1つの記事情報で、登録する分だけズラッと並ぶことになります。
前回作ったCSVデータを整形して、上のようなデータを作ります。
CSVというのは要素をカンマ区切りにして並べたデータ形式のことです。
中身はこんな感じになります。
データA, 要素1, 要素2, 要素3
データB, 要素1, 要素2, 要素3
データC, 要素1, 要素2, 要素3
この1行1行をひとつの記事として、たとえば
タイトル, 本文, カテゴリー1, カテゴリー2, カスタムフィールド
という感じで記事のデータを入れていき、まとめてアップしようということです。
MTで「ファイルのアップロード」を選択すると、アップロード先を指定するフォームが出てくると思います。
通常では<サイトパス>直下になっているので、これを「<サイトパス>/ images 」がデフォルトで表示されるように設定してみます。
ちなみにMT4.Xの場合です。
まずはMTのテンプレートファイルを探します。
<MTのディレクトリ>/tmpl/cms/include/asset_upload.tmpl
2010/1/22 修正
includeディレクトリ内のファイルを直すのが正しいようです。
dialogディレクトリ内の同名ファイルを直した場合でも上手くいっていたのですが、
別の環境でも設定してみたところそちらでは上手く動きませんでした・・
この asset_upload.tmpl ファイルを持ってきましょう。
ファイルを開き、一行目に次のように追記します。
<mt:setvar name="extra_path" value="images">
今回は、「<サイトパス>/ images 」としたいので、valueに images と入力します。
あとはこれを上書きすれば完了なのですが、簡単な修正とはいえ、元のファイルに上書きすることはなるべく避けたいところです。
そういうときに、alt-tmplフォルダを利用します。
tmplフォルダと同階層にalt-tmplというフォルダがあるので、
その中に今回手を加えた「asset_upload.tmpl」までの階層を再現します。
今回でしたら
alt-tmpl/cms/include/
となるように階層を作り、その中に先ほど修正した asset_upload.tmpl を入れます。
すると、MTが優先してこのファイルを読んでくれます。
元のファイルを残すことができるので、いざというときに助かりそうです。
とても簡単なことだけですが・・。
そういうとき、「alt-tmpl」というフォルダを活用すると、元のファイルを残したまま設定をいじることができます。
「alt-tmpl」フォルダは、MTをインストールしたディレクトリにあります。
テンプレートファイルをカスタマイズした後、そのまま元のファイルに上書きするのではなく、
「alt-tmpl」フォルダの中に「tmpl」フォルダ以下と同じ階層構造で入れることで、そのファイルを優先して読ませることができます。
これは管理の面で、いろいろと役に立ちそうです。
これで<img>タグのスタイルは消えてくれますが、その画像を囲む<form>タグ(書き出し後は<span>タグ)のスタイルは消えてくれません。
こちらはMTの設定ファイルを修正しなければならないようです。
この内容が書かれたデータはどれかというと、
MTのディレクトリ/lib/MT/Asset.pm
これです。このファイルを修正します。
※念のため、元のデータは残しておいたほうがいいです。Asset.pm-originalとかで
このデータの中の354行目から、
sub enclose {
my $asset = shift;
my ($html) = @_;
my $id = $asset->id;
my $type = $asset->class;
return qq{<form mt:asset-id="$id" class="mt-enclosure mt-enclosure-$type" style="display: inline;">$html</form>};
}
こんなふうに書かれている一文があると思います。
赤字の部分が、画像を囲む<form>タグの設定をしている部分です。
スタイルがいらない場合は、「style="display: inline;"」の部分を取ってしまえばよいです。
修正が終わったら、元の場所にアップして完了です。
訪れたユーザーにこのWEBサイトがどんな構造かわかりやすく紹介するためのサイトマップ、ではなくて、検索エンジンのクローラーにホームページの中身をお知らせするためのxmlサイトマップをMTで作成する。ホームページをMovableTypeでサイトを構築したら行いたい作業です。
sitemaps.orgにてGoogle、Yahoo!、Microsoft(Live Search)で認識される共通のサイトマップ書式のようです。
******************************
インデックステンプレートに"Sitemap.xml"という名称で書き出されるように、テンプレートを新規作成。下記がソース。
******************************
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc><$MTBlogURL encode_xml="1"$></loc>
<lastmod><$MTDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<MTEntries lastn="9999">
<url>
<loc><$MTEntryPermalink encode_xml="1"$></loc>
<lastmod><$MTEntryModifiedDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></lastmod>
</url>
</MTEntries>
</urlset>
******************************
後は各登録エンジンに設置したSitemap.xmlを通達。
Googleウェブマスターツール
右メニューの"サイトマップ"から、アップされいているSitemap.xmlを指定。
Yahooサイトエクスプローラー
フィード"から、アップされいているSitemap.xmlを指定。
Live Search Webmaster Center
ツールが無い模様。robots.txtにsitemapのアドレスを登録することが出来る。
******************************
******************************
robots.txtを作成しルート階層にアップ。
******************************
すべての検索エンジンのクロールしてもらう場合。
User-Agent: *
Allow: /
Sitemap: //www.gravity-works.jp/Sitemap.xml
その他、robots.txt階層ごとに拒否など。
表示上は問題ないのですが、SEO的にどうなんだということで整えます。
テンプレートを見やすくするための改行や、条件分岐なんかが主な原因なのでしょうが、さすがにテンプレートの改行を全て取るわけにもいきません・・^^;
なので、テンプレートを変えずにソースを整えてくれる便利なプラグインを探しました。
SmartReturnプラグイン
HTMLから連続した改行とかをクリーンアップするプラグイン>
こちらで、ぴったりのプラグインを配布されています。
不自然に改行がたくさん入ってしまうような部分を整えてくれます。
全ての改行を取るわけではないので、ソースが見づらくなってしまうようなこともありません。
ダウンロードしたzipを解凍するとplファイルが出てくるので、サーバーにインストールしたMTフォルダの中にあるpluginsフォルダにアップします。
これで再構築をかければ完了です。
MTを始めたころから気になっていたので、とてもすっきりしました(笑
元は別ブログ用にと用意したものなのですが、せっかくなので設置してみることに。
多少は使いやすくなったでしょうか?
今回はこちらのソースを使わせていただきました。
MT4.2(旧4.15)ではカテゴリ検索が備わってるの・・・かな?
テンプレートにちょっと追加するだけなので、とっても簡単です。
追加の仕方は以下。
1. MTの管理画面から、「検索」のテンプレートを開きます。
(MT4だと「ウィジェット」の中にあります)
2. <form>タグの中に、テキスト検索用のタグが書かれているので
<input type="hidden" id="select" name="limit" value="<$mt:SearchMaxResults$>" />
<select name="category">
<option value="0">全カテゴリー</option>
<MTTopLevelCategories>
<MTSubCatIsFirst></MTSubCatIsFirst><MTIfNonZero tag="MTCategoryCount">
<option value="<mt:categorylabel>"><$MTCategoryLabel$> [<$MTCategoryCount$>]</option>
</MTIfNonZero><MTSubCatsRecurse><MTSubCatIsLast></MTSubCatIsLast>
</MTTopLevelCategories>
</select>
を追加します。
あとは、<div> で囲ったりしてスタイルを当てれば完了です。
検索してもなかなか見つからなかったので、とても助かりました^^;
ブログのメニューからツール>エクスポートとやれば、記事のデータをテキスト形式にして書き出すことができます。
テキスト形式なので確認や編集が楽(テキストを編集してインポートすれば反映される)ですし、なくなって一番困るのは記事データのような気もしますしね・・。
MTでのブログ内検索についてです。
ブログの検索フォームからキーワード検索を行った場合、検索の対象となるのは
・タイトル
・本文
・続き
・キーワード
の4つです。
書き出されたテキストが検索対象になるわけではありません。
検索対象を新しく増やしたい場合、下記のサイト様で配布されているプラグインを使用することで、カスタムフィールドを検索対象にすることができます。
■Technology on Information
MT > CustomFieldsSearch
こちらで配布されている「CustomFieldsSearch」を使用します。
簡単に説明しますと、
1.ダウンロードしたデータをプラグインフォルダにアップします。
管理画面を開いている場合は再ログイン。
2.MT管理画面から「デザイン」>「ウィジット」から「検索」テンプレートを開きます。(MT4.2)
3.
思いっきり間違えてました・・
正しくは4行目あたり、<form method="get" action="<$mt:CGIPath$><$mt:SearchScript$>">の下に、
<input type="hidden" name="CustomFieldsSearch" value="1" />
<input type="hidden" name="CustomFieldsSearchClassType" value="entry" />
<input type="hidden" name="CustomFieldsSearchField" value="カスタムフィールド名" />
この
「カスタムフィールド名」の部分は検索対象にしたいカスタムフィールドの
テンプレートタグを入れてください。
(例)<input type="hidden" name="CustomFieldsSearchField" value="sample1" />
複数を指定したい場合は、その分だけ行を増やします。
(例)<input type="hidden" name="CustomFieldsSearchField" value="sample1" />
<input type="hidden" name="CustomFieldsSearchField" value="sample2" />
<input type="hidden" name="CustomFieldsSearchField" value="sample3" />
これで、記入したカスタムフィールドが検索対象になります。
(2014/1/29追記)
注意事項として、このプラグインはMT自体の検索条件とは併用できないようです。
少なくとも、検索対象のカテゴリーを指定するタグ
<input type="hidden" name="category" value="カテゴリー名" />
との併用はできませんでした。
MTは検索関係の機能がいまいちですが、これから良くなってくれると嬉しいですね。