2008年1月アーカイブ

MovableType.jpは、AutoPagerizeに対応しているのをみて良いと思った。ちゃんとコード中に対応クラス指定しているのがすごいね。

てなわけで、MT4.1でAutoPagerizeに対応させるためのコードっていうのを書き出してみた。

AutoPagerizeに対応させるには以下の仕様にしないと動作しない。

nextList

次のページへのリンクをXPathで指定。取得したリンクから次のページを読み込む。

Next pageのリンクでa要素でrel="next" を付ける。

insertBefore

読み込んだページから切り出したノード群を挿入する際に基準となるノードをXPathで指定。 insertBeforeのと言う名の通り、基準となるノードのに挿入される。

class指定で"autopagerize_insert_before" を付ける

pageElement

ページから切り出すノード群をXPathで指定。

class指定で"autopagerize_page_element"を付ける

この3つを対応させると、AutoPagerize対応になる。

MovableType.jpのブログでは、個別記事(アーカイブ)で上記の指定を行っている。

 

デフォルトのテンプレートにクラス指定するには、モジュールテンプレートのブログの記事で

   1:  <div id="entry-&lt;$MTEntryID$>" class="entry-asset asset hentry autopagerize_page_element">
   2:      <div class="asset-header">
   3:          <h1 id="page-title" class="asset-name entry-title"><$MTEntryTitle$></h1>
   4:          <$MTInclude module="ブログ記事のメタデータ"$>
   5:      </div>
   6:      <div class="asset-content entry-content"
   7:          &lt;$MTInclude module="adsense_top"$>
   8:  <MTIfNonEmpty tag="EntryBody">
   9:          <div class="asset-body">
  10:              <$MTEntryBody$>
  11:          </div>
  12:  </MTIfNonEmpty>
  13:  <MTIfNonEmpty tag="EntryMore" convert_breaks="0">
  14:          <div id="more" class="asset-more">
  15:              <$MTEntryMore$>
  16:          </div>
  17:  </MTIfNonEmpty>
  18:          <$MTInclude module="adsense_bottom"$>
  19:      </div>
  20:      <div class="asset-footer">
  21:          <MTIf name="entry_template">
  22:                  <$MTInclude module="カテゴリ"$>
  23:          </MTIf>
  24:                  <$MTInclude module="タグ"$>
  25:      </div>
  26:  </div>

1行目の<div id="entry-&lt;$MTEntryID$>" class="entry-asset asset hentry">にclass指定で"autopagerize_page_element"を付ける

モジュールテンプレート、コメントのコードの下に以下のコードを追加する。そうするとAutoPagerize対応になると思う。

   1:  <hr class="autopagerize_insert_before"/>
   2:  <div class="content-nav">
   3:  <ul>
   4:  <li>次の記事:<MTEntryNext><a href="&lt;$MTEntryPermalink$>" rel="next"><$MTEntryTitle remove_html="1"$></a></MTEntryNext></li>
   5:  <li>前の記事:<MTEntryPrevious><a href="&lt;$MTEntryPermalink$>"  rel="prev"><$MTEntryTitle remove_html="1"$></a></MTEntryPrevious></li>
   6:  </ul>
   7:  </div>

対応できた。

 

これで通常のインデックスページでは、投稿日時での降順でエントリーをみることができる。個別のエントリーを閲覧するときに、autopagerizeに対応できるユーザーであれば、昇順にしてエントリーを見ていくことができる。便利。ユーザーにも喜ばれる。

   1:      <MTIf name="datebased_only_archive">
   2:                  <p class="first">このページには、<strong><$MTArchiveDate format="%B %Y"$></strong>に書かれたブログ記事が新しい順に公開されています。</p>
   3:          <MTArchivePrevious>
   4:                  <p>前のアーカイブは<a href="&lt;$MTArchiveLink$>"><$MTArchiveTitle$></a>です。</p>
   5:          </MTArchivePrevious>
   6:          <MTArchiveNext>
   7:                  <p>次のアーカイブは<a href="&lt;$MTArchiveLink$>"><$MTArchiveTitle$></a>です。</p>
   8:          </MTArchiveNext>
   9:      </MTIf>
  10:      <MTIf name="archive_index">
  11:                  <p>最近のコンテンツは<a href="&lt;$MTBlogURL$>">インデックスページ</a>で見られます。</p>
  12:      <MTElse>
  13:                  <p>最近のコンテンツは<a href="&lt;$MTBlogURL$>">インデックスページ</a>で見られます。過去に書かれたものは<a href="<$MTLink template="archive_index"$>">アーカイブのページ</a>で見られます。</p>
  14:      </MTIf>
  15:              </div>
  16:          </div>
  17:  </MTIf>

