一.安裝篇
1.下載並安裝Xampp
注意,如果MySql不能成功啟動,則應檢查My.ini配置文件中basedir與datadir是否配置為相對路徑.如果是,請改為絕對路徑后再次啟動.
2.下載MediaWiKi
3.將MediaWiKi解壓到Xampp安裝目錄的htdocs目錄下
4.安裝Php緩存組件
從MediaWiKi的安裝向導來看,其起碼支持Apc,XCache,WinCache.但是WinCache只有非線程安全版本,而Xampp包含的Php是線程安全版本.所以就只能從前兩者中選擇.我選擇的是Apc.下載后解壓到Php的Ext目錄下,然后在Php.ini中加入extension=php_apc.dll即可
5.進入Http://localhost/mediawiki,進行軟件安裝
二.配置篇
1.MediaWiki
a.在LocalSettings.php中加入$wgExternalLinkTarget = '_blank';,使所有鏈接都從新窗口打開
參考
b.修改$wgLogo使其指向特定Logo圖片
c.新增$wgNamespacesWithSubpages[NS_MAIN] = true;,使其在主命名空間支持子頁面.
參考
Manual:$wgNamespacesWithSubpages/zh
d.從官方下載插件並配置,使其支持多文件上傳
e.新增$wgFileExtensions變量,如$wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg', 'wmv', 'pdf', 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx' );,使其可上傳指定文件類型
參考
f.新增$wgMaxUploadSize變量,如$wgMaxUploadSize = 1024*1024*1000;
修改php.ini文件內post_max_size變量值,如post_max_size=1000M
修改php.ini文件內upload_max_filesize變量值,如upload_max_filesize=1000M
使其可以上傳最大為指定大小的文件
注意,修改后需重啟Apache
參考
g.默認情況下是無法上傳office相關文件,系統會報兩種錯誤:
該文件是已損壞或以其它方式無法讀取的 ZIP 文件。 不能正確檢查安全。
The file is a corrupt or otherwise unreadable ZIP file. It cannot be properly checked for security.
文件擴展名“.ppt”與檢測到的文件MIME類型(application/zip)不匹配。
File extension ".ppt" does not match the detected MIME type of the file (application/zip)
對於前一個錯誤,需增加$wgAllowJavaUploads變量並設置為true
對於后一個錯誤,需打開includes/mime.types文件,找到application/zip行並在后面加上doc docx xls xlsx ppt pptx
參考
Manual:Configuring file uploads
h.默認情況下,文件名中如果包含中文或特殊字符,是無法上傳的,其會提示
本wiki不支持在文件名中使用特殊字符。
This wiki doesn't support filenames with special characters.
這種情況只會在服務端是windows環境下才會發生.官方也發布了對應的解決辦法.不過由於不太懂這里面的語法,且看上去要改很多地址,我還是決定來適應這個Bug吧.
參考
upload files with special characters onto mediawiki on wampserver
i.修改skins\vector\screen.css文件中#bodyContent的字體大小樣式,使之與編輯器中默認字體大小一樣.我在兩個地方都設置為16pt.
j.在地址欄輸入mediawiki/index.php/MediaWiki:Print.css,在編輯框內加入如下內容,可讓頁面打印版本減少無關內容,如來自於...,頁面修改次數等.
.firstHeading { margin-top: 0; padding-top: 0; } #siteSub { display: none; } .printfooter { display: none; } #catlinks, .catlinks { display: none; } #footer { display: none; }
參考
k.從官網下載CustomNavBlocks插件可以讓側邊導航欄有更大的自定義自由度.
參考
l. 從官網下載ReplaceText插件可以文章標題或內容的批量替換.
參考
m. 默認情況下,只能同時移動100個頁面,如果需要移動更多,請在LocalSettings.php中增加名為$wgMaximumMovedPages的變量並將其設定為想要的值
2.TinyMce
a.從官方插件頁下載此插件,並按說明替換自帶編輯器
b.在上一步配置的文件LocalSettings.php中,在$wgExt_valid_elements 變量后加入,nowiki來支持Wiki轉義
參考:
c.從官方下載中文語言包並覆蓋進對應目錄
d.在TinyMce_MW.php文件的msword處后的配置中,加入language : \"cn\",使上面下載的語言包生效.由於在大部份情況下使用msword主題,后文所有涉及TinyMce初始化的配置都是針對msword.
參考:
e.在剛才加入語言配置的下方再加一行:font_size_style_values : \"16pt,24pt,32pt,40pt,48pt,56pt,64pt\",.相應,在其jscripts/tiny_mce/themes/advanced的editor_template.js文件中,將tinymce.themes.AdvancedTheme處后面的sizes修改為[16,24,32,40,48,56,64]
f.仍然在editor_template.js文件中,在theme_advanced_fonts處加入:宋體=宋體;黑體=黑體;仿宋=仿宋;楷體=楷體;隸書=隸書;幼圓=幼圓;
參考:
g.在jscripts/tiny_mce/themes/advanced/skins/default/中的content.css中,第一行,將字號修改為16pt
參考:
3.語法高亮
a.從官方插件頁下載此插件,並按說明進行配置
b.從下面提供的地址下載插件,並按主頁上的方式進行配置.
使中用,彈出的輸入框不需要那么多選項,我只保留了裝訂線(行號),是否可折疊與語言選擇.且各控件標題名可能顯示有誤.需要對此控件作二次修改.
在dialog.htm頁面中去除多余選項,並將C#作為默認語言.修改后的關鍵代碼如下
<fieldset id="syntaxhl_options"> <legend>{#syntaxhl_dlg.highlight_options}</legend> <input type="checkbox" name="syntaxhl_nogutter" id="syntaxhl_nogutter" value="1" checked="checked" /><label for="syntaxhl_nogutter" >{#syntaxhl_dlg.nogutter}</label> <input type="checkbox" name="syntaxhl_collapse" id="syntaxhl_collapse" value="1" /><label for="syntaxhl_collapse">{#syntaxhl_dlg.collapse}</label><br /> <label for="syntaxhl_language">{#syntaxhl_dlg.choose_lang}:</label> <select name="syntaxhl_language" id="syntaxhl_language"> <option value="applescript">AppleScript</option> <option value="as3">ActionScript3</option> <option value="bash">Bash(Shell)</option> <option value="coldfusion">Cold Fusion</option> <option value="csharp" selected="selected">C#</option> <option value="cpp">C++</option> <option value="css">CSS</option> <option value="delphi">Delphi</option> <option value="diff">Diff</option> <option value="erlang">Erlang</option> <option value="groovy">Groovy</option> <option value="java">Java</option> <option value="javafx">JavaFX</option> <option value="jscript">Jscript</option> <option value="perl">Perl</option> <option value="php">PHP</option> <option value="plain">Plain(Text)</option> <option value="powershell">PowerShell</option> <option value="python">Python</option> <option value="ruby">Ruby</option> <option value="sass">SASS</option> <option value="scala">Scala</option> <option value="sql">SQL</option> <option value="vb">VB</option> <option value="xml">XML/XHTML</option> </select> </fieldset>
相對的,dialog.js文件也需要修改
init : function() { // get arguments passed from plugin to window. var editor_content = tinyMCEPopup.getWindowArg('editor_content'); var editor_options = tinyMCEPopup.getWindowArg('editor_options'); // check to see if any content was passed to window if(editor_content != undefined) { // select form and place snippet code into editor window var f = document.forms[0]; tinyMCEPopup.editor.dom.setHTML(f.syntaxhl_code, editor_content); // check for each option and update form elements accordingly if(editor_options['brush']) { for(var i = 0; i < f.syntaxhl_language.options.length; i++) { if(f.syntaxhl_language.options[i].value == editor_options['brush']) { f.syntaxhl_language.selectedIndex = i; break; } } } if(editor_options['gutter'] && editor_options['gutter'] == 'false') { f.syntaxhl_nogutter.checked = 'true'; } if(editor_options['collapse'] && editor_options['collapse'] == 'true') { f.syntaxhl_collapse.checked = 'true'; } } }, insert : function() { var f = document.forms[0], textarea_output, options = '', replace_element; //If no code just return. if(f.syntaxhl_code.value == '') { tinyMCEPopup.close(); return false; } // get replacement argument to determine return type replace_element = tinyMCEPopup.getWindowArg('replace_content'); if(!f.syntaxhl_nogutter.checked) { options += 'gutter: false; '; } if(f.syntaxhl_collapse.checked) { options += 'collapse: true; '; } options += "toolbar: false;" textarea_output = '<pre class="brush: '; textarea_output += f.syntaxhl_language.value + '; ' + options + '">'; textarea_output += tinyMCEPopup.editor.dom.encode(f.syntaxhl_code.value); textarea_output += '</pre> '; /* note space at the end, had a bug it was inserting twice? */ // check for replace_element option value and return output accordingly if(replace_element == false) { tinyMCEPopup.editor.execCommand('mceInsertContent', false, textarea_output); } else { tinyMCEPopup.editor.execCommand('mceReplaceContent', false, textarea_output); } tinyMCEPopup.close(); }
最后,將語言包文件zh.js重命名為cn.js,zh_dlg.js重命名為cn_dlg.js.如果還有亂碼,則將其內容強行Html編碼
cn.js
tinyMCE.addI18n('cn.syntaxhl',{ desc : '\u63d2\u5165\u4ee3\u7801' });
cn_dlg.js
tinyMCE.addI18n('cn.syntaxhl_dlg',{ title : '\u63d2\u5165\u4ee3\u7801', highlight_options : '\u9ad8\u4eae\u9009\u9879', paste : '\u7c98\u8d34\u4ee3\u7801', choose_lang : '\u6298\u53e0\u4ee3\u7801', nogutter : '\u884c\u53f7', //light : '精簡模式', collapse : '\u6298\u53e0\u4ee3\u7801' //fontsize : '字體大小', //first_line : '起始行的值', //highlight : '高亮行' });
以上兩者配置好后,在編輯器中通過彈出框輸入代碼.編輯器內不會着色.保存后瀏覽時着色.
三.使用篇
1.加入超鏈接時不能使用TinyMce自帶的方式,而要使用MediaWiKi自帶的方式
2.當你要直接顯示某些被MediaWiKi特殊定義的字符,比如大中擴號時,切換到Html編輯界面,將需要轉義的字符嵌入<nowiki>標簽即可.
3.使用TinyMce自帶的表格功能時,MediaWiKi因不識別會顯示時會出現一對TBody標簽.解決方法是在mediawiki/includes/sanitizer.php中找到removeHTMLtags函數,在$htmlnest變量后新增'tbody'元素.
參考
How to enable HTML tags in MediaWiki?
4.編輯導航欄時,使用的地址是mediawiki/index.php/MediaWiki:Sidebar,而不是mediawiki/MediaWiki:Sidebar,否則會出現 403 access forbidden
參考: