Mercurial
comparison .cms/mini/tpl.mod.php @ 0:78edf6b517a0 draft
24.10
author | Coffee CMS <info@coffee-cms.ru> |
---|---|
date | Fri, 11 Oct 2024 22:40:23 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:78edf6b517a0 |
---|---|
1 <?php | |
2 | |
3 // ru_RU.UTF-8: | |
4 // Мини-модуль, встроенный в шаблон, | |
5 // демонстрирующий поиск и пагинацию. | |
6 | |
7 $cms["urls"]["^{$cms['base_path']}search_by_tag$"] = "hook_search_by_tag"; | |
8 $cms["urls"]["^{$cms['base_path']}get_posts$"] = "hook_tpl_get_posts"; | |
9 | |
10 hook_add_fn( "hook_search_by_tag", "tpl_search_by_tag_fn" ); | |
11 hook_add_fn( "menu_item_link", "tpl_menu_item_link" ); | |
12 hook_add_fn( "hook_tpl_get_posts", "tpl_get_posts" ); | |
13 | |
14 $tpl = $cms["config"]["template.mod.php"]["template"]; | |
15 // Translate | |
16 $cms["lang"][$tpl]["en_US.UTF-8"] = array( | |
17 "load_more" => "Load more", | |
18 ); | |
19 $cms["lang"][$tpl]["ru_RU.UTF-8"] = array( | |
20 "load_more" => "Загрузить еще", | |
21 ); | |
22 $cms["lang"][$tpl]["uk_UA.UTF-8"] = array( | |
23 "load_more" => "Завантажити ще", | |
24 ); | |
25 | |
26 // Делает дополнительную обертку пунктам меню имеющим подпункты | |
27 // Как проверить: | |
28 // | |
29 function tpl_menu_item_link() { | |
30 global $cms; | |
31 | |
32 if ( $cms["menu.mod.php"]["item_link"]["has_submenu"] ) { | |
33 $cms["menu.mod.php"]["item_link"]["link"] = " | |
34 <div class=plus> | |
35 {$cms['menu.mod.php']['item_link']['link']} | |
36 <div class=icon></div> | |
37 </div>"; | |
38 } | |
39 } | |
40 | |
41 // Поиск по тегам | |
42 // Как проверить: | |
43 // Нигде не задействована | |
44 function tpl_search_by_tag_fn() { | |
45 global $cms; | |
46 if ( ! empty( $_GET['tag'] ) ) { | |
47 $cms["page"]["title"] = "Поиск по тегу"; | |
48 $cms["status"] = "200"; | |
49 $cms["hooks"]["write"]["disabled"] = true; | |
50 $cms["hooks"]["hook_search_by_tag"]["next"] = "template"; | |
51 $cms["page"]["text"] = "<h1>Статьи с тегом \"{$_GET['tag']}\"</h1>"; | |
52 $cms["page"]["tpl"] = "page"; | |
53 $cms["page"]["id"] = "search"; | |
54 | |
55 if ( cms_base_connect() ) { | |
56 $etag = mysqli_real_escape_string( $cms["base"], $_GET["tag"] ); | |
57 $query = "SELECT * FROM pages WHERE tags LIKE '%{$etag}%' ORDER BY id DESC"; | |
58 | |
59 if ( $res = mysqli_query( $cms["base"], $query ) ) { | |
60 while ( $page = mysqli_fetch_assoc( $res ) ) { | |
61 $cms["page"]["text"] .= "<a target=_blank href='{$cms['base_path']}{$page['url']}'>{$page['title']}</a>"; | |
62 } | |
63 } else { | |
64 $cms["page"]["text"] .= "<p class=error>Ошибка выполнения запроса к базе данных.</p>"; | |
65 } | |
66 } else { | |
67 $cms["page"]["text"] .= "<p class=error>Ошибка подключения к базе данных.</p>"; | |
68 } | |
69 } | |
70 } | |
71 | |
72 function tpl_get_posts() { | |
73 global $cms; | |
74 | |
75 if ( ! empty( $_POST["last"] ) ) { | |
76 cms_base_connect(); | |
77 | |
78 $last = mysqli_real_escape_string( $cms["base"], $_POST["last"] ); | |
79 $date = date( 'Y-m-d H:i:s' ); | |
80 // `created`<'{$date}' все равно нужно чтобы не запрашивали будущие | |
81 $q = "SELECT * FROM pages WHERE tpl = 'post' AND `created`<'{$last}' AND `created`<'{$date}' AND published ORDER BY `created` DESC"; | |
82 if ( $res = mysqli_query( $cms["base"], $q ) ) { | |
83 | |
84 $html = ""; | |
85 $n = 12; | |
86 | |
87 while ( $n-- > 0 && $page = mysqli_fetch_assoc( $res ) ) { | |
88 | |
89 if ( preg_match( '/<img[^>]+data-preview[^>]*>/us', $page['text'], $m ) ) { | |
90 $preview_img = $m[0]; | |
91 } else { | |
92 $preview_img = ''; | |
93 } | |
94 | |
95 if ( preg_match( '/^(.*)(<!--[\s]*preview-start[\s]*-->)(.*)(<!--[\s]*preview-end[\s]*-->)(.*)$/us', $page['text'], $m ) ) { | |
96 $preview = $m[3]; | |
97 } else { | |
98 $preview = preg_replace( "/<h1>(.*?)<\/h1>/su", "", $page['text'] ); | |
99 $preview = preg_replace( "/<style>(.*?)<\/style>/su", "", $preview ); | |
100 $preview = trim( $preview ); | |
101 $preview = mb_substr( strip_tags( $preview ), 0, 500 ); | |
102 $preview = preg_replace( '/\s\S*$/u', ' ...', $preview ); | |
103 $preview = "<p>{$preview}</p>"; | |
104 } | |
105 | |
106 $html .= " | |
107 <article data-date='{$page['created']}'> | |
108 {$preview_img} | |
109 <h2><a href='{$page['url']}' target=_blank>{$page['title']}</a></h2> | |
110 {$preview} | |
111 </article> | |
112 "; | |
113 | |
114 } | |
115 | |
116 echo $html; | |
117 // Показать кнопку "Загрузить еще" если есть посты | |
118 if ( $page = mysqli_fetch_assoc( $res ) ) { | |
119 $tpl = $cms["config"]["template.mod.php"]["template"]; | |
120 echo "<button class=load-more>" . __( "load_more", $tpl ) . "</button>"; | |
121 } | |
122 | |
123 } | |
124 } | |
125 } |