生成静态页
yii2 2017-12-15 16:56:10

 以下内容直接复制自文件“HtmlController.php”:

 

PHP Code复制内容到剪贴板
  1. namespace frontend\controllers;  
  2.   
  3. use common\models\Article;  
  4. use Yii;  
  5. use yii\data\Pagination;  
  6. use yii\helpers\FileHelper;  
  7. use yii\helpers\Url;  
  8. use yii\web\Controller;  
  9.   
  10. class HtmlController extends Controller  
  11. {  
  12.     // 生成文章静态页  
  13.     public function actionArticle()  
  14.     {  
  15.         // 以下四行 + 1行 为即时输出代码  
  16.         ob_start();  // 打开缓冲区  
  17.         ob_end_flush();  
  18.         ob_implicit_flush(1);  // 立即输出  
  19.         //echo str_repeat(' ', 4096);  // 此句放到循环中  
  20.         //echo '<script>window.scrollTo(0,document.body.scrollHeight);</script>';  // 滚动条自动到最底部, 此句放到循环中  
  21.   
  22.   
  23.         // 生成文章首页  
  24.         $savePath = self::generatorUrl(['article/index']);  // eg:'article/index.html'  
  25.         if(self::generatorHtml($savePath'article/index')){  
  26.             echo "<p>文章首页'{$savePath}'生成成功!</p>";  
  27.         }else{  
  28.             echo "<p style=\"color:red\">文章首页'{$savePath}'生成失败!</p>";  
  29.         }  
  30.   
  31.         // 生成文章首页列表页  
  32.         $pages = new Pagination([  
  33.             'totalCount' => Article::find()->where(['status'=>10])->orderBy('created_at DESC')->count(),  
  34.             'defaultPageSize' => 10  
  35.         ]);  
  36.         for($i=1; $i<=$pages->pageCount; $i++){  
  37.             echo str_repeat(' ', 4096);  
  38.             $savePath = self::generatorUrl(['article/index''page'=>$i]);  // eg:'article/index/1.html'  
  39.             if(self::generatorHtml($savePath'article/index', ['page'=>$i])){  
  40.                 echo "<p>文章列表页'{$savePath}'生成成功!</p>";  
  41.             }else{  
  42.                 echo "<p style=\"color:red\">文章列表页'{$savePath}'生成失败!</p>";  
  43.             }  
  44.             echo '<script>window.scrollTo(0,document.body.scrollHeight);</script>';  
  45.         }  
  46.   
  47.         // 生成详情页  
  48.         $articleIDs = Article::find()->where(['status'=>10])->column();  // id 列  
  49.         foreach($articleIDs as $id){  
  50.             echo str_repeat(' ', 4096);  
  51.             $savePath = self::generatorUrl(['article/view''id'=>$id]);  // eg:'article/id/1.html'  
  52.             if(self::generatorHtml($savePath'article/view', ['id'=>$id])){  
  53.                 echo "<p>文章详情页'{$savePath}'生成成功!</p>";  
  54.             }else{  
  55.                 echo "<p style=\"color:red\">文章详情页'{$savePath}'生成失败!</p>";  
  56.             }  
  57.             echo '<script>window.scrollTo(0,document.body.scrollHeight);</script>';  
  58.         }  
  59.     }  
  60.   
  61.     // 参考 actionArticle()  
  62.     public function actionEffect(){}  
  63.   
  64.     /** 
  65.      * 生成 URL(第一个字符不为'/') 
  66.      * @param array $urlParams 用于生成 URL 路由的参数 
  67.      * @return bool|string 生成 URL(第一个字符不为'/') 
  68.      */  
  69.     protected function generatorUrl($urlParams)  
  70.     {  
  71.         $url = Url::to($urlParams);  // 生成 URL  
  72.         if(substr($url, 0, 1) === '/'){  // 路径第一个字符不能为'/'  
  73.             $url = substr($url, 1);  
  74.         }  
  75.         return $url;  
  76.     }  
  77.   
  78.     /** 
  79.      * 生成静态页 
  80.      * @param string $savePath 保存路径, eg:'article/id/9.html' 
  81.      * @param string $actionRoute runAction() 的第一个参数 
  82.      * @param array $actionParams runAction() 的第二个参数 
  83.      * @return bool|int 写入静态页的字节数 
  84.      */  
  85.     protected function generatorHtml($savePath$actionRoute$actionParams=[])  
  86.     {  
  87.         FileHelper::createDirectory(dirname($savePath));  // 创建目录  
  88.         $result = Yii::$app->runAction($actionRoute$actionParams);  // 返回控制器动作的执行结果  
  89.         return file_put_contents($savePath$result);  // 写入文件, 并返回写入的字节数  
  90.     }  
  91. }  

 

本文来自于:http://www.yoyo88.cn/study/yii2/253.html

下一篇 yii2-httpclient
Powered by yoyo苏ICP备15045725号