/** * 生成自定义列表页面 * @param type $data * @return boolean */ public function createListHtml($data = '') { if (empty($data)) { if (!empty($this->data)) { $data = $this->data; // 重置数据 $this->data = array(); } else { $this->error = '没有数据'; return false; } } else { if (is_integer($data)) { $data = D('Template/Customlist')->where(array('id' => $data))->find(); if (empty($data)) { $this->error = '没有数据'; return false; } } } $model = D('Template/Customlist'); //初始化一些模板分配变量 $this->assignInitialize(); //计算总数 $countArray = $model->query($data['totalsql']); if (!empty($countArray)) { $count = $countArray[0]['total']; } else { return false; } //seo分配到模板 $seo = seo(0, $data['title'], $data['description'], $data['keywords']); $this->assign("SEO", $seo); //分页总数 $paging = ceil($count / $data['lencord']); $pagehao = 1; do { //生成路径 $customlistUrl = $this->Url->createListUrl($data, $pagehao); if ($customlistUrl == false) { return false; } //取得URL规则 $urls = $customlistUrl['page']; $page = page($count, $data['lencord'], $pagehao, array('isrule' => true, 'rule' => $urls)); $listData = $model->query($data['listsql'] . " LIMIT {$page->firstRow},{$page->listRows}"); //把分页分配到模板 $this->assign(C("VAR_PAGE"), $pagehao); $this->assign('listData', $listData); $this->assign("pages", $page->show()); if (empty($data['listpath'])) { //生成路径 $htmlpath = SITE_PATH . $customlistUrl["path"]; // 页面缓存 ob_start(); ob_implicit_flush(0); //渲染模板 parent::show($data['template']); // 获取并清空缓存 $content = ob_get_clean(); //检查目录是否存在 if (!is_dir(dirname($htmlpath))) { // 如果静态目录不存在 则创建 mkdir(dirname($htmlpath), 0777, true); } //写入文件 if (false === file_put_contents($htmlpath, $content)) { throw_exception("自定义列表生成失败:" . $htmlpath); } } else { //去除完后缀的模板 $template = TEMPLATE_PATH . (empty(self::$Cache["Config"]['theme']) ? "Default" : self::$Cache["Config"]['theme']) . "/Content/List/{$data['listpath']}"; //模板检测 $template = parseTemplateFile($template); //生成 $this->buildHtml($customlistUrl['path'], SITE_PATH, $template); } $pagehao++; } while ($pagehao <= $paging); return true; }