checkLogin(); if (!$this->checkItemPermn($login_user['uid'] , $item_id)) { $this->message(L('no_permissions')); return; } $item = D("Item")->where("item_id = '$item_id' ")->find(); $menu = D("Item")->getContent($item_id,"*","*",1); if($page_id > 0 ){ $pages[] = D("Page")->where(" page_id = '$page_id' ")->find(); } else if ($cat_id) { foreach ($menu['catalogs'] as $key => $value) { if ($cat_id == $value['cat_id']) { $pages = $value['pages'] ; $catalogs = $value['catalogs'] ; }else{ if ($value['catalogs']) { foreach ($value['catalogs'] as $key2 => $value2) { if ($cat_id == $value2['cat_id']) { $pages = $value2['pages'] ; $catalogs = $value2['catalogs'] ; } } if ($value2['catalogs']) { foreach ($value2['catalogs'] as $key3 => $value3) { if ($cat_id == $value3['cat_id']) { $pages = $value3['pages'] ; $catalogs = $value3['catalogs'] ; } } } } } } }else{ $pages = $menu['pages'] ; $catalogs = $menu['catalogs'] ; } $data = ''; $parent = 1; if ($pages) { foreach ($pages as $key => $value) { if(count($pages) > 1){ $data .= "

{$parent}、{$value['page_title']}

"; }else{ $data .= "

{$value['page_title']}

"; } $data .= '
'; $value['page_content'] = D("Export")->runapiToMd($value['page_content']); $data .= htmlspecialchars_decode($Parsedown->text($value['page_content'])); $data .= '
'; $parent ++; } } //var_export($catalogs); if ($catalogs) { foreach ($catalogs as $key => $value) { $data .= "

{$parent}、{$value['cat_name']}

"; $data .= '
'; $child = 1 ; if ($value['pages']) { foreach ($value['pages'] as $page) { $data .= "

{$parent}.{$child}、{$page['page_title']}

"; $data .= '
'; $page['page_content'] = D("Export")->runapiToMd($page['page_content']); $data .= htmlspecialchars_decode($Parsedown->text($page['page_content'])); $data .= '
'; $child ++; } } if ($value['catalogs']) { $parent2 = 1 ; foreach ($value['catalogs'] as $key3 => $value3) { $data .= "

{$parent}.{$parent2}、{$value3['cat_name']}

"; $data .= '
'; $child2 = 1 ; if ($value3['pages']) { foreach ($value3['pages'] as $page3) { $data .= "

{$parent}.{$parent2}.{$child2}、{$page3['page_title']}

"; $data .= '
'; $page3['page_content'] = D("Export")->runapiToMd($page3['page_content']); $data .= htmlspecialchars_decode($Parsedown->text($page3['page_content'])); $data .= '
'; $child2 ++; } } if ($value3['catalogs']) { $parent3 = 1 ; foreach ($value3['catalogs'] as $key4 => $value4) { $data .= "

{$parent}.{$parent2}.{$parent3}、{$value4['cat_name']}

"; $data .= '
'; $child3 = 1 ; if ($value4['pages']) { foreach ($value4['pages'] as $page4) { $data .= "

{$parent}.{$parent2}.{$parent3}.{$child3}、{$page4['page_title']}

"; $data .= '
'; $page4['page_content'] = D("Export")->runapiToMd($page4['page_content']); $data .= htmlspecialchars_decode($Parsedown->text($page4['page_content'])); $data .= '
'; $child3 ++; } } if ($value4['catalogs']) { $parent4 = 1 ; foreach ($value4['catalogs'] as $key5 => $value5) { $data .= "

{$parent}.{$parent2}.{$parent3}.{$parent4}、{$value5['cat_name']}

"; $data .= '
'; $child4 = 1 ; if ($value4['pages']) { foreach ($value4['pages'] as $page5) { $data .= "

{$parent}.{$parent2}.{$parent3}.{$parent4}.{$child4}、{$page5['page_title']}

"; $data .= '
'; $page5['page_content'] = D("Export")->runapiToMd($page5['page_content']); $data .= htmlspecialchars_decode($Parsedown->text($page5['page_content'])); $data .= '
'; $child3 ++; } } $data .= '
'; $parent3 ++; } } $data .= '
'; $parent3 ++; } } $data .= '
'; $parent2 ++; } } $data .= '
'; $parent ++; } } output_word($data,$item['item_name']); } //导出整个项目为markdown压缩包 public function markdown(){ set_time_limit(100); ini_set('memory_limit','800M'); $item_id = I("item_id/d"); $login_user = $this->checkLogin(); if (!$this->checkItemPermn($login_user['uid'] , $item_id)) { $this->message(L('no_permissions')); return; } $item = D("Item")->where("item_id = '$item_id' ")->find(); $exportJson = D("Item")->export($item_id , true); $exportData = json_decode($exportJson , 1 ) ; $zipArc = new \ZipArchive(); $temp_file = tempnam(sys_get_temp_dir(), 'Tux')."_showdoc_.zip"; $temp_dir = sys_get_temp_dir()."/showdoc_".time().rand(); mkdir($temp_dir) ; unset($exportData['members']); file_put_contents($temp_dir.'/'.'info.json', json_encode($exportData)); file_put_contents($temp_dir.'/'.'readme.md', "由于页面标题可能含有特殊字符导致异常,所以markdown文件的命名均为英文(md5串),以下是页面标题和文件的对应关系:".PHP_EOL.PHP_EOL ); $exportData['pages'] = $this->_markdownTofile( $exportData['pages'] , $temp_dir); $ret = $this->_zip( $temp_dir ,$temp_file ); clear_runtime($temp_dir); rmdir($temp_dir); header("Cache-Control: max-age=0"); header("Content-Description: File Transfer"); header('Content-disposition: attachment; filename=showdoc.zip'); // 文件名 header("Content-Type: application/zip"); // zip格式的 header("Content-Transfer-Encoding: binary"); // 告诉浏览器,这是二进制文件 header('Content-Length: ' . filesize($temp_file)); // 告诉浏览器,文件大小 @readfile($temp_file);//输出文件; unlink($temp_file); } private function _markdownTofile( $catalogData , $temp_dir ){ if ($catalogData['pages']) { foreach ($catalogData['pages'] as $key => $value) { $t = rand(1000,100000) ; //把页面内容保存为md文件 $filename = md5($value['page_title'].'_'.$t).".md" ; file_put_contents($temp_dir.'/'.$filename, htmlspecialchars_decode( $value['page_content']) ) ; file_put_contents($temp_dir.'/'.'readme.md',$value['page_title']. " —— prefix_". $filename .PHP_EOL, FILE_APPEND ); } } if ($catalogData['catalogs']) { foreach ($catalogData['catalogs'] as $key => $value) { $catalogData['catalogs'][$key] = $this->_markdownTofile($value , $temp_dir); } } return $catalogData ; } private function _zip($temp_dir, $temp_file) { $zipArc = new \ZipArchive(); if(!$zipArc->open($temp_file, \ZipArchive::CREATE)){ return FALSE; } $dir = opendir( $temp_dir ); while( false != ( $file = readdir( $dir ) ) ) { if( ( $file != "." ) and ( $file != ".." ) ) { $res = $zipArc->addFromString ( "prefix_".$file , file_get_contents($temp_dir."/".$file) ) ; } } closedir( $dir ); if(!$res){ $zipArc->close(); return FALSE; } return $zipArc->close(); } }