檢視 Mediawiki 修改 的原始碼
←
Mediawiki 修改
跳轉到:
導覽
、
搜尋
根據以下的原因,您並無權限去做編輯這個頁面:
您剛才的請求只有這個使用者組的使用者才能使用:
使用者
你可以檢視並複製本頁面的原始碼。
[[分類:Mediawiki]] ==開發參考頁== #[https://doc.wikimedia.org/mediawiki-core/ 官方文件庫(英文)] #*[https://doc.wikimedia.org/mediawiki-core/1.34.0/ 某版文件(英文)] #*[https://doc.wikimedia.org/mediawiki-core/master/ 主要文件(英文)] #[https://twbsball.dils.tku.edu.tw/wiki/index.php/使用者:Minwei/維基筆記/Mediawiki程式修改 中文程式修改參考文件] #[http://nice-learning.tw/nlWiki/index.php?title=人類的起源與遷徙學習單/評量 不錯學群限讀功能測試頁] ==更新快取== *在頁面網址列加上「?action=purge」 *資料夾沒有更名:編輯再儲存 *當修改 mediawiki 所在資料夾名稱,須同步改 LocalSettings.php 中的 $wgScriptPath 。但此時 mediawiki 仍會從快取中取得包含舊資料夾名稱的許多快取頁,導致網站完全無法運作。請依畫面指示,在相關的檔案中加一行「echo __FILE__;」,使網頁內容發生變化,導致產生新的快取,問題即可逐步排除。例如在 includes/Defines.php 中加「echo __FILE__;」。 ==限制某些頁面只有某些群組可讀取== ===wiki_user_groups表=== 對目標帳號加群組,如 jj ===LocalSettings.php=== 定義 $canRead['group'] #為一陣列 #各元素索引為頁名 #各元素值為可讀此頁之群組陣列 #中文頁名須以 URL 格式寫,再以 urldecode 函式解碼 ===includes/Title.php=== ====1.17版==== 在 Title 類別 userCanRead 方法中增加<pre> global $wgUser, $wgGroupPermissions, $canRead; // by jj // 依 $canRead 判斷是否可讀本頁 by jj if(isset($canRead['group']) && count($canRead['group'])){ $name = $this->getPrefixedText(); // 取回本頁帶名字空間的頁名 if(isset($canRead['group'][$name]) && is_array($canRead['group'][$name])){ if(isset($wgUser->mGroups) && is_array($wgUser->mGroups)){ $revoke=0; foreach($wgUser->mGroups as $v){if(in_array($v,$canRead['group'][$name])){$revoke+=1;}} if($revoke==0){ return false; } } } }</pre> ====1.19~1.23.10版==== userCanRead()交給了userCan('read'); userCan(動作,帳號物件,是否全套檢查)又交給了getUserPermissionsErrorsInternal(動作,帳號,是否全套,遇錯就短路);再交給checkReadPermissions(動作,帳號,錯陣列,是否全套,遇錯就短路)。 但上述這些函式只能增加「錯誤訊息」陣列,並不能阻擋共筆頁內容的顯示。所有要進行共筆頁讀取權限控管,必須從 /includes/SkinTemplate.php 中 SkinTemplate 類別的 outputPage 方法,在 $tpl->data['bodytext'] .= $tpl->data['debughtml']; 之後加上:<pre>// 依 $canRead 判斷是否可讀本頁,by jj global $wgUser, $canRead, $wgTitle, $wgServer, $wgScriptPath; if(isset($canRead['group']) && count($canRead['group'])){ $name = $wgTitle->getPrefixedText(); // 取回本頁帶名字空間的頁名 if(isset($canRead['group'][$name]) && is_array($canRead['group'][$name])){ if(isset($wgUser->mGroups) && is_array($wgUser->mGroups)){ $revoke=0; foreach($wgUser->mGroups as $v){if(in_array($v,$canRead['group'][$name])){$revoke+=1;}} if($revoke==0){$tpl->data['bodycontent']='您無權限讀此頁。[<a href='.$wgServer.$wgScriptPath.'>回首頁</a>]';} } } }</pre> ====1.29~1.34.2==== 從 /includes/skins/SkinTemplate.php 中 SkinTemplate 類別的 prepareQuickTemplate 方法,在 $tpl->data['bodytext'] .= $tpl->data['debughtml']; 之後加上:<pre>// 依 $canRead 判斷是否可讀本頁,by jj global $wgUser, $canRead, $wgTitle, $wgServer, $wgScriptPath; if(isset($canRead['group']) && count($canRead['group'])){ $name = $wgTitle->getPrefixedText(); // 取回本頁帶名字空間的頁名 if(isset($canRead['group'][$name]) && is_array($canRead['group'][$name])){ $mGroups=array_keys($wgUser->getGroupMemberships()); $revoke=0; foreach($mGroups as $v){if(in_array($v,$canRead['group'][$name])){$revoke+=1;}} if($revoke==0){$tpl->data['bodycontent']='您無權限讀此頁。[<a href='.$wgServer.$wgScriptPath.'>回首頁</a>]';} } }</pre> '''取群組''' 在 includes/user/User.php 中 User 類別的 getGroupMemberships() 方法中執行 loadGroups(), 會叫用 includes/user/UserGroupMembership.php 中 UserGroupMembership::getMembershipsForUser($this->mId,$db) , 並將結果存入 $this->mGroupMemberships (沒呼叫getGroupMemberships()方法就不會有mGroupMemberships屬性), 其為陣列:key為該使用者存於 user_groups 表中的群組名,值為UserGroupMembership物件(有方法而無屬性)。 如果未註冊或 user_groups 表中的沒有該使用者,均傳回空陣列。 ==除錯== ===skins/Vector.php=== VectorTemplate 類別中的 execute 方法中,找到 <!-- bodytext -->(1.19版為<!-- bodycontent -->) 在之下插入除錯資訊 全域變數 $jjj,然後在要除錯的程式段落中對 $jjj 派值。 ===<nowiki>{ {</nowiki>…} }內層嵌入=== 用<nowiki>{ {</nowiki>…} }嵌入之title,其運行中之變數傳不到上一層,所以無法在skin(最外層)查看變數(如上段的方法),除錯,請用: $flog=fopen('./jjj',"a+");fwrite($flog,變數."\n");fclose($flog); // by jj 然後查看 mediawiki/jjj 檔之新寫入內容。 ==調整中文化訊息== ===languages/messages/MessagesZh_tw.php=== $messages 陣列中以下元素 'badaccess-groups' => '您剛才的請求只有<nowiki>{{</nowiki>PLURAL:$2|這個|這些}}使用者群組的使用者才能使用: $1', 將「群」改成「群組」 ==資料表== ===wiki_interwiki=== 跨 wiki 連結增加中文維基百科 zhwikipedia:http://zh.wikipedia.org/wiki/$1 ==嵌入本站及跨wiki段落== 詳見 includes/parser/Parser.php 中 Parser類別中的braceSubstitution方法之修改。 ==擴充可以用HTML標籤== *參考 [http://en.wikipedia.org/wiki/Help:HTML_in_wikitext 英文維基百科說明] *調整 include/Sanitizer.php 中 Sanitizer.php,$htmlsingle,$htmlsingleonly,$htmlnest,$tabletags,$htmllist,$listtags 諸陣列的內容。 *#a 標籤是有效的。 *#iframe不但無效,而且基於安全考量,wikimedia 連 Extension:Website in iFrame 都加以移除。 ==支援 SVG== *[http://www.mediawiki.org/wiki/Manual:$wgSVGConverters $wgSVGConverters] *[http://www.mediawiki.org/wiki/Manual:Image_administration Image_administration]
返回到
Mediawiki 修改
。
導航
個人工具
登入
名字空間
頁面
討論
變換
檢視
閱讀
檢視原始碼
檢視歷史
動作
搜尋
導覽
首頁
近期變動
隨機頁面
使用說明
工具箱
連入頁面
相關頁面修訂記錄
特殊頁面
頁面資訊