Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
zuwea
committed
Mar 9, 2017
1 parent
901baa6
commit 732f5e2
Showing
10 changed files
with
272 additions
and
22 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,18 +1,20 @@ | ||
# laravel-generate-html | ||
laravel框架的生成静态页的扩展包 | ||
|
||
|
||
|
||
需要在config目录下新建generate文件 | ||
|
||
里面格式如下: | ||
|
||
|
||
|
||
|
||
|
||
一个路由,视图(控制打开刷新页面) | ||
一个控制器作为公共的控制器,让其他控制器继承该控制器 | ||
|
||
一个帮助函数复写asset函数和url函数 | ||
|
||
根据缓冲技术生成静态页 | ||
部署此类网站,需前后台分离,即两个域名/ip分别指向前台和后台 | ||
后台域名/ip指向laravel框架的public目录 | ||
前台域名/ip指向laravel框架的public目录下的指定目录【该目录名称可以在配置文件中设置】 | ||
|
||
在网站中使用该扩展,请按照如下步骤使用: | ||
1. 使用`composer require caijw/laravel-generate-html`下载该扩展 | ||
2. 在config/app.php的providers数组中加入以下语句:`caijw\Generate\GenerateServiceProvider::class`注册服务提供者 | ||
3. 在项目根目录使用`php artisan vendor:publish --force`,将配置文件copy到config目录下 | ||
4. 修改config目录下的generate文件中的配置【具体配置要求详见generate.php中的注释】 | ||
5. 所有需要刷新的页面的对应控制器都不要继承controller,而是`use caijw\Generate\Controllers\GenerateController;`继承该控制器 | ||
6. 函数在返回视图时不要使用`return view()`,而是使用`return $this->view()`;用法和view一致 | ||
7. 在blade模板中,所有的静态资源文件,都使用`cga()`,用法与`asset()`一致 | ||
8. 在blade模板中,所有的站内链接,都使用`cgr()`,用法与`route()`一致 | ||
9. 进入对应页面【generate.php配置的refreshUrl】,点击开始刷新,即可生成静态页 | ||
|
||
> 在使用过程中如遇到问题或发现bug或有更好的建议,欢迎随时与我联系:18292054@qq.com |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,9 +1,45 @@ | ||
<?php | ||
namespace caijw\Generate\Controllers; | ||
use App\Http\Controllers\Controller; | ||
//use Illuminate\Support\Facades\Config; | ||
use Illuminate\Support\Facades\Config; | ||
use Illuminate\Http\Request; | ||
|
||
class GenerateController extends Controller{ | ||
abstract class GenerateController extends Controller{ | ||
private $request=null; | ||
function __construct(Request $request){ | ||
$this->request=$request; | ||
} | ||
private function generate($viewUrl,$data){ | ||
ob_end_clean(); | ||
ob_start(); | ||
echo base64_encode(view($viewUrl,$data)); | ||
$content = ob_get_contents(); | ||
ob_end_clean(); | ||
|
||
$domain = Config::get("generate.domain"); | ||
$url = $this->request->url(); | ||
$url = str_replace($domain,"",$url); | ||
if(!(strpos($url, "/") === 0)){ | ||
$url="/".$url; | ||
} | ||
/*在url前面加上用户指定的文件夹*/ | ||
$url=Config::get("generate.home").$url; | ||
/*判断是否产生下级目录*/ | ||
$url = caijw_generate_url_suffix($url); | ||
$url = str_replace("/",DIRECTORY_SEPARATOR,$url); | ||
$url = public_path($url); | ||
/*此时的url已经是完整的了*/ | ||
caijw_generate_mk_dirs(dirname($url));//递归创建目录 | ||
file_put_contents($url,base64_decode($content)); | ||
return view("generate::202");//抛出页面刷新完成的信息 | ||
} | ||
protected function view($viewUrl,$data=array()){ | ||
$falg = file_get_contents(dirname(__DIR__).DIRECTORY_SEPARATOR."config".DIRECTORY_SEPARATOR."toHTML.conf"); | ||
if($falg!=="0"){ | ||
return $this->generate($viewUrl,$data); | ||
}else{ | ||
return view($viewUrl,$data); | ||
} | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
<?php | ||
namespace caijw\Generate\Controllers; | ||
use App\Http\Controllers\Controller; | ||
use Illuminate\Support\Facades\Config; | ||
|
||
|
||
class PrivateController extends Controller{ | ||
function refresh(){ | ||
$urls = Config::get("generate.urls"); | ||
$domain = Config::get("generate.domain"); | ||
$callback = "/".Config::get("generate.refreshUrl")."/callback"; | ||
file_put_contents(dirname(__DIR__).DIRECTORY_SEPARATOR."config".DIRECTORY_SEPARATOR."toHTML.conf","1"); | ||
return view('generate::refresh',["urls"=>$urls,"domain"=>$domain,"callback"=>$callback]); | ||
} | ||
function callback(){ | ||
$urls = Config::get("generate.urls"); | ||
if(empty($_POST['num']) || $_POST['num']!=count($urls)){ | ||
return json_encode(["status"=>-1,"message"=>"更新信息失败"],JSON_UNESCAPED_UNICODE); | ||
} | ||
file_put_contents(dirname(__DIR__).DIRECTORY_SEPARATOR."config".DIRECTORY_SEPARATOR."toHTML.conf","0"); | ||
return json_encode(["status"=>0,"message"=>"更新信息成功"],JSON_UNESCAPED_UNICODE); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,30 @@ | ||
<?php | ||
|
||
return [ | ||
"refreshUrl"=>"caijw_refresh",//刷新页面的网址,从根目录开始写 | ||
"domain"=>"http://127.0.0.1:8888",//根目录网址,即所有要刷新的url的公共部分 | ||
|
||
"home"=>"test",//生成的静态页存放目录,前后不要加/ | ||
/* | ||
* 如果访问的url以数组中元素结尾,则不产生下级目录 | ||
* 如:suffix中有.html元素存在则访问/abc/qwe.html:会在目录中形成如下文件:/abc/qwe.html | ||
* 如果不存在.html元素,则访问/abc/qwe.html:会在目录中形成如下文件:/abc/qwe.html/index.html | ||
* */ | ||
"suffix"=>[".html",".xml"], | ||
|
||
"urls"=>[ | ||
"1", | ||
"/2", | ||
"/3", | ||
"/4", | ||
"/5", | ||
"/6", | ||
"/7", | ||
"/8", | ||
"/9", | ||
"/10", | ||
"/11", | ||
|
||
] | ||
|
||
]; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,56 @@ | ||
<?php | ||
use Illuminate\Support\Facades\Config; | ||
function caijw_generate_mk_dirs($dir){ | ||
if(!is_dir($dir)){ | ||
if(!caijw_generate_mk_dirs(dirname($dir))){ | ||
return false; | ||
} | ||
if(!mkdir($dir,0777)){ | ||
return false; | ||
} | ||
} | ||
return true; | ||
} | ||
function caijw_generate_url_suffix($url){ | ||
$f = true;//假定生成下级目录 | ||
$suffix = Config::get("generate.suffix"); | ||
foreach($suffix as $value){ | ||
if(strrchr($url,$value)==$value){//以给定后缀结束 | ||
$f = false;//不再产生下级目录 | ||
break; | ||
} | ||
} | ||
if($f){ | ||
return $url."/index.html"; | ||
} | ||
return $url; | ||
} | ||
function caijw_generate_route($routeName,$routeParameter=[]){/*对route功能进行生成静态页完善*/ | ||
$url = route($routeName, $routeParameter); | ||
$domain = Config::get("generate.domain"); | ||
$falg = file_get_contents(__DIR__.DIRECTORY_SEPARATOR."config".DIRECTORY_SEPARATOR."toHTML.conf"); | ||
if($falg!=="0" && (strpos($url, $domain) !== false)){ | ||
if($domain==$url){ | ||
return "/"; | ||
} | ||
$url = caijw_generate_url_suffix($url); | ||
return str_replace($domain,"",$url); | ||
} | ||
return $url; | ||
} | ||
function caijw_generate_asset($parameter){/*对asset功能进行生成静态页完善*/ | ||
$url = asset($parameter); | ||
//return str_replace(生成静态页的服务器,线上服务器,$url);如果线上服务器和生成静态页服务器不一致,可以修改此处 | ||
return $url; | ||
} | ||
|
||
if (! function_exists('cgr')) { | ||
function cgr($routeName,$routeParameter=[]){ | ||
return caijw_generate_route($routeName,$routeParameter); | ||
} | ||
} | ||
if (! function_exists('cga')) { | ||
function cga($parameter){ | ||
return caijw_generate_asset($parameter); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,4 @@ | ||
<?php | ||
|
||
Route::get('', "PrivateController@refresh"); | ||
Route::post('callback', "PrivateController@callback"); | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
<!doctype html> | ||
<html lang="en"> | ||
<head> | ||
<meta charset="UTF-8"> | ||
<meta name="error" content="202"/> | ||
<title>页面刷新完成</title> | ||
</head> | ||
<body> | ||
页面刷新完成 | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,9 +1,93 @@ | ||
<html> | ||
<head> | ||
<meta charset="UTF-8"> | ||
<title>title</title> | ||
<meta name="_token" content="{{ csrf_token() }}"/> | ||
<title>刷新页面</title> | ||
<style type="text/css"> | ||
*{margin: 0;padding: 0;} | ||
.bg{width: 100%;min-width: 1000px;height: 50px;position: fixed;background: #438eb9;} | ||
.zhanw{height: 80px;} | ||
.bg > div{width: 1000px;margin: 0 auto;} | ||
table{border-collapse: collapse;width: 1000px;margin: 0 auto;} | ||
table td{border: 1px solid #ccc;} | ||
table td:first-child{width: 15px;padding:5px 10px;} | ||
table input{width: 15px;height: 15px;} | ||
table td.url{padding-left: 20px;} | ||
table td.url a{color: #a71d5d;text-decoration: underline;} | ||
</style> | ||
</head> | ||
<body> | ||
1111111111111111111 | ||
<div class="bg"> | ||
<div> | ||
<input type="button" value="开始刷新"> | ||
</div> | ||
</div> | ||
<div class="zhanw"></div> | ||
<table domain="{{$domain}}" callback="{{$callback}}"> | ||
@foreach($urls as $val) | ||
<tr> | ||
<td><input type="checkbox" name="urls" value="{{$val}}" checked="checked" /></td> | ||
<td class="url"><a href="javascript:void(0)">{{$val}}</a></td> | ||
</tr> | ||
@endforeach | ||
</table> | ||
|
||
</body> | ||
<script type="text/javascript" src="http://lib.sinaapp.com/js/jquery/1.12.4/jquery-1.12.4.min.js"></script> | ||
<script type="text/javascript"> | ||
winName=[]; | ||
$(function(){ | ||
$("input[type=button]").click(function(){ | ||
urls = []; | ||
domain = $("table").attr("domain"); | ||
var num = domain.lastIndexOf("/"); | ||
if(num!=domain.length-1){ | ||
domain=domain+"/"; | ||
} | ||
$.each($('input:checkbox:checked'),function(){ | ||
var url = $(this).val(); | ||
var num = url.indexOf("/"); | ||
if(num == 0) { | ||
url = url.substring(1); | ||
} | ||
urls[urls.length] = domain+url; | ||
}); | ||
generate(urls,0); | ||
}) | ||
}) | ||
function generate(urls,i){ | ||
winName[i]=window.open(urls[i]); | ||
winName[i].addEventListener("load",function(){ | ||
/*处理打开页面后的情况,查看是否刷新成功,如成功,则关闭页面,不成功,则记录不成功的数据*/ | ||
if(Boolean(winName[i].document.getElementsByTagName('meta')['error'])){ | ||
winName[i].close() | ||
}else{ | ||
} | ||
/*处理是否进行下一个页面的访问,如果还有下一个页面,就刷新下一页面,否则回执成功记录,更新tohtml_time*/ | ||
if(++i<urls.length){ | ||
generate(urls,i); | ||
}else{ | ||
$.ajax({ | ||
url: $("table").attr("callback"), | ||
data: {num:i}, | ||
dataType: "json", | ||
type: 'POST', | ||
headers: {'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')}, | ||
success: function(){ | ||
}, | ||
error: function(xhr, type,dsd){ | ||
console.log(dsd); | ||
} | ||
}); | ||
} | ||
}); | ||
} | ||
</script> | ||
|
||
</html> |