Meidawiki 配置

为coder建立了一个“编程百科”http://codingwiki.info,codingwiki采用mediawiki,这里记录详细的配置:

codingwiki编程百科站点是一个为Coder而建的关于编程(Coding)的wiki站点,我们期望“新人在这里可以学习提高,熟手在这里可以跨越瓶颈,迈向高手之路”。 codingwiki编程百科 的内容来自国外优秀的Coding博客或者 Coding技术站点。它属于非盈利性的,我们在这里创作、改进、收集和整理 编程(Coding)相关的中文文档,当然,我们热烈欢迎您也参与我们的翻译,您可以点击帮助了解相关信息。 如果想要与他人交流获得问题解答(多数情况作为最后选项,既然您已经来了这里:P),请参见建议的通讯方法

1、首先,配置logo

# logo $wgLogo = "/logo.png";

2、配置时间

## Timezone Settings $wgLocaltimezone = "Asia/Shanghai"; $oldtz = getenv("TZ"); putenv("TZ=$wgLocaltimezone"); $wgLocalTZoffset = date("Z") / 3600; putenv("TZ=$oldtz");

3、配置上传

#开启图片上传 $wgEnableUploads= true;

#上传文件类型 $wgFileExtensions = array( 'png', 'gif', 'jpg', 'jpeg','doc','ppt','pdf' );

4、urlrewrite Url重写

#url REWRITE $wgScriptPath        = ""; $wgArticlePath      = "/$1"; $wgUsePathInfo      = true; $wgScriptExtension  = ".php";

服务器采用nginx,添加下面的配置

location / {
		if (!-e $request_filename) {
			rewrite ^/([^?]*)(?:\?(.*))? /index.php?title=$1&$2 last;
		}
	}

5、添加常用扩展

#SyntaxHighlight require_once("$IP/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.php");

#ParserFunctions require_once( "$IP/extensions/ParserFunctions/ParserFunctions.php" );

6、实现自己的扩展——找出wiki最热条目和最新条目,以及热门分类,通过扩展tag实现

直接贴代码,详细效果见

http://codingwiki.info/%E9%A6%96%E9%A1%B5

http://codingwiki.info/%E5%88%86%E7%B1%BB:.NET

<?php
$wgHooks['ParserFirstCallInit'][] = 'efCodingWikiTagParserInit';
 
function efCodingWikiTagParserInit( &$parser ) {
        $parser->setHook( 'hotpages', 'efHotPageRender' );
		$parser->setHook( 'hotcategories', 'efHotCategoryRender' );
		$parser->setHook( 'newpage', 'efNewPageRender' );
        return true;
}

function makePageListItem( $row ) {
		global $wgUser;
		$title = Title::makeTitleSafe( $row->page_namespace, $row->page_title );
		if( !is_null( $title ) ) {
			$skin = $wgUser->getSkin();
			$link = $row->page_is_redirect
					? '<span class="allpagesredirect">' . $skin->makeKnownLinkObj( $title ) . '</span>'
					: $skin->makeKnownLinkObj( $title );
			return( "<li>{$link}({$row->page_counter}次)</li>\n" );
		} else {
			return( "<!-- Invalid title " . htmlspecialchars( $row->page_title ) . " in namespace " . htmlspecialchars( $row->page_namespace ) . " -->\n" );
		}
}
	
function efHotPageRender( $input, $args, $parser, $frame ) {
		global $wgRequest, $wgOut, $wgContLang, $wgLang;
		$dbr = wfGetDB( DB_SLAVE );
		$limit = isset($args["count"])?$args["count"]:10;
		$res = null;		
		if(isset($args["category"])){
			$res = $dbr->select(
				array('page','categorylinks'),
				'*',
				array('cl_to' => "{$args['category']}"),
				__METHOD__,
				array(
					'ORDER BY' => 'page_counter DESC',
					'LIMIT' => "$limit",
					'OFFSET' => '0',
				),
				array( 'categorylinks' => array('JOIN','page_id=cl_from') ) 
			);
		}else{
			$res = $dbr->select(
				'page',
				array(
					'page_namespace',
					'page_title',
					'page_counter',
					'page_is_redirect'
				),
				array('page_namespace'=>'0'),
				__METHOD__,
				array(
					'ORDER BY' => 'page_counter DESC',
					'LIMIT' => "$limit",
					'OFFSET' => '0',
				)
			);
		}
		$result = "<ul>";
		foreach ( $res as $row ) {
				$result .= makePageListItem( $row );
		}	
		$result .= "</ul>";		
        return $result;
}

function efHotCategoryRender( $input, $args, $parser, $frame ) {
		global $wgRequest, $wgOut, $wgContLang, $wgLang;
		$dbr = wfGetDB( DB_SLAVE );
		$limit = isset($args["count"])?$args["count"]:10;
		$res = $dbr->select(
			'category',
			'*',
			array(),
			__METHOD__,
			array(
				'ORDER BY' => 'cat_pages DESC',
				'LIMIT' => "$limit",
				'OFFSET' => '0',
			)
		);
		$result = "<ul>";
		foreach ( $res as $row ) {
				$result.= "<li><a href='/分类:{$row->cat_title}'>{$row->cat_title}</a>(<a href='/分类:{$row->cat_title}'>{$row->cat_pages}</a>)</li>\n" ;
		}	
		$result .= "</ul>";		
        return $result;
}

function efNewPageRender( $input, $args, $parser, $frame ) {
		global $wgRequest, $wgOut, $wgContLang, $wgLang;
		$dbr = wfGetDB( DB_SLAVE );
		$limit = isset($args["count"])?$args["count"]:10;
		$res = null;
		
		if(isset($args["category"])){
				$res = $dbr->select(
					array('page','categorylinks'),
				'*',
				array('cl_to' => "{$args['category']}"),
				__METHOD__,
				array(
					'ORDER BY' => 'page_id DESC',
					'LIMIT' => "$limit",
					'OFFSET' => '0',
				),
				array( 'categorylinks' => array('JOIN','page_id=cl_from') ) 
			);
		}else{
			$res = $dbr->select(
				'page',
				array(
					'page_namespace',
					'page_title',
					'page_counter',
					'page_is_redirect'
				),
				array(),
				__METHOD__,
				array(
					'ORDER BY' => 'page_id DESC',
					'LIMIT' => "$limit",
					'OFFSET' => '0',
				)
			);
		}
		$result = "<ul>";
		foreach ( $res as $row ) {
				$result .= makePageListItem( $row );
		}	
		$result .= "</ul>";		
        return $result;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏美团技术团队

数据库运维必读的10个问题

本文中的问题精选自上期【你问我答】——数据库专题中读者的提问。【你问我答】是由美团点评技术团队推出的线上问答服务,你在工作学习中遇到的各种技术问题,都可以通过我...

393110
来自专栏性能与架构

Kafka 流数据 SQL 引擎 -- KSQL

KSQL 是什么? KSQL 是一个 Kafka 的 SQL 引擎,可以让我们在流数据上持续执行 SQL 查询 例如,有一个用户点击流的topic,和一个可持续...

47360
来自专栏杨建荣的学习笔记

通过Snapshot Standby来精确评估SQL性能 (r9笔记第73天)

最近处理了一个需求,比较紧急,映射到数据库层面是需要更新17万id的值,听起来是不少,根据数据架构进行了分析,发现目前是做了分库分表的方式,所以这17万的id在...

32630
来自专栏Albert陈凯

Hbase二级索引

二级索引与索引Join是多数业务系统要求存储引擎提供的基本特性,RDBMS早已支持,NOSQL阵营也在摸索着符合自身特点的最佳解决方案。这篇文章会以Hbase做...

63040
来自专栏张善友的专栏

SQLite vs MySQL vs PostgreSQL:关系型数据库比较

自1970年埃德加·科德提出关系模型之后,关系型数据库便开始出现,经过了40多年的演化,如今的关系型数据库种类繁多,功能强大,使用广泛。面对如此之多的关系型数据...

33650
来自专栏数据和云

SQL之美 - Oracle 子查询优化系列精讲

题记:SQL优化及SQL审核,是从源头解决性能问题的根本手段,无论是开发人员还是DBA,都应当持续深入的学习SQL开发技能,从而为解决性能问题打下根基。 本系列...

38030
来自专栏IT派

如何用Python 编写知乎爬虫?So easy!

在爬虫系统中,待抓取 URL 队列是很重要的一部分。待抓取 URL 队列中的 URL 以什么样的顺序排列也是一个很重要的问题,因为这涉及到先抓取那个页面,后抓取...

16700
来自专栏简书专栏

mysql必知必会

数据库是按照数据结构来组织、存储和管理数据的仓库,它产生于距今。 六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管...

16510
来自专栏Hadoop数据仓库

HAWQ技术解析(十七) —— 最佳实践

一、HAWQ参数配置最佳实践 (原文地址:http://hawq.incubator.apache.org/docs/userguide/2.1.0.0-inc...

23270
来自专栏码神联盟

碎片化 | 第四阶段-48-hibernate概述和配置-视频

本套视频从Java基础到架构模式以及AI算法,整体视频以“碎片化”学习的模式,提供给大家 ,并配备实际项目为案例,让大家在坐车、吃饭、午休、蹲坑的时候,都可以学...

34160

扫码关注云+社区

领取腾讯云代金券