annotate .cms/mini/blog.php @ 0:78edf6b517a0 draft

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