0
|
1 <main>
|
|
2 <?php
|
|
3 $date = date( 'Y-m-d H:i:s' );
|
|
4 $q = "SELECT * FROM pages WHERE tpl = 'post' AND `created`<'{$date}' AND published ORDER BY `created` DESC";
|
|
5 if ( $res = mysqli_query( $cms["base"], $q ) ) {
|
|
6
|
|
7 $html = "";
|
|
8 $n = 12;
|
|
9
|
|
10 while ( $n-- > 0 && $page = mysqli_fetch_assoc( $res ) ) {
|
|
11
|
|
12 if ( preg_match( '/<img[^>]+data-preview[^>]*>/us', $page['text'], $m ) ) {
|
|
13 $preview_img = $m[0];
|
|
14 } else {
|
|
15 $preview_img = '';
|
|
16 }
|
|
17
|
|
18 if ( preg_match( '/^(.*)(<!--[\s]*preview-start[\s]*-->)(.*)(<!--[\s]*preview-end[\s]*-->)(.*)$/us', $page['text'], $m ) ) {
|
|
19 $preview = $m[3];
|
|
20 } else {
|
|
21 $preview = preg_replace( "/<h1>(.*?)<\/h1>/su", "", $page['text'] );
|
|
22 $preview = preg_replace( "/<style>(.*?)<\/style>/su", "", $preview );
|
|
23 $preview = trim( $preview );
|
|
24 $preview = mb_substr( strip_tags( $preview ), 0, 500 );
|
|
25 $preview = preg_replace( '/\s\S*$/u', ' ...', $preview );
|
|
26 $preview = "<p>{$preview}</p>";
|
|
27 }
|
|
28
|
|
29 $html .= "
|
|
30 <article data-date='{$page['created']}'>
|
|
31 {$preview_img}
|
|
32 <h2><a href='{$page['url']}' target=_blank>{$page['title']}</a></h2>
|
|
33 {$preview}
|
|
34 </article>
|
|
35 ";
|
|
36
|
|
37 }
|
|
38
|
|
39 echo $html;
|
|
40 // Показать кнопку "Загрузить еще" если есть посты
|
|
41 if ( $page = mysqli_fetch_assoc( $res ) ) {
|
|
42 $tpl = $cms["config"]["template.mod.php"]["template"];
|
|
43 echo "<button class=load-more>" . __( "load_more", $tpl ) . "</button>";
|
|
44 }
|
|
45
|
|
46 }
|
|
47 ?>
|
|
48 <script>
|
|
49 document.addEventListener( "DOMContentLoaded", function( event ) {
|
|
50 let main = document.querySelector( "body > main" );
|
|
51 function load_more() {
|
|
52 let more = document.querySelector( `button[class="load-more"]` );
|
|
53 if ( more ) more.addEventListener( "click", function( el ) {
|
|
54 let last_el = this.previousElementSibling;
|
|
55 let last = last_el.getAttribute( "data-date" );
|
|
56 api( { last: last }, function( html ) {
|
|
57 more.remove();
|
|
58 main.insertAdjacentHTML( "beforeend", html );
|
|
59 load_more();
|
|
60 } );
|
|
61 } );
|
|
62 }
|
|
63 load_more();
|
|
64
|
|
65 function api( data, rfn ) {
|
|
66 const formData = new FormData();
|
|
67 buildFormData( formData, data );
|
|
68 let ajax = new XMLHttpRequest();
|
|
69 ajax.addEventListener( "load", function( event ) {
|
|
70 rfn( event.target.responseText );
|
|
71 } );
|
|
72 ajax.addEventListener( "error", function( event ) {
|
|
73 console.log( event );
|
|
74 } );
|
|
75 ajax.open( "POST", "<?php echo $cms["base_path"]; ?>get_posts" );
|
|
76 ajax.send( formData );
|
|
77 }
|
|
78 function buildFormData( formData, data, parentKey ) {
|
|
79 if ( data && typeof data === 'object' && ! ( data instanceof Date ) && ! ( data instanceof File ) ) {
|
|
80 Object.keys( data ).forEach( key => {
|
|
81 buildFormData( formData, data[key], parentKey ? `${parentKey}[${key}]` : key );
|
|
82 } );
|
|
83 } else {
|
|
84 const value = data == null ? '' : data;
|
|
85 formData.append( parentKey, value );
|
|
86 }
|
|
87 }
|
|
88 } );
|
|
89 </script>
|
|
90 </main>
|