export.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. <?
  2. use yii\helpers\Html;
  3. use yii\widgets\ActiveForm;
  4. use yii\web\View;
  5. use yii;
  6. $this->title = 'Tilda';
  7. $this->params['breadcrumbs'][] = ['label' => 'Tilda', 'url' => ['index'] ];
  8. $this->params['breadcrumbs'][] = 'Экспорт';
  9. $arExportPages = array();
  10. $mainPage = '';
  11. $cat = $api->local->getProjectDir();
  12. $url = trim($url);
  13. if( $url ){
  14. $api->local->setProjectDir($cat.$url.DIRECTORY_SEPARATOR);
  15. if ($api->local->createBaseFolders() === false) {
  16. ?>
  17. <div class="row">
  18. <div class="col-md-12">
  19. <div class="callout callout-danger">
  20. <h5>Ошибка создания папок <?=$local->lastError?></h5>
  21. </div>
  22. </div>
  23. </div>
  24. <?
  25. }
  26. }
  27. ?>
  28. <div class="row">
  29. <div class="col-md-12">
  30. <div class="callout callout-danger">
  31. <h5>Экспорт</h5>
  32. URL:
  33. <a class="uppercase" href="https://www.amic.ru/<?=$cat.$url.DIRECTORY_SEPARATOR?>">https://www.amic.ru/<?=$cat.$url.DIRECTORY_SEPARATOR?></a>
  34. </div>
  35. </div>
  36. </div>
  37. <div class="row">
  38. <input type="hidden" value="<?=$proj?>" name="proj">
  39. <?
  40. foreach($pages as $k=>$i){
  41. $item = $api->getpageexport($i);
  42. $arExportPages[] = $item['id'];
  43. $api->local->setProject($item);
  44. // print_a($item);
  45. ?>
  46. <div class="col-md-6">
  47. <div class="card card-widget widget-user-2">
  48. <div class="card-header">
  49. <h3 class="card-title">
  50. <input type="hidden" value="<?=$item['id']?>" name="Check[]">
  51. <?
  52. if( $item['id'] == $main ){
  53. $mainPage = $item['filename'];
  54. ?>
  55. <label class="form-check-label">Главная страница</label>
  56. <?
  57. }
  58. ?>
  59. </h3>
  60. </div>
  61. <div class="attachment-block clearfix">
  62. <?
  63. if( isset( $item['img'] ) && $item['img'] != '' ){
  64. $img = $item['img'];
  65. $img = str_replace( basename($img), '-/resize/160x/'.basename($img), $img );
  66. //
  67. //-/resize/160x/
  68. ?>
  69. <img src="<?=$img?>" class="attachment-img m-2">
  70. <?
  71. }
  72. ?>
  73. <h3 class="widget-user-username"><?=$item['title']?></h3>
  74. <p class="mx-2"><?=$item['date']?></p>
  75. <div class="card-footer p-0">
  76. <div class="card-body">
  77. <p><?=$item['filename']?></p>
  78. <?=$item['descr']?>
  79. </div>
  80. <div class="card-footer text-center">
  81. <div class="progress progress-sm">
  82. <div class="progress-bar bg-success progress-bar-striped" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100" style="width: 100%">
  83. <span class="sr-only">100% Complete (warning)</span>
  84. </div>
  85. </div>
  86. </div>
  87. </div>
  88. </div>
  89. </div>
  90. </div>
  91. <?
  92. }
  93. ?>
  94. <div class="col-12">
  95. <div class="card card-default">
  96. <div class="card-header">
  97. <h3 class="card-title">
  98. <i class="fas fa-exclamation-triangle"></i>
  99. Alerts <i class="fa fa-sync fa-spin"></i>
  100. </h3>
  101. </div>
  102. <div class="card-body">
  103. <div class="alert alert-warning alert-dismissible">
  104. <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
  105. <h5><i class="icon fas fa-ban"></i> Alert!</h5>
  106. <?
  107. // Загрузка глобальная
  108. /* копируем общие CSS файлы */
  109. $arFiles = $api->local->copyCssFiles('css');
  110. if (! $arFiles) {
  111. die('Error in copy CSS files [' . $api->lastError . ']');
  112. }
  113. /* копируем общие JS файлы */
  114. $arFiles = $api->local->copyJsFiles('js');
  115. if (! $arFiles) {
  116. die('Error in copy JS files [' . $api->lastError . ']');
  117. }
  118. /* копируем общие ШЬП файлы */
  119. $arFiles = $api->local->copyImagesFiles('img');
  120. if (! $arFiles) {
  121. die('Error in copy IMG files [' . $api->lastError . ']');
  122. }
  123. /* перебеираем теперь страницы и скачиваем каждую по одной */
  124. $countexport = 1;
  125. foreach ($arExportPages as $pageid) {
  126. // try {
  127. if( !in_array( $pageid, $pages ) ) continue;
  128. // echo "Export page " . $pageid . "<br>\n";
  129. /* запрашиваем все данные для экспорта страницы */
  130. $tildapage = $api->getPageFullExport($pageid);
  131. if (! $tildapage || empty($tildapage['html'])) {
  132. echo "Error: cannot get page [$pageid] or page not publish<br>\n";
  133. continue;
  134. }
  135. /* временный фикс */
  136. $html = preg_replace(array('|//static.tildacdn.com/js/|','|//static.tildacdn.com/css/|'),array('',''), $tildapage['html']);
  137. if ($html > '') {
  138. $tildapage['html'] = $html;
  139. }
  140. $tildapage['export_imgpath'] = $api->local->arProject['export_imgpath'];
  141. $tildapage['needsync'] = '0';
  142. //print_r($local->arSearchFiles);
  143. /* так как мы копировали общие файлы в одни папки, а в HTML они указывают на другие, то произведем замену */
  144. $html = preg_replace($api->local->arSearchFiles, $api->local->arReplaceFiles, $tildapage['html']);
  145. if ($html > '') {
  146. $html = str_replace( $api->local->getProjectDir() ,'',$html);
  147. $html = str_replace('href="/','href="',$html);
  148. $html = str_replace('src="/','src="',$html);
  149. $html = str_replace('src="/','src="//',$html);
  150. $html = str_replace('src="/yastatic.net','src="//yastatic.net',$html);
  151. $html = str_replace('rentafont_webfonts.js','../.js/rentafont_webfonts.js',$html);
  152. $html = str_replace('http://amic.ru/page'.$tildapage['id'],$api->local->getProjectDir().'/page'.$tildapage['id'],$html);
  153. $html = str_replace('https://amic.ru/page'.$tildapage['id'],$api->local->getProjectDir().'/page'.$tildapage['id'],$html);
  154. $html = str_replace('><',">\n<",$html);
  155. $matches = array();
  156. preg_match_all('|\<link(.*)|i', $html, $matches);
  157. foreach( $matches[1] as $item ){
  158. if( stristr( $item, '"canonical"') ){
  159. preg_match('|href="(.*)"|', $item, $m2);
  160. $html = str_replace( $m2[1], 'https://www.amic.ru/'.$api->local->getProjectDir(),$html);
  161. }
  162. }
  163. $tildapage['html'] = $html;
  164. }
  165. /* сохраним страницу (при сохранении также происходит копирование картинок использованных на странице) */
  166. $tildapage = $api->local->savePage($tildapage);
  167. echo "<br>Save page $pageid - success<br>\n";
  168. $tildapage = $api->local->saveMetaPage($tildapage);
  169. $countexport++;
  170. }
  171. ?>
  172. </div>
  173. </div>
  174. </div>
  175. </div>
  176. </div>
  177. <div class="row">
  178. <div class="col">
  179. <?
  180. $dir = Yii::getAlias('@webroot') . DIRECTORY_SEPARATOR . $api->local->getProjectDir();
  181. if( file_exists($dir.'index.html') ) unlink($dir.'index.html');
  182. if( @symlink( $dir.$mainPage, $dir.'index.html' ) ){
  183. echo '<h2><span class="badge badge-primary">Всё хорошо: index.html</span></h2>';
  184. }else{
  185. echo '<h2><span class="badge danger-primary">Ошибка создания index.html</span></h2>';
  186. }
  187. ?>
  188. </div>
  189. </div>