WikiChree.COM 新規   編集   添付   管理  



トップ   編集 編集〔GUI〕 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS   ログイン

Pkript/文法/コンテキスト の変更点

#author("2026-08-31T22:13:33+09:00","default:guide","guide")
* Pkript/文法/コンテキスト [#yb2cb9d5]
#author("2026-09-04T00:05:56+09:00","default:mcp","bot-mcp")
* Pkript/文法/コンテキスト [#a7c0e2a8]

エントリポイントの第1引数として渡されるコンテキストオブジェクト(e)の仕様。
エントリポイントの第1引数として渡されるコンテキストオブジェクト。

** リファレンス [#e66c9437]
** リファレンス [#jdc68967]

*** プロパティ一覧 [#uda9f0e5]
*** プロパティ一覧 [#c1172ead]

|~プロパティ|~型|~説明|h
|e.args|Array<String>|プラグイン呼び出し時に渡された位置引数の配列|
|e.args|Array&lt;String&gt;|プラグイン呼び出し時に渡された位置引数の配列|
|e.opts|Object|key=value 形式で渡された名前付きオプション|
|e.body|String|複数行ブロック記法 {{ ... }} 内のテキスト|
|e.body|String|複数行ブロック記法の本文|
|e.page|String|呼び出し元のページ名|
|e.name|String|実行中のスクリプト名|
|e.type|String|呼び出し種別("convert" / "inline" / "action")|
|e.vars|Object|GET / POST のフォーム送信値(機密キーは除外)|
|e.user|Object|閲覧ユーザーの情報(下記)|
|e.method|String|HTTPメソッド("GET" / "POST")|

*** e.user [#jf3022dd]
- e.opts: #pkript(list, foo, bar, class=fruit) と渡すと e.opts.class で "fruit" が取れる
- e.vars: パスワード等の機密キーは自動で除外される

*** e.user [#i567fe76]

閲覧中のユーザー情報を保持するオブジェクト。プロパティは常に存在する。

|~プロパティ|~型|~説明|h
|e.user.name|String|ログインユーザー名。未ログイン時は空文字列|
|e.user.fullname|String|ユーザー表示名。未ログイン時は空文字列|
|e.user.groups|Array<String>|所属グループ一覧。ユーザー名自身と valid-user を含む|
|e.user.groups|Array&lt;String&gt;|所属グループ一覧。ユーザー名自身と valid-user を含む|

- 管理者かどうかの直接フラグは存在しない。権限判定は wiki.canWrite(page) または e.user.groups を用いる
- 存在しないプロパティへのアクセスはエラーになるため、未ログイン状態は null ではなく空文字列や空配列で表す
- groups には $auth_groups で解決したグループのほか、ユーザー名自身と valid-user が含まれる。ログイン中は空配列にならない
- fullname が name と異なる値になるのは、AUTH_TYPE_EXTERNAL / AUTH_TYPE_SAML で $ldap_user_account を有効にしLDAPから表示名を取得している場合。BASIC認証とフォーム認証では name と同じ値になる
- 管理者判定は取得できない。PukiWiki に管理者という概念はなく、pkwk_login() はパスワードの比較のみで結果を保持しない。権限で分岐する場合は wiki.canWrite(page) か e.user.groups を使う
- 閲覧者ごとに出力が変わるページになる。リバースプロキシやブラウザキャッシュを挟む構成では注意が必要


** 使用法 [#z9490983]
** 使用法 [#s7120fe6]

*** 引数とオプションを処理する [#gdfd55ec]
*** 引数とオプションを処理する [#ctx_usage_opts]

#pkript(highlight){{
#highlight{{
function plugin_list_convert(e) {
    const limit = Number(e.opts.limit || 10);
    const prefix = e.args[0] || "";
    const pages = wiki.pages(prefix).slice(0, limit);
    return "<ul>" + pages.map((p) => "<li>" + wiki.link(p) + "</li>").join("") + "</ul>";
}
}}

*** ログイン状態に応じて出力を切り替える [#g9a4e6d8]
*** ログイン状態に応じて出力を切り替える [#ctx_usage_user]

#pkript(highlight){{
#highlight{{
function plugin_mypage_convert(e) {
    if (e.user.name == "") {
        return "<p>ログインしてください。</p>";
    }
    return "<p>ようこそ、" + htmlsc(e.user.fullname || e.user.name) + " さん</p>";
}
}}