windows Live Writerのプラグイン Insert Code for Windows Live Writerを試してみる。

おーいいよ。これ、とても使える。SyntaxHighlighter for Windows Live Writer があるけど、それよりもこっちの方が使えると思う。

今回は、MT4.1のデフォルトのタグをInsert Code for Windows Live Writerを使って、表示させてみた。コード表示するには、これはいい。オススメ。

ブログ上の表示もきれいに出ている。これはオススメ。いいよ。コードも不思議な感じになっているけど、それでもちゃんと表示されているのがすごい。

このブログのデザインは、MT4.1スタイルライブラリーからのスタイルを使っている。Firefoxでは、個別記事において、右カラムは正しく表示されるが、IE6.0ではしっかりと落ちて表示される。これは、対応した方がいいと思う。

たぶん記事の管理がデスクトップから簡単にできるところがいいところだと思う。先ほどのエントリであげた、記事の分割(MT側でのmore entryのリンク生成)を抜いて、文句ないですね。

windows live writerから記事の削除などができ、その管理に対して、MTシステム側も同様に記事を削除できているのがすごいと思った。

あと、記事が500件まで表示できるwindows live writerの機能もすごいと思った。プラグインがもっとできてくれば、さらに使いやすくなると思う。

Sixapart側としては、こういったシステム対応できるソフトウェアのプラグイン開発を助長するようなイベントを催すと良いとも思った。

このWindows Live Writerをモデルとして。firefoxのプラグイン開発ができると文句ないような気がする。いい発展を遂げているWebサービスを見る限り、Firefoxプラグイン開発は(Movable Type 専用 ブログエディタ)、今後のシステム発展の助けになると思う。

これからログを共有するといったサービスが流行ると思われるから、そうしたログ共有もすぐにブログにエントリ(アウトプット)できるような機能も付加すれば、文句ないとおもう。

エディタ開発が鍵。

最初のポスト(投稿)で記事の分割をしないと、あとからの追記(再投稿)で追記部分があった場合、MT4.1は、more entryのリンクを生成しない。追記部分がある場合は、最初から追記を入れてのポストをしないと、あとあとダッシュボードから記事を修正しなければならなくなる。

同じ日に投稿したエントリーの表示順序が異なる。これもおかしい?なぜか投稿日時がおかしくなっている。なぜかは、わからない。

どうも、MTのシステム側の不具合か?それともwindow Live Writer側の不具合か?投稿日時の受け渡しがうまくいっていない。最初のポスト日時がたぶん、グリニッジの時刻になって投稿される。

再び、同じ記事で投稿するとデスクトップでの時刻となって、MTシステム側で認識されるようだ。

もしかして、ポスト(投稿)する前に一度保存しないとwindows live writer側の投稿日時がグリニッジで添付されて投稿するのかもしれない。

投稿日時がおかしいときは、一度ポスト(投稿)する前に、保存した方がいいかもしれない。もう一度、再投稿すれば、正しい日時でシステム側が認識表示してくれる。

MT4.1にアップ^デートして早々にコメントスパムの数がすごい。なんともなりません。対策をとらないと。

ここら辺のを参考にして、コメントスパム対策を講じることにする。

コメントに CAPTCHA 認証を利用する | Movable Type 4 ドキュメント

Captcha.jp

CAPTCHA 認証をつけないとなんともなりませんね。こまったもんだ。

Movable Type 4.1 は、Windows Live Writerに対応しているみたいなエントリーをみつけたので、設定してみたものの、カテゴリの作成などはできないようです。以前と変わらず、普通にエントリーをアップするだけで使えるといった感じですね。

一応、こちらのエントリーにマニュフェストファイルの登録に関して、詳しいことが書かれています。実際にファイルを登録してみたものの、以前のMT3.4から使っているときと変わりはありませんでした。

Windows Live Writer を利用したブログ記事やウェブページの作成 | Movable Type 4 ドキュメント

