- 论坛徽章:
- 0
|
iwp - 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代码- 1.<?php
- 2.Core_Autoloader::loadFile(COREPATH . '/vendor/WikiDoc.class.php');
- 3.Core_Autoloader::loadFile(COREPATH . '/vendor/TplEngine.class.php');
- 4.
- 5./**
- 6. * Iwp 文档查看器
- 7. *
- 8. */
- 9.class Pkg_Iwp_Doc {
- 10.
- 11. const queryHome = 'query-home';
- 12. const queryController = 'query-controller';
- 13. const queryAction = 'query-action';
- 14. const queryApiName = 'api-index';
- 15.
- 16. static $pageTitle = '';
- 17.
- 18. static $apiQueryHome = 'http://iwp.iamsese';
- 19. static $apiController = 'api';
- 20. static $apiAction = 'index';
- 21.
- 22. static function lookup(array $vars){
- 23.
- 24. static $tplEngine = null;
- 25. if (!$tplEngine){
- 26. $tplConfig = array(
- 27. 'templateDir' => dirname(__FILE__) . '/_views',
- 28. 'enableCache' => false,
- 29. );
- 30. $tplEngine = new TplEngine($tplConfig);
- 31.
- 32. // 注入扩展开发
- 33. WikiDoc::addPlugin('title',"Pkg_Iwp_Doc::plugin_title");
- 34. WikiDoc::addPlugin('apilink',"Pkg_Iwp_Doc::plugin_apilink");
- 35.
- 36. }
- 37.
- 38. $apiName = Core_AppUtils::val($vars,Pkg_Iwp_Doc::queryApiName,'index');
- 39.
- 40. self::$apiQueryHome = Core_AppUtils::val($vars,Pkg_Iwp_Doc::queryHome,'http://iwp.iamsese');
- 41. self::$apiController = Core_AppUtils::val($vars,Pkg_Iwp_Doc::queryController,'api');
- 42. self::$apiAction = Core_AppUtils::val($vars,Pkg_Iwp_Doc::queryAction,'index');
- 43.
- 44.
- 45. // 过滤特殊字符
- 46. $apiName = preg_replace('/[^a-z0-9_]+/i', '', $apiName);
- 47. $apiName = strtolower(trim($apiName));
- 48.
- 49. $api_content = "{$apiName} 未找到";
- 50. $last_mod = FALSE;
- 51.
- 52. do {
- 53. if (emptyempty($apiName)) {
- 54. $api_content = "错误 500: 无效的 apiName ";
- 55. break;
- 56. }
- 57. $apiFile = Pkg_Iwp_Doc::getApiFile($apiName);
- 58. if ($apiFile){
- 59. $last_mod = filemtime($apiFile);
- 60. $api_content = WikiDoc::parse(file_get_contents($apiFile));
- 61. break;
- 62. }
- 63. } while(false);
- 64.
- 65. $tplEngine->assign('page_title',Pkg_Iwp_Doc::$pageTitle);
- 66. $tplEngine->assign('api_content',$api_content);
- 67. $tplEngine->assign('last_mod',$last_mod ? date('y-m-d H:i:s',$last_mod) : '未知' );
- 68.
- 69. $tplEngine->display('display.php');
- 70. }
- 71.
- 72. static function getApiFile($apiName){
- 73. $apiFile = dirname(__FILE__) . '/api' . "/{$apiName}.txt";
- 74. if (is_readable($apiFile)){
- 75. return $apiFile;
- 76. }
- 77. return false;
- 78. }
- 79.
- 80. /**
- 81. * 增加 title 标签
- 82. *
- 83. * <<title Felix Pleșoianu>>
- 84. *
- 85. * @param string $title
- 86. * @return string
- 87. */
- 88. static function plugin_title($title){
- 89. Pkg_Iwp_Doc::$pageTitle = trim($title);
- 90. return '';
- 91. }
- 92.
- 93. /**
- 94. * 增加 applnk 标签,用于内部api name链接
- 95. *
- 96. * <<applnk about , 关于>>
- 97. *
- 98. * @param string $apiName
- 99. * @return string
- 100. */
- 101. static function plugin_apilink($apiName){
- 102.
- 103. static $tpl = '[%s %s]';
- 104.
- 105. $secs = explode(',',trim($apiName));
- 106. if (!emptyempty($secs)){
- 107. $link = array_shift($secs);
- 108. if (emptyempty($secs)) $text = $link;
- 109. else $text = implode(',',$secs);
- 110.
- 111. $link = self::$apiQueryHome . Core_AppUtils::url(self::$apiController,self::$apiAction,array(
- 112. self::queryApiName => trim($link)
- 113. ));
- 114. return sprintf($tpl,$link,$text);
- 115. }
- 116. return $apiName;
- 117. }
- 118.}
- <?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 关于这个文档的说明]
|
|