生成静态页
以下内容直接复制自文件“HtmlController.php”:
PHP Code复制内容到剪贴板
- namespace frontend\controllers;
- use common\models\Article;
- use Yii;
- use yii\data\Pagination;
- use yii\helpers\FileHelper;
- use yii\helpers\Url;
- use yii\web\Controller;
- class HtmlController extends Controller
- {
- // 生成文章静态页
- public function actionArticle()
- {
- // 以下四行 + 1行 为即时输出代码
- ob_start(); // 打开缓冲区
- ob_end_flush();
- ob_implicit_flush(1); // 立即输出
- //echo str_repeat(' ', 4096); // 此句放到循环中
- //echo '<script>window.scrollTo(0,document.body.scrollHeight);</script>'; // 滚动条自动到最底部, 此句放到循环中
- // 生成文章首页
- $savePath = self::generatorUrl(['article/index']); // eg:'article/index.html'
- if(self::generatorHtml($savePath, 'article/index')){
- echo "<p>文章首页'{$savePath}'生成成功!</p>";
- }else{
- echo "<p style=\"color:red\">文章首页'{$savePath}'生成失败!</p>";
- }
- // 生成文章首页列表页
- $pages = new Pagination([
- 'totalCount' => Article::find()->where(['status'=>10])->orderBy('created_at DESC')->count(),
- 'defaultPageSize' => 10
- ]);
- for($i=1; $i<=$pages->pageCount; $i++){
- echo str_repeat(' ', 4096);
- $savePath = self::generatorUrl(['article/index', 'page'=>$i]); // eg:'article/index/1.html'
- if(self::generatorHtml($savePath, 'article/index', ['page'=>$i])){
- echo "<p>文章列表页'{$savePath}'生成成功!</p>";
- }else{
- echo "<p style=\"color:red\">文章列表页'{$savePath}'生成失败!</p>";
- }
- echo '<script>window.scrollTo(0,document.body.scrollHeight);</script>';
- }
- // 生成详情页
- $articleIDs = Article::find()->where(['status'=>10])->column(); // id 列
- foreach($articleIDs as $id){
- echo str_repeat(' ', 4096);
- $savePath = self::generatorUrl(['article/view', 'id'=>$id]); // eg:'article/id/1.html'
- if(self::generatorHtml($savePath, 'article/view', ['id'=>$id])){
- echo "<p>文章详情页'{$savePath}'生成成功!</p>";
- }else{
- echo "<p style=\"color:red\">文章详情页'{$savePath}'生成失败!</p>";
- }
- echo '<script>window.scrollTo(0,document.body.scrollHeight);</script>';
- }
- }
- // 参考 actionArticle()
- public function actionEffect(){}
- /**
- * 生成 URL(第一个字符不为'/')
- * @param array $urlParams 用于生成 URL 路由的参数
- * @return bool|string 生成 URL(第一个字符不为'/')
- */
- protected function generatorUrl($urlParams)
- {
- $url = Url::to($urlParams); // 生成 URL
- if(substr($url, 0, 1) === '/'){ // 路径第一个字符不能为'/'
- $url = substr($url, 1);
- }
- return $url;
- }
- /**
- * 生成静态页
- * @param string $savePath 保存路径, eg:'article/id/9.html'
- * @param string $actionRoute runAction() 的第一个参数
- * @param array $actionParams runAction() 的第二个参数
- * @return bool|int 写入静态页的字节数
- */
- protected function generatorHtml($savePath, $actionRoute, $actionParams=[])
- {
- FileHelper::createDirectory(dirname($savePath)); // 创建目录
- $result = Yii::$app->runAction($actionRoute, $actionParams); // 返回控制器动作的执行结果
- return file_put_contents($savePath, $result); // 写入文件, 并返回写入的字节数
- }
- }