何とか、Windows Live WriterでMovable Type 4.1用のプラグインなどの開発もして欲しいですね。

Windows Live Writerのプラグイン

Windows Live Writerのプラグインは、こちらのエントリーを見るといいですよ。

窓の杜 - 【特集】ブログ投稿ソフト「Windows Live Writer」用プラグイン特集

 

windows live writerの設定で投稿できないエラーがでたばあい、文字コードをUTF=8に変更すると投稿できるようになる。(ブログ設置の編集>詳細設定)

MT3.34からMT4.1へシステムアップグレードしました。メインブログのテンプレートを変更する予定があったので、ついでのMT4.1にアップグレードしました。

データの移行は成功しました。とりあえず、所要時間は1時間程度(ネットアクセスの状況にもよる)。簡単にデータの移行ができたので一安心です。

さて、データ移行について簡単に手順を書き記しておきます。(サーバーは、Xrea)

<MTAsset></MTAsset>

id="" idの指定

id アトリビュートを指定して、特定のアイテムの一覧を生成する

たぶん、マルチブログで使えるのだと思う。

<MTAssetTags></MTAssetTags>

アイテムに指定したタグを使って一覧を生成するブロックタグ

  • <$MTTagName$>
  • <$MTTagLabel$>
  • <$MTTagID$>
  • <$MTTagCount$>
  • <$MTTagRank$>
  • <$MTTagSearchLink$>

上記のファンクションタグが使えるとのことだが、すべてのファンクションタグを使ってのサンプルコードなんかを考えてみないと。

<MTAssets></MTAssets>

ブログのアイテム一覧を表示させるためのブロックタグで使い方によっては、さまざまなテンプレートの中で指定(変数)することで一覧を作ることができる。

attribute

type="file_type"

例えば、

<MTAssets type="image"></MTAssets>

でimageタグを持つタグについての一覧のリストを生成することができる。

ちょっと必要な部分だけ引用

引用元は、

CSS3セレクタとXPathでの表現の対応表 - outsider reflex" href="http://piro.sakura.ne.jp/latest/blosxom/mozilla/xul/2007-09-13_selector-to-xpath.htm">Latest topics > CSS3セレクタとXPathでの表現の対応表 - outsider reflex

E[foo~="bar"]

E[contains(concat(" ",@foo," "), " bar " )]

「空白区切りのリストの中で、対応する値がある」という条件に対して、属性値と検索したい文字列の両方の前後に空白文字を加えた上で、contains()で検索している。

E[foo]

E[@foo]

E[foo="bar"]

E[@foo="bar"]

E[foo^="bar"]

E[starts-with(@foo, "bar" )]

E[foo$="bar"]

E[substring(@foo, string-length(@foo) - string-length("bar") + 1) = "bar"]

XPath 1.0にはend-with()が無いので、文字列操作を使う必要がある。XPath 1.0では文字の位置は0からではなく1から始まることに注意が必要。なお、検索対象の文字列が固定なら、- string-length("bar") + 1の部分は- 2のように直接数値を書いてもよい。

E[foo*="bar"]

E[contains(@foo, "bar" )]

AutoPagerize (swdyh)の対応ページを作っているときにちょっと勉強したことを記しておくよ。

今回は、Latest jQuery Plugin Releases | jQuery PluginsMost Popular Plugins | jQuery Pluginsのページを対応できるXpathを作ってみた。

両ページともにpageElementの指定でclassが異なる。わざわざ二つのコードを追加するのもアレなんで、二つとも対応できるように指定することについて調べてみた。

Xpathの型と演算子XPathXML -TECHSCORE-に書かれているように、Xpath演算子が使える。演算子"or"を使って、classが複数でも対応できるようにする。

or
各オペランドを評価し、どちらかの値が true の場合は true、それ以外は false を返す

 

とあるので、Xpath指定でor演算子を使ってみたらうまくいった。

        url:          'http://plugins.jquery.com/',
        nextLink:     '//div[@class="pager"]/a[@class="pager-next active"]',
        insertBefore: '//div[@class="view view-latest-release" or @class="view-content view-content-popular-plugins"]/following-sibling::node()',
        pageElement:  '//div[@class="view view-latest-release" or @class="view-content view-content-popular-plugins"]',