推薦一個基于ThinkPHP生成靜態(tài)站點控制器類

# JKBuildHtml 基于ThinkPHP生成靜態(tài)站點控制器類

項目地址:https://gitee.com/ray2017/jk-build-html

## 介紹

完美嫁接[http://www.thinkphp.cn/](THINKPHP)的靜態(tài)頁面生成控制器,可自定義生成規(guī)則右锨,支持動態(tài)參數(shù)绍移,支持參數(shù)的范圍設置。 是一個在原來開發(fā)過程沒有變化的情況下搭建靜態(tài)站的解決方案轧抗。 性能方面測試有時間搞一下瞬测。 暫時不是composer版本月趟,如果需要的,可以留言穷躁。 使用中有其他問題的歡迎留言问潭。

build static site, thinkphp class, build html page

## 特點

* 純靜態(tài):生成的網(wǎng)站是靜態(tài)htm頁面沙峻,拷貝文件就是部署站點。

* 方便改造:原來TP開發(fā)代碼不用變動去枷,原來TP的view文件照常寫,以前怎么寫模板還怎么寫竖螃。

* 邊開發(fā)邊生成html:建議封裝控制器的fetch方法逗余,邊查看靜態(tài)效果邊開發(fā)录粱,避免后期重新搭建后頁面顯示有問題,你可以盯著`public/dist`目錄下的靜態(tài)頁面按F5刷新靜態(tài)頁面效果菜职,也可以用原來的tp路徑或路由查看模板效果酬核。

## 用法

在任意控制器里放置一下語句即可批量生成全部靜態(tài)頁适室,你需要做的是把它放到后臺的某個地方了。

頁面顯示是flush逐行顯示的捣辆,如果想用ajax自行搞一下代碼當然也行蔬螟。

```

controller('common/JKBuildHtml')->buildAll();

```

也可以單個頁面生成,一般在列表頁的每行數(shù)據(jù)后面加一個 `生一個頁面` 按鈕:

```

controller('common/JKBuildHtml')->buildOne($path, ['id' => 5]);

```

需要注意的是單個頁面生成的path 一般為控制器和方法名罪帖,必須在靜態(tài)生成規(guī)則中聲明促煮,否則會提示錯誤。

也可以封裝tp controller 的 fetch方法整袁,這樣可以邊開發(fā)邊生成菠齿。

```

protected function fetchHtml()

{

? ? controller('common/JKBuildHtml')->buildFromFetch( $html = $this->fetch(), input('get.') );

? ? return $html;

}

```

## 注意事項

* 所有靜態(tài)資源js,css坐昙,上傳文件等绳匀,必須放置在 `dist_dir_name` 配置文件夾下,靜態(tài)頁面會訪問這些資源疾棵,如果放到這個文件夾外面,除非站點目錄不是這個目錄痹仙,否則訪問不到是尔。

* 所有靜態(tài)規(guī)則<鍵>全用小寫

* 靜態(tài)規(guī)則中的<值>的路徑原則是,只要能請求到的地址就可以开仰,建議不要使用的TP路由動態(tài)參數(shù)拟枚。

* 請求路徑只支持GET請求

## 配置步驟

* `JKBuildHtml.php` 放置在common的controller里 別處也可 注意命名空間

* `config.php` 增加公共配置參數(shù)

* `dist_rules.php` 靜態(tài)生成規(guī)則文件薪铜,放置在application目錄下

## config.php 參數(shù)設置

公共配置文件`config.php`中加入以下參數(shù),注意看注釋:

```

? ? // 靜態(tài)站放置路徑:

? ? 'dist_path' => ROOT_PATH. 'public/',

? ? // 靜態(tài)頁存放文件夾名 一般放置在public下;靜態(tài)站點直接指向這個目錄即可:

? ? 'dist_dir_name' => 'dist',

? ? // 生成的靜態(tài)頁子頁的存放目錄恩溅,即匹配規(guī)則中沒有@符號的頁面的存放目錄隔箍,注意例中路徑中的'dist/site-pages'會進行目錄匹配作為替換./或../的依據(jù),所以這個名稱在項目文件夾名中最好唯一:

? ? 'dist_sub_dir' => 'site-pages',

? ? // 要生成靜態(tài)頁的模塊名:

? ? 'dist_module_name' => 'index',

? ? // 靜態(tài)頁文件名字中的參數(shù)分隔符:

? ? 'dist_file_dot' => '_',

? ? // 靜態(tài)資源路徑替換 靜態(tài)站點根目錄下會替換成 `./` 其他會替換成 `../`

? ? 'dist_src_match' => '/public/static/',

```

## 關于靜態(tài)資源路徑

本來tp的資源是放在public下任何位置的脚乡,但是有了靜態(tài)生成類蜒滩,那么就得按規(guī)則來

以下是建議:

* 首先在public下建一個dist目錄(dist的由來是寫js項目的時候build的目錄名,此處借用奶稠;也可改配置)

* 然后把所有前端扔給你的所有靜態(tài)資源文件 js俯艰,css,images放到這個文件夾下。

* 把上傳的文件也放dist目錄里

* 生成完畢后這個目錄下就會生成相關的html頁面

## 生成靜態(tài)頁規(guī)則文件dist_rules.php說明

* 注:這個文件不是路由文件锌订,和tp路由不是一回事蟆炊。


鍵值對說明:

* <鍵> 為生成靜態(tài)頁文件名:@代表dist的根目錄,@index 代表首頁瀑志,其他不帶@的會生成在dist/site-pages;全用小寫

* <值> 為靜態(tài)頁生成模塊的路徑(即控制器、方法污秆、參數(shù))劈猪,生成過程中,會直接請求這個路徑良拼。

原TP模板文件a鏈接路徑:

* 在模板里寫a鏈接路徑的時候需要按照鍵的規(guī)則战得,路徑里不需要@符號

```

<?php

// +----------------------------------------------------------------------

// | 生成靜態(tài)頁的規(guī)則文件

// +----------------------------------------------------------------------

return [

? ? '@index'? ? ? ? => 'index/index', // 這個是首頁 會生成在dist目錄下

? ? '@news'? ? ? ? => 'news/index',

? ? 'news_:id'? ? ? => ['news/find', 'article'],? // 這個是帶db的,表示要查詢article表的id列庸推,循環(huán)生成靜態(tài)頁

? ? 'job_:id'? ? ? => ['jobs/find', 'func:getjobids'],? // 這個是帶自定義方法的常侦,表示要執(zhí)行getjobis方法返回id為鍵的二維數(shù)組,循環(huán)生成靜態(tài)頁

? ? 'job_:id_:code' => ['index/index', 'func:dist/index/test'], // 這個是請求tp的模塊/控制器/方法贬媒,返回一個二維數(shù)組

];

```

### <鍵>

* 鍵中帶:號的是有動態(tài)參數(shù)的 會生成在`dist/site-pages`目錄下

* 參數(shù)命名必須和db里的字段名稱一致

* 為防止生成錯誤不同參數(shù)之間需用_分開(可以修改配置)

### <值>

* 值可以是一個“請求路徑”聋亡,用`控制器/方法`的形式即可,請求時會自動加上自定義模塊名

* 值也可以是一個數(shù)組际乘,第一個是請求路徑坡倔,會傳參請求;第二個是db的名字脖含,即參數(shù)字段所在列的所有值罪塔,系統(tǒng)會根據(jù)參數(shù)批量生成頁面:比如'news_:id' => ['news/find', 'article'], 是查詢article表里的id列,

* 如果想加入db查詢條件养葵,那么就放第三個值里 比如 `id < 100`,這個會傳入到db的where條件中需要符合tp查詢語法, 就成了`'news_:id' => ['news/find', 'article', ['id' =>? ['<',100]]],` 或? `..."id < 100"]`

* 如果想自定義生成id的函數(shù)征堪,可以把第二個參數(shù)設置成一個全局的方法,可以放common.php里(函數(shù)名不用帶`func:`),或任意一個控制器里 寫法:`'func:admin/index/getJobIds'` 或 `'func:getjobids'`

* 若采用func類型的关拒,返回值必須是以參數(shù)為鍵相符的二維數(shù)組佃蚜。如:`['id' => [2,3,4,5]]`

* func類型可以有第三個值庸娱,作為func的參數(shù)傳入

### 請求路徑出現(xiàn)異常怎么辦

靜態(tài)生成控制器會直接把異常頁面也生成到html文件中,不會停止生成

## 作者

冷風崔 <541720500@qq.com>

## LICENSE

完全遵循 996ICU 協(xié)議 完美開源

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末爽锥,一起剝皮案震驚了整個濱河市涌韩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌氯夷,老刑警劉巖臣樱,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異腮考,居然都是意外死亡雇毫,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門踩蔚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來棚放,“玉大人,你說我怎么就攤上這事馅闽∑牵” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我鹃愤,道長,這世上最難降的妖魔是什么峦甩? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮现喳,結果婚禮上凯傲,老公的妹妹穿的比我還像新娘。我一直安慰自己嗦篱,他們只是感情好冰单,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著灸促,像睡著了一般球凰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上腿宰,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天呕诉,我揣著相機與錄音,去河邊找鬼吃度。 笑死甩挫,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的椿每。 我是一名探鬼主播伊者,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼英遭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了亦渗?” 一聲冷哼從身側響起挖诸,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎法精,沒想到半個月后多律,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡搂蜓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年狼荞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帮碰。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡相味,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出殉挽,到底是詐尸還是另有隱情丰涉,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布斯碌,位于F島的核電站昔搂,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏输拇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一贤斜、第九天 我趴在偏房一處隱蔽的房頂上張望策吠。 院中可真熱鬧,春花似錦瘩绒、人聲如沸猴抹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蟀给。三九已至,卻和暖如春阳堕,著一層夾襖步出監(jiān)牢的瞬間跋理,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工恬总, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留前普,地道東北人。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓壹堰,卻偏偏與公主長得像拭卿,于是被迫代替她去往敵國和親骡湖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內(nèi)容