annotate .cms/mini/tpl.mod.php @ 1:1d486627aa1e draft default tip

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