美国虚拟主机Hostease

Mediawiki中文技术论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4148|回复: 0

Mediawiki程序阅读

[复制链接]
发表于 2011-1-2 17:00:21 | 显示全部楼层 |阅读模式
RAKsmart美国服务器
写在前面当前,国内的维客爱好者们都还在黑暗中摸索,不读懂mediawiki的全部源文件,不仅开发无从谈起,即便是一个两个小突破也都是碰运气式的,带有很大的侥幸成分,效率低下,跟目前世界范围内的维客发展进度很不匹配。


网络世界里竞争无边界的特定决定了,如果这样的状况延续下去,我们跟国外同行的差距还将继续拉大,在google这样的互联网巨头已经着手实施维客项目的新形势下,如果不能保持与世界范围内维客开发者的同步,那国内近一两年才兴起的维客热将会面临中途被清盘、被迫离场退席的危险。


为度过这场危机,由“中国0公里”(www.cn0km.com)倡导,天下维客(www.all[url=http://www.zzbaike.com/wiki/wiki]wiki.com[/url])牵头,组建了一个“mediawiki·长征群”,汇聚了一群决心把mediawiki源文件从头到尾完全读懂的勇士。


让我们为他们壮行!


mediawiki·长征群于12月6日正式开群,特邀顾问埃里克对该活动表示支持,并提出了一些极为重要的建议,现摘录如下:


EricJonah:


看了你们下午的聊天记录,真想写一本mw源码解读记,index --> mediawiki -> (article、user、title..) --> db -- > editpage -- > output这个研读过程是值得推荐的,顺便补上一个Parser.php和SepcialPages。


最好是分模块和机制去了解,从实践去检验。先去把tables.sql熟悉了,表与表结构的关系(一对一、一对多、多对多)。


现在,index.php在1.7版本的时候应该意义不大了——和1.5版本有了比较大的改变:把原先1.5的index.php工作,都给wiki.php,也就是wiki.php做了index.php。


所以,实际上来说wiki.php是现在MediaWiki的入口,所有的httpd请求都交给wiki.php。


至于如何确定用户意源,也就是程序流向,就用action,默认的action值为view。这里,view和print有一个差别,就是view是对页面进行一次缓存。而print只是显示,做同样的article的view()操作。


一个词条主要常规操作:view、edit、history、purge、raw:


view就去看Article.php edit就去看EditPage.php history就去看PageHistory.php purge就是看article,但是关于如何解除缓存以及如何操作缓存就要看parser.php raw一般用得比较少。


对于管理员来说,还有protect、delete、move和watch这几个操作。碰到这几个操作怎么办呢? 答案是:看article.php。


这里有必要说一下,他们在这里玩了一个小聪明(埃里克原话,“他们”指代mediawiki的开发者),也叫hack,就是:$article->$action();


也就是说:protect还是去找Article.php,并且找到这Article对象的protect()方法,他们来接手你的词条保护工作。相应的,delete就去找delete(),move就去找move()。他们的wiki.php作为C把相应的请求转交给了Article相应的方法去处理。


要看他们的处理细节就转到Article.php这个页去。拿delete来说,一上来对你进行验证,验证你的请求是否合法(其实在SkinTemplete.php就进行过了一次验证) ,然后就要找删除的理由,接着看看你有没有删除的权力。如果你有删除的权力,再看你有没有问题(是不是给block了)。要是你没有权力删除页面的话,就会告诉你打消念头,并且明确告诉你没有删除权限。如果你有权力删除,并且你这个人没有任何劣迹,那还得看看我这个词条是愿不愿意被你删除了(不愿是因为我只有读的权力)。


如果上面的都通过了,你在删除我之前,还要看看数据库里到底有没有我。如果没有,那可就是一个fatal错误了。如果底层数据库有我在,那你就删除吧:doDelete()。如果你删除以后还想看,当然是找到doDelete()再看细节了。


以上只是举了一个例子,按照上述方法去看mediawiki的源文件,比机械地一行一行去看好。概括起来说:1.setup.php 初始化加载,必须加载的。2.wiki.php  作为wiki的入口,也是控制器。3.Article.php。


到第三步,就要结合看了。比如,同一级的就看:Article.php、Title.php、EditPage.php、User.php(权限也封装在这里面)。


除此而外,周边的也要看: 1.分页QueryPage.php 2.特殊页面 3.数据库DateBase.php(封装的是mysql) 4.缓存 5.模板,所有Monobook.php调用的数据都来自SkinTemplate.php 6.搜索SearchMySQL.php 7.Output.php输出 8.Request httpd 9.AuthPlugin.php认证插件 10.GlobalFunction.php全局函数 11.Hooks.php 12.HTMLForm.php对html相关,主要是表单相关 13.图像Image.php 14.工作队列jobqueue.php 15.如果你的数据多的话,服务器如菜地一样多的话,可以还要LoadBalancer 16.还要做Log 17.还有MagicWord.php


先说到这里,最后补充一句:弄懂mw只是一个开始。重要的是:规范扩展、深入优化、灵巧整合、不断探新。祝大家早日取得成功。


后记:mediawiki·长征群号码:31368989,如果没有一定的软件基础,请不要申请加入,群内的进展和成果会及时在天下维客和中国0公里《零公里》中刊出,供大家爱学习。

阅读顺序[url=http://codex.wordpress.org.cn/index.php?title=Mediawiki&action=edit&redlink=1]mediawiki[/url]是一个比较复杂的程序,总计有200多个文件。想要一下子都弄明白很困难,这里梳理一下思路:




了解程序的控制框架index.php → wiki.php → article.php → user.php

  • index.php是[url=http://codex.wordpress.org.cn/index.php?title=Mediawiki&action=edit&redlink=1]mediawiki[/url]的主体入口
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

BlueHost美国主机优惠码

Archiver|手机版|小黑屋|Mediawiki中文技术论坛

GMT+8, 2024-4-19 07:25 , Processed in 0.037414 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表