iwp - sae 版本

新浪 SAE 限制真多 郁闷
http://1.iwp001.sinaapp.com/iwp/public/?q=framework.doc.index
http://1.iwp001.sinaapp.com/iwp/public/?q=testcase.index

那就在 sae 上开发吧,暂时...

文档集成了一个 不到100行的 wiki引擎

单元测试是我之前自己写的 kencore-unit


<?php
Core_Autoloader::loadFile(COREPATH . '/vendor/WikiDoc.class.php');
Core_Autoloader::loadFile(COREPATH . '/vendor/TplEngine.class.php');

/**
 * Iwp 文档查看器
 *
 */
class Pkg_Iwp_Doc {
	
	const queryHome = 'query-home';
	const queryController = 'query-controller';
	const queryAction = 'query-action';
	const queryApiName = 'api-index';
	
	static $pageTitle = '';
	
	static $apiQueryHome = 'http://iwp.iamsese';
	static $apiController = 'api';
	static $apiAction = 'index';
	
	static function lookup(array $vars){
		
		static $tplEngine = null;
		if (!$tplEngine){
			$tplConfig = array(
				'templateDir' => dirname(__FILE__) . '/_views',
				'enableCache' => false,
			);
			$tplEngine = new TplEngine($tplConfig);
			
			// 注入扩展开发
			WikiDoc::addPlugin('title',"Pkg_Iwp_Doc::plugin_title");
			WikiDoc::addPlugin('apilink',"Pkg_Iwp_Doc::plugin_apilink");
			
		}
		
		$apiName = Core_AppUtils::val($vars,Pkg_Iwp_Doc::queryApiName,'index');
		
		self::$apiQueryHome = Core_AppUtils::val($vars,Pkg_Iwp_Doc::queryHome,'http://iwp.iamsese');
		self::$apiController = Core_AppUtils::val($vars,Pkg_Iwp_Doc::queryController,'api');
		self::$apiAction = Core_AppUtils::val($vars,Pkg_Iwp_Doc::queryAction,'index');
		
		
		// 过滤特殊字符
		$apiName = preg_replace('/[^a-z0-9_]+/i', '', $apiName);
		$apiName = strtolower(trim($apiName));
		
		$api_content = "{$apiName} 未找到";
		$last_mod = FALSE;
		
		do {
			if (empty($apiName)) {
				$api_content = "错误 500: 无效的 apiName ";
				break;
			}
			$apiFile = Pkg_Iwp_Doc::getApiFile($apiName);
			if ($apiFile){
				$last_mod = filemtime($apiFile);
				$api_content = WikiDoc::parse(file_get_contents($apiFile));
				break;
			}
		} while(false);
					
		$tplEngine->assign('page_title',Pkg_Iwp_Doc::$pageTitle);
		$tplEngine->assign('api_content',$api_content);
		$tplEngine->assign('last_mod',$last_mod ? date('y-m-d H:i:s',$last_mod) : '未知' );
				
		$tplEngine->display('display.php');
	}
	
	static function getApiFile($apiName){
		$apiFile = dirname(__FILE__) . '/api' . "/{$apiName}.txt";
		if (is_readable($apiFile)){
			return $apiFile;
		}
		return false;
	}
	
	/**
	 * 增加 title 标签
	 *	
	 * <<title Felix Pleșoianu>>
	 * 
	 * @param string $title
	 * @return string
	 */
	static function plugin_title($title){
		Pkg_Iwp_Doc::$pageTitle = trim($title);
		return '';
	}
	
	/**
	 * 增加 applnk 标签,用于内部api name链接
	 *	
	 * <<applnk about , 关于>>
	 * 
	 * @param string $apiName
	 * @return string
	 */
	static function plugin_apilink($apiName){
		
		static $tpl = '[%s %s]';
		
		$secs = explode(',',trim($apiName));
		if (!empty($secs)){
			$link = array_shift($secs);
			if (empty($secs)) $text = $link;
			else $text = implode(',',$secs);
			
			$link = self::$apiQueryHome . Core_AppUtils::url(self::$apiController,self::$apiAction,array(
				self::queryApiName => trim($link)
			));
			return sprintf($tpl,$link,$text);
		}
		return $apiName;
	}
}
 
这个是帮助文档的生成类


  index.txt 内容如下
写道
<<title 对 Iwp 的介绍>>
大多数PHPer都想写出运行状态良好的应用程序,而且希望尽可能做得简单且不费事。而Iwp就是一个达成以上目标的框架。

===== Iwp 是什么? 框架又是什么?
当发明计算机编程不久之后,便有人发现,这其中涉及到了太多的重复操作。之后,也许是 Ada Lovelace(人类历史上的首位程序员),又或许是 Alan Turning,决定将计算机程序模块化,从而使得片段程序代码可以重复使用。PHP 程序员们早已习惯了将需要重复使用的代码写在函数中,并将这些函数放在 include 文件里。

同样的,框架是为重用而发明的,存放在独立的文件中,用来简化重复操作的代码。

<<apilink about,关于作者 vb2005xu >>

{{http://1.iwp001.sinaapp.com/iwp/public/me.jpg}}

[http://vb2005xu.iteye.com/blog/1443451 关于这个文档的说明]
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值