目次 Edit


関連 Edit

検索:MediaWiki

参考 Edit

Google:MediaWiki

design.txt
docs/design.txt
Development/ja - MediaWiki
http://www.mediawiki.org/wiki/Development/ja
Manual:Database layout - MediaWiki
http://www.mediawiki.org/wiki/Manual:Database_layout
Manual:Contents/ja - MediaWiki
http://www.mediawiki.org/wiki/Manual:Contents/ja
MediaWiki Documentation
http://svn.wikimedia.org/doc/
The MediaWiki codebase
http://www.mediawiki.org/wiki/How_to_become_a_MediaWiki_hacker#The_MediaWiki_codebase

WikiEngine/MediaWiki/1.10 Edit

主処理への入り口 Edit

  • index.phpがエントリーポイント。
  • なぜかMediaWiki::initializeの中に主処理がある。
    index.php > MediaWiki::initialize > MediaWiki::performAction > (リクエストの'action'次第で分岐、それぞれの処理へ)
  • initialize直後にCleanup。

MediaWikiひとめぐり Edit

起動から終了までの主な処理を処理順に。

MediaWiki::performActionが処理の中心。
ここで何をするかはMediaWikiの外から与えられるリクエスト。

  1. index.php
  2. includes/Wiki.php(41)
    MediaWiki::initialize
  3. includes/Wiki.php(365)
    MediaWiki::performAction
    クエリー'action'次第でいろいろ処理。またはOutputPage::redirectを呼び出すことでリダイレクトすることにする(実際の出力は後のOutputPage::outputで)。
  4. includes/Wiki.php(289)
    MediaWiki::finalCleanup
  5. includes/Wiki.php(305)
    MediaWiki::doUpdates
    $wgDeferredUpdateListに溜め込んだオブジェクト全て->doUpdates
    こうして処理タイミングを遅らせているのは、処理間の依存関係を解決するため?
  6. includes/OutputPage.php(553)
    OutputPage::output
    スキン適用、HTTPヘッダー・HTMLヘッダー生成、レスポンス出力

action Edit

actionはほとんどMediaWiki(includes/Wiki.php)とArticle(includes/Article.php)で処理される。
それ以外には3つ程度のクラスしか関与しない。
処理の中心になっているのはこれらの数少ないクラスらしい。

'view'というactionは複数のクラスを通して処理される。
'view'はactionのデフォルト値。

MediaWiki[?]が処理する'action' Edit

  • dublincore
  • creativecommons
  • credits

Article[?]が処理する'action' Edit

  • view *
  • watch
  • unwatch
  • delete
  • revert
  • rollback
  • protect
  • unprotect
  • info
  • markpatrolled
  • render
  • deletetrackback
  • purge
  • print

その他の'action'一覧 Edit

  • submit *(editを含む)
  • edit *
  • history *
  • raw ?

action 'view' Edit

Articleが処理する。

includes/Article.php:
actionのデフォルト。
リクエストで指示されたページを表示する。

スキン参照。
プロセス名変更。
名前空間取得。

リクエストからOldIDを得て、不正なものならリダイレクト
OldID…履歴のID、Wikipediaでの「特定」?

ArticleFlagをtrueに。
検索エンジンのロボット向けヘッダーの用意。

'diff'やOldIDを与えられたら差分ページを用意。
差分はDifferenceEngineに任せる。
それでも最新版を表示することもある。

$this->mIsRedirect でなく、OldIDも与えられていなければ…$this->viewUpdates()
HTTPヘッダーにETagも設定

	wfDebug( 'Article::view using parser cache: ' . ($pcache ? 'yes' : 'no' ) . "\n" );
	if ( $wgUser->getOption( 'stubthreshold' ) ) {
		wfIncrStats( 'pcache_miss_stub' );
	}

リダイレクトページ。「~より転送」

リダイレクトページではなくrdfromがあれば…
外部からのリダイレクト

ログインページ

履歴

さらに追加。
<pre>…</pre>追加。
<span class="redirectText">…</span>追加。
MediaWikiでのページキャッシュ。
履歴ではページキャッシュを無効に。

ページタイトル取得。

名無しさん用会話ページの場合の追加分。

パトロール機能のためのUI追加。
<div class='patrollink'>…</div>追加。

トラックバック表示の追加。

ページ出力。

action 'edit' Edit

EditPage[?]またはExternalEdit[?]が処理する。
イベント'CustomEditor'実行。正しく実行できたことが前提条件。
なぜ前提か?

ExternalEditは「編集に外部アプリケーションを使う」[?]のレスポンスを返す(.ini形式で編集するページ名などを返す)だけ。
この仕組みはMediaWikiの範疇ではなく、ee.plによるもの。