MT-Plugin-Mediawiki 作ってみた | 勤務先と無関係なことを書く日記
ダウンロードしたファイルを解凍後,pluginsフォルダにアップロードすれば使用可能になります。
]]>PageButeプラグインは以下のページから入手できます。
静的ページ用ページ分割プラグイン:PageBute | エンジニアブログ - スカイアーク
導入はプラグインディレクトリにアップロード後,分割したいページのテンプレート(メインページ,カテゴリ別ブログ記事リスト,月別ブログ記事リストなど)を編集して行います。編集の仕方は次の記事を参考にしました。
<mt:Entries>~</mt:Entries>を<mt:PageContents>~</mt:PageContents>で囲みます。
<mt:PageContents>のcountオプションで何件の記事ごとに区切るか指定します。
区切りは<mt:PageContents>のほうで指定するので<mt:Entries>ではlimitオプションは指定しません。
<mt:PageContents>~</mt:PageContents>の間に<mt:PageSeparator />を記述してページの分割位置を指定します。
記事ごとに区切ることがほとんどだと思いますので</mt:Entries>の直前に記述すればよいでしょう。
<mt:PageLists />,<$mt:PageBefore$>,<mt:IfPageBefore>,<$mt:PageNext$>,<mt:IfPageNext>でページ移動用のリンクを作成します。
実際のコードは次のようになります。
指定件数ごとに記事を分割
<mt:PageContents count="5"><mt:Entries>
...
<mt:PageSeparator />
</mt:PageContents>
</mt:Entries>
前後のページへのナビゲーション
<mt:IfPageBefore>]]><span><$mt:PageBefore delim="<"$></span></mt:IfPageBefore> <mt:PageLists /> <mt:IfPageNext>
<span><$mt:PageNext delim=">"$></span></mt:IfPageNext>
MT4.2から導入された
実験的な機能でサポート対象外とされている
http://www.movabletype.jp/documentation/designer/pagination.html
MT4.3から導入された
1ページ目はスタティックに生成,2ページ目以降はmt-search.cgiを利用して動的に生成される
検索機能を利用しているため,2ページ目以降はURLが検索クエリを含んだ長いものになる
http://www.movabletype.org/documentation/designer/pagination-static.html
公式が英語なので,小粋空間さんの日本語の解説記事も
http://www.koikikukan.com/archives/2009/07/29-005555.php
PHP化が必要
非商用フリー,商用利用は有償
2007年3月で更新がとまっている
http://www.nonplus.net/software/mt/MTPaginate.htm?page=all
MT3.3対応
http://www.boundless-ocean.ne.jp/2007/02/archivepage.html
MT4.1と4.2で動作確認がされている
http://junnama.alfasado.net/online/2008/08/movable_type_developer_confere.html
MT4,MT5対応
http://www.skyarc.co.jp/engineerblog/entry/2642.html
MT3.2~5.1まで対応(2012年12月現在)
]]>MTは最新では5.12が出ていますが,私が使っているのはいまだにMT4.2系(本稿執筆時のバージョンは4.292)・・・
5系を特に避けているというわけでもないのですが,セキュリティリリースが出ている間は4.2系でいこうかなと思っています。
ということで,需要はほとんどないと思いますが,自分の備忘もかねて設置方法をメモ。
設置はzenbackのサイトで発行されたコードを表示したい位置にあわせてコードに貼り付ければいいわけですが,「ブログ記事」などのテンプレートに直接コードを貼り付けるよりも,テンプレートモジュールを使うことで既存のテンプレートにほとんど手をつけることなく設置することができます。
zenbackを設置したいアーカイブテンプレートにさきほど作成したテンプレートモジュールを追加します。ブログの各記事に表示されるようにするには「ブログ記事」テンプレートを編集します。
最初はテンプレートモジュールではなくてウィジェットを使ってzenback用のウィジェットを作ってそれをウィジェットセットに組み込むことで既存のテンプレートを一切編集することなしにサイドバーなどに表示させることができると考えました。
しかし,サイドバーなどはブログ全体に適用されるウィジェットセットなので,単に発行されたコードだけの内容でウィジェットを作成すると,個別記事だけでなくトップページやカテゴリ,月別などのアーカイブにもzenbackが表示されてしまいます。
それを避けるためにはアーカイブウィジェットグループのようにアーカイブ名などで条件分岐を作るための知識が必要になってきます。
そこで,既存のテンプレートを1行だけとはいえ編集することにはなってしまいますが,テンプレートモジュールを使う方法を選択しました。
CakePHPを初めて触るところから,HABTMによるタグ機能を実装したWebサービスを作成するまでの間に参考にしたサイトの情報などをまとめてあります。
]]>特別ページの閲覧制限はLockdownエクステンションを利用することによって実現できる。
なお,LockdownエクステンションはMediawkiのバージョン1.12では利用できないということなので注意が必要である。
管理人は1.16.0で作業を行った。
(1)上記ページより取得したファイルをextensionsディレクトリにコピー
ファイルが複数あるのでextentionsディレクトリの下にLockdownなどという名前のディレクトリを作成し,その中にまとめて入れるとよい。
(2)LocalSettings.phpの編集
下記の1行を追加する
require_once("$IP/extensions/Lockdown/Lockdown.php");
閲覧制限の設定もLocalSettings.phpを編集して行う。
個別の特別ページの閲覧を特定のグループに制限するには,
$wgSpecialPageLockdown['ページ名'] = array('グループ名');
のように記述する。
ページデータの書き出しをsysopのみに限定する場合は次のようになる。
$wgSpecialPageLockdown['Export'] = array('sysop');
ページ名は,日本語で運用している場合であっても,「ページデータの書き出し」ではなく「Export」のように英語で定義されているものを指定する必要がある。
ページ名の定義はincludesディレクトリの中にあるSpecialPage.phpにあるので,それを参照する。
巷には凝ったサイトがいろいろあるけど,最初からそれを目指すのは無理!ということで,
練習としてTwitter Search APIを使ってTwitterのつぶやきに現れるユーザーが買っているものを抽出して表示するページを作ってみました。
その名も「買ったったー」。
「買ったもの」の抽出にはYahooキーフレーズ抽出APIを利用しています。
1.Twitter Search APIで「買った」「ゲット」「購入」を含んでいるつぶやきを取得
2.正規表現を使ってURLや@id,ハッシュタグなどを除去
3.つぶやきを数個(現在は10個ずつに設定)ずつ結合 (雑音情報の軽減のため)
4.Yahooキーフレーズ抽出APIを使ってキーフレーズを抽出
5.結果を静的HTMLに書き出し
上記の手順をcronを使って定期的に実行
参考ページ
PHPで Twitterの Search APIを使って検索する例|floatingdays
テキスト解析 - キーフレーズ抽出|Yahoo!デベロッパーネットワーク
ただし,その副作用として今度は「ページの右側が大きく空いてとてもさびしい」という状況が発生しました。
もともとデザインにはこだわっていないのですが,それにしてもちょっと殺風景すぎるなあと。
そこで,抽出されたキーフレーズを検索することもあるかもしれない?ということでamazonのサーチウィジェットを貼り付けました。
スクロールとともに移動する仕組みはCALM-WEB.COMのm_script.jsを利用させていただいております。うまく移動しない場合は一度ウィンドウ内のどこかをクリックすると動くようになるようです。
もっとも,amazonでそのまま検索して出てくるようなフレーズはあまり抽出されてこないんですよね(笑)
googleの検索を置いたほうが実用的かも?ただ,文字情報中心なのでメインであるキーフレーズの一覧が目立たなくなってしまうかもしれません。
参考ページ:CALM-WEB.COM
思った以上に結果がかぶらない
正午付近では食べ物に関するフレーズが増えるといったような傾向はあるものの,同じフレーズがヒットすることはあまりない
1度に100個のつぶやきしか取得していないので,その中でかぶらないのは当然な面もあるのですが,時間を置いてみても同じものはあまり出てきません。
(時間が近いと前と同じつぶやきを拾っているらしい挙動でかぶるということはあります。)
現在はログをとっていないですが,ログを記録して週や月単位で集計するとなにかが見えてくるかもしれませんが。
その場合は表記のゆれをどう集約するかなども課題になりそう。
買われているものがTwitter上でバズるというのはとてもハードルの高いのことなのかもしれません。
MediaWikiでサイトマップを出力するエクステンションとしてはGoogleSitemapエクステンションが有名だが,2006年9月以降更新が停止している。2009年6月現在,それに代わり,ManualSitemapエクステンションが提供されている。
ManualSitemapエクステンションは,GoogleSitemapエクステンションのバグが修正されているほか,インストール方法もより簡単なものとなっている。
本記事ではManualSitemapエクステンションの導入方法を紹介する。
なお,エクステンションの紹介ページでは,このエクステンションを使用するより標準機能を使用することを推奨している(more appropriate)。コマンドラインが使える環境(自動化することを考えればcronが使える環境)がある場合には,標準機能を使うとよいと思われる。
標準機能との主な違いは,サイトマップに含めることのできるページ数が500まで(標準機能の初期値は50000?)であることと,更新を自動化できないことである(他にも違いはあると思うが実用上問題になるのはこの2つであると思われる)。
エクステンションの紹介ページからmanualsitemap.zipをダウンロードする。
ファイルを解凍し,extensionsディレクトリにアップロードする。
ダウンロードは以下のページから
Extension:ManualSitemap
require_once($IP.'/extensions/ManualSitemap/ManualSitemap.php');
本ブログを運用しているエックスサーバーはcronによるコマンド実行が可能なので,標準機能によって,サイトマップを出力することができる。
参考:http://www.mediawiki.org/wiki/Manual:GenerateSitemap.php
メンテナンススクリプトの実行にはAdminSettings.phpが必要となる。
AdminSettings.sampleにデータベースのユーザー名とパスワードを指定してリネームすればよい。
参考:http://www.mediawiki.org/wiki/Manual:Maintenance_scripts/ja
サーバーパネルからcronの設定を選び,開いた画面からcronの追加をさらに選択する。
スケジュールを適当に設定し,コマンド欄に絶対パスでコマンドを入力。
ホーム直下のwikiディレクトリにMediaWikiをインストールしている場合は次のようになる。
php5 /home/サーバーID/ドメイン名/public_html/wiki/maintenance/generateSitemap.php --fspath=/home/サーバーID/ドメイン名/public_html/wiki/sitemap/
コマンドはphpではなくphp5を使用することがポイント。
エックスサーバーではドメインごとにphpのバージョンを4と5で切り替え可能になっているが,ドメインごとの設定に関わらず,cronでは4系列のphpが利用されている(2009年6月現在)。generateSitemap.phpはphp4では動かないため,phpコマンドでは次のようなエラーが出てしまう(最終行のphpのバージョンに注目)。
PHP Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /home/サーバーID/ドメイン名/public_html/wiki/maintenance/generateSitemap.php on line 167 Content-type: text/html X-Powered-By: PHP/4.3.9
明示的にphp5コマンドを使用することで,正常にサイトマップを出力させることができる。
なお,上記例では--fspathオプションでサイトマップを出力する場所を指定している。
指定しなければgenerateSitemap.phpと同じ場所(maintenanceディレクトリ内)に出力される。
指定する場合はあらかじめ出力先のディレクトリを作成しておく。
インデックス用のファイルと具体的なサイトマップの内容の書かれたファイル(標準だと圧縮されている。--compressオプションで圧縮しない設定も可能)の2つのファイルが作成される。
google等へはインデックス用のファイルを登録すればよい。
MediaWiki:Sidebarの編集画面にアクセスするためには次の2つの方法がある。
方法1
特別ページへのリンクからたどる方法
特別ページ>表示メッセージの一覧>Sidebar
方法2
ブラウザのアドレスバーで直接URLを指定する方法
MediaWikiのルート/index.php/MediaWiki:Sidebar
通常の編集画面とは書式が異なることに注意
*でナビゲーションバーのタイトル,**で各項目の記載になる
各項目の記載の書式は
** リンクするページ|表示名
通常のリンクのように二重カッコで囲む必要がない。
「Category:索引」を「索引」という表示名でサイドバーに表示させる場合の記述は次のようになる
Category:索引|索引
なお,変更が反映されない場合にはデータベースのキャッシュをクリアする必要がある。
クリアの方法は次の2つがある。
方法1
データベースのobjectcacheテーブルに対してtruncateを行う。
phpMyAdminが使用できる場合は,objectcacheテーブルを選択して「空にする」を実行すればよい。
コマンドラインで行う場合には,次のコマンドを実行する。
mysql>truncate objectcache;
方法2
LocalSettings.phpファイル中でtouchする。
管理人はこちらの方法は試していないので詳細は不明。
参考URL
Manual:Interface/Sidebar/ja
デフォルトでは差分情報のページではページタイトルの下に「版間での差分」と表示されている。これを「版間での差分(本文を読むには左上の「本文」タブをクリックしてください)」というメッセージに変更することにした。
変更方法は以下のとおり
特別ページ>表示メッセージの一覧>differenceとページをたどって,MediaWiki:Differenceページを編集する。
なお,表示メッセージの差分情報の場合には「本文」タブではなくて「メッセージ」タブが表示されるため,本来なら「メッセージ」タブにも言及すべきかもしれないが,表示メッセージの変更は頻繁に行われるものではないし,システムによる表示メッセージを目的としてサイトを閲覧することはあまり考えられないことから,「本文」タブだけの言及とした。
変更後は次のように表示されることになる。
(下記のリンク先は現在構築中の「法令用語の定義等データベース」のMediaWikiインストール直後から編集テストを行った場合の差分)
Short URLについてのマニュアルはこちら
Manual:Short URL/ja
エックスサーバーの場合は上記ページからのリンクのうち以下のページを参考にする
Manual:Short URL/wiki/Page title -- PHP as a CGI module, no root access
1..htaccessの編集
ルートディレクトリ(/home/wikiにwikiをインストールしてある場合,/home/wikiの下ではなく,/home)の.htaccessファイルに以下の記述を追加
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^wiki/(.+)$ /wiki/index.php?title=$1 [L,QSA]
2.LocalSettings.phpに以下の記述を追加
$wgScript = "$wgScriptPath/index.php";
$wgRedirectScript = "$wgScriptPath/redirect.php";
$wgArticlePath = "$wgScriptPath/$1";
なお,マニュアルに追加の指示のある$wgScriptPathはインストール時に自動で値が設定されていたのであらめて設定する必要はなかった(1.13.0の場合)。
$wgLocalTZoffset = +540;
上記の設定だけで問題ないが,日本標準時で表示していることを示すためにフッターの最終更新日時に(UTC+9:00)という表記を追加することにした。変更方法は以下のとおり。
ログインした状態で,特別ページ>表示メッセージの一覧>lastmodifiedatとページをたどって,MediaWiki:Lastmodifiedatページを編集する。
]]>1.ロゴ用画像のアップロード
FTPなどを用いてロゴ用の画像をアップロードする。
標準の画像の大きさは135×135(ピクセル)
アップロード先はMediaWikiのインストールディレクトリを/wikiとすると
/wiki/skins/common/images/の下
2.LocalSettings.phpに以下の記述を追加
新しいロゴ用画像のファイル名をnewlogo.pngとすると
]]>$wgLogo = "/wiki/skins/common/images/newlogo.png";
MediaWikiで最初の文字が自動で大文字にならないようにするにはLocalSettings.phpに次の記述を追加する。
]]>#最初の文字を大文字変換しない
$wgCapitalLinks = false;