KirKMS Posted March 24, 2021 Report Share Posted March 24, 2021 Всем привет. Решил написать ещё один модуль для пользователей форума cmstools.ru Модуль выводит недавно посещаемые сообщества пользователя. Принцип работы. Пользователь зашел в сообщество, оно занеслось в бд и выводиться на странице всех сообществ пользователя. Если пользователь зашел ещё раз, то сообщество будет самым первым в в списке. Есть возможность очищать список сообществ. И есть полноценная страница, где выводятся все сообщества. Вот вам несколько скринов. Недостатки. Если название сообщества будет длинным, то вывод будет не очень красиво. Но это можно исправить при помощи обрезания строки. Типо mb_strimwidth($name, 0, 10, "...") Этапы установки будут под спойлером. Спойлер Зайти в базу данный и выполнить SQL Запрос CREATE TABLE `vii_user_public_visits` ( `id` int(11) NOT NULL, `uid` int(11) NOT NULL, `pid` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE `vii_user_public_visits` ADD PRIMARY KEY (`id`); ALTER TABLE `vii_user_public_visits` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1; COMMIT; Зайти в файл .htaccess Найти там RewriteRule ^groups(/?)+$ index.php?go=groups [L] Вставить ниже RewriteRule ^groups/visits(/?)+$ index.php?go=groups&act=visits [L] Зайти в файл \system\modules\public.php Найти там $tpl->compile('content'); Вставить выше //Если есть текущее сообщество в списке, то удаляем для начала $db->query("DELETE FROM `".PREFIX."_user_public_visits` WHERE uid = '{$user_info['user_id']}' AND pid = '{$row['id']}'"); //Далее добавляем текущее сообщесто в список $db->query("INSERT INTO `".PREFIX."_user_public_visits` SET uid = '{$user_info['user_id']}', pid = '{$row['id']}'"); Зайти в файл\system\modules\groups.php Найти там default: Вставить выше //################### Модуль посещаемые сообщества by Kir KMS ###################// case "del_public_visits": NoAjaxQuery(); //Проверка что у пользователя есть список сообществ $check = $db->super_query("SELECT COUNT(*) AS cnt FROM `".PREFIX."_user_public_visits` WHERE uid = '{$user_info['user_id']}'"); //Если есть, то удаляем if($check['cnt']){ $db->query("DELETE FROM `".PREFIX."_user_public_visits` WHERE uid = '{$user_info['user_id']}'"); } exit(); break; //################### Моуль посещаемые сообщества by Kir KMS ###################// case "visits": $row_public_visits = $db->super_query("SELECT uid, pid FROM `".PREFIX."_user_public_visits` WHERE uid = '{$user_info['user_id']}' ORDER by `id` DESC LIMIT {$limit_page}, {$gcount}", 1); $row_public_visits_block = $db->super_query("SELECT COUNT(*) AS cnt FROM `".PREFIX."_user_public_visits` WHERE uid = '{$user_info['user_id']}'"); $tpl->load_template('groups/public_visits_head.tpl'); //Скрытие контента if($row_public_visits_block['cnt']){ $tpl->set('{num_visits}', $row_public_visits_block['cnt'].' '.gram_record($row_public_visits_block['cnt'], 'public_visits')); $tpl->set('[yes_public_visits]', ''); $tpl->set('[/yes_public_visits]', ''); $tpl->set_block("'\\[no_public_visits\\](.*?)\\[/no_public_visits\\]'si",""); }else{ $tpl->set('[no_public_visits]', ''); $tpl->set('[/no_public_visits]', ''); $tpl->set_block("'\\[yes_public_visits\\](.*?)\\[/yes_public_visits\\]'si",""); } $tpl->compile('info'); $tpl->load_template('groups/group_visits.tpl'); foreach($row_public_visits as $row){ //Запрос на вывод данных о сообществе $row = $db->super_query("SELECT id, title, photo, traf, adres FROM `".PREFIX."_communities` WHERE id = '{$row['pid']}'"); $tpl->set('{id}', $row['id']); if($row['adres']) $tpl->set('{adres}', $row['adres']); else $tpl->set('{adres}', 'public'.$row['id']); $tpl->set('{name}', stripslashes($row['title'])); $tpl->set('{icon}', getIcon($row['icons'])); $tpl->set('{traf}', $row['traf'].' '.gram_record($row['traf'], 'groups_users')); if($act != 'admin'){ $tpl->set('[admin]', ''); $tpl->set('[/admin]', ''); } else $tpl->set_block("'\\[admin\\](.*?)\\[/admin\\]'si",""); if($row['photo']) $tpl->set('{photo}', "/uploads/groups/{$row['id']}/100_{$row['photo']}"); else $tpl->set('{photo}', "{theme}/images/no_ava_groups_100.gif"); $tpl->compile('content'); } if($act == 'admin') $admn_act = 'act=admin&'; navigation($gcount, $owner['user_public_num'], 'groups?'.$admn_act.'page='); break; в этом же файле найти $tpl->load_template('groups/head.tpl'); Вставить ниже //Выводим список последних сообществ $row_public_visits = $db->super_query("SELECT uid, pid FROM `".PREFIX."_user_public_visits` WHERE uid = '{$user_info['user_id']}' ORDER by `id` DESC LIMIT 0, 7", 1); $row_public_visits_block = $db->super_query("SELECT COUNT(*) AS cnt FROM `".PREFIX."_user_public_visits` WHERE uid = '{$user_info['user_id']}'"); //Скрытие контента if($row_public_visits_block['cnt']){ $tpl->set('{num_visits}', $row_public_visits_block['cnt'].' '.gram_record($row_public_visits_block['cnt'], 'public_visits')); $tpl->set('[yes_public_visits]', ''); $tpl->set('[/yes_public_visits]', ''); }else{ $tpl->set_block("'\\[yes_public_visits\\](.*?)\\[/yes_public_visits\\]'si",""); } //Выводим сообщества foreach($row_public_visits as $row){ //Запрос на вывод данных о сообществе $sql_public_visits = $db->super_query("SELECT id, title, photo, traf, adres FROM `".PREFIX."_communities` WHERE id = '{$row['pid']}'"); if($sql_public_visits['photo']) $photo = "/uploads/groups/{$sql_public_visits['id']}/100_{$sql_public_visits['photo']}"; else $photo = "{theme}/images/no_ava_groups_100.gif"; $name = stripslashes($sql_public_visits['title']); if($sql_public_visits['adres']) $adres = $sql_public_visits['adres']; else $adres = 'public'.$sql_public_visits['id']; $traf = $sql_public_visits['traf'].' '.gram_record($sql_public_visits['traf'], 'groups_users'); $plist_users .= '<div class="onefaveu"><td><a href="/'.$adres.'" onClick="Page.Go(this.href); return false"><img src="'.$photo.'" alt="" /><div class="fave_tpad"><b>'.mb_strimwidth($name, 0, 10, "...").'</b></div></a><span class="online">'.$traf.'</span></div>'; }$tpl->set('{plist_users}', $plist_users); Закинуть файлы group_visits.tpl и public_visits_head.tpl в \templates\ваш шаблон\groups\ и открыть там файл head.tpl Найти в файле <div class="margin_top_10"></div><div class="allbar_title" [yes]style="margin-bottom:0px;border-bottom:0px"[/yes]>[yes]Вы состоите в {num}[/yes][no]Вы не состоите ни в одном сообществе.[/no]</div> Вставить выше [yes_public_visits] <div class="margin_top_10"></div><div class="allbar_title" style="margin-bottom:0px;border-bottom:1px solid #e0eaef">Недавно посещали {num_visits} |<a href="/groups/visits" onClick="Page.Go(this.href); return false;">Посмотреть все</a><a href="" onClick="groups.del_public_visits(); return false;"style="float: right;">Очистить список</a></div> <div style="height: 150px;">{plist_users}</div> [/yes_public_visits] Зайти в файл \templates\ваш шаблон\js\profile.js Найти там //GROUPS var groups = { Вставить сразу после //Модуль посещаемые сообщества by Kir KMS del_public_visits: function() { settings.privacyClose('msg'); Box.Show('del_public_visits', 380, lang_title_del_photo, '<div style="padding:15px;" id="del_status_text_forum">Вы уверены, что хотите очистить список посещаемых сообществ?</div>', lang_box_canсel, lang_box_yes, 'groups.start_public_visits()'); }, start_public_visits: function() { $.post('/index.php?go=groups&act=del_public_visits', function(d) { Box.Close(); Box.Info('err', 'Информация', 'Список посещаемых сообществ очищен.', 250, 2000); setTimeout('Page.Go(location.href)', 2300); }); }, Вот и вся установка Могут быть баги, это же паблик модуль С вами был KirKMS. От + в репу не откажусь. Предлагайте идеи для новых модулей. 6 Quote Link to comment Share on other sites More sharing options...
NaFanyA Posted March 24, 2021 Report Share Posted March 24, 2021 1) Сделай модуль, в функции которого можно будет выбирать "лайк" или "дизлайк" под записи пользователя или сообщества. 2) Модуль, позволяющий удалять записи с последующим их восстановлением. Типо удалил запись/пост, оно перемещается в раздел "Удаленный записи", после чего если захотел восстановить запись, то кликаешь по ней и она обратно возвращается к тебе на стену с пометкой "Восстановлено" Quote Link to comment Share on other sites More sharing options...
Stark98 Posted March 24, 2021 Report Share Posted March 24, 2021 4 часа назад, KirKMS сказал: Всем привет. Решил написать ещё один модуль для пользователей форума cmstools.ru Модуль выводит недавно посещаемые сообщества пользователя. Принцип работы. Пользователь зашел в сообщество, оно занеслось в бд и выводиться на странице всех сообществ пользователя. Если пользователь зашел ещё раз, то сообщество будет самым первым в в списке. Есть возможность очищать список сообществ. И есть полноценная страница, где выводятся все сообщества. Вот вам несколько скринов. Недостатки. Если название сообщества будет длинным, то вывод будет не очень красиво. Но это можно исправить при помощи обрезания строки. Типо mb_strimwidth($name, 0, 10, "...") Этапы установки будут под спойлером. Скрыть контент Зайти в базу данный и выполнить SQL Запрос CREATE TABLE `vii_user_public_visits` ( `id` int(11) NOT NULL, `uid` int(11) NOT NULL, `pid` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE `vii_user_public_visits` ADD PRIMARY KEY (`id`); ALTER TABLE `vii_user_public_visits` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1; COMMIT; Зайти в файл .htaccess Найти там RewriteRule ^groups(/?)+$ index.php?go=groups [L] Вставить ниже RewriteRule ^groups/visits(/?)+$ index.php?go=groups&act=visits [L] Зайти в файл \system\modules\public.php Найти там $tpl->compile('content'); Вставить выше //Если есть текущее сообщество в списке, то удаляем для начала $db->query("DELETE FROM `".PREFIX."_user_public_visits` WHERE uid = '{$user_info['user_id']}' AND pid = '{$row['id']}'"); //Далее добавляем текущее сообщесто в список $db->query("INSERT INTO `".PREFIX."_user_public_visits` SET uid = '{$user_info['user_id']}', pid = '{$row['id']}'"); Зайти в файл\system\modules\groups.php Найти там default: Вставить выше //################### Модуль посещаемые сообщества by Kir KMS ###################// case "del_public_visits": NoAjaxQuery(); //Проверка что у пользователя есть список сообществ $check = $db->super_query("SELECT COUNT(*) AS cnt FROM `".PREFIX."_user_public_visits` WHERE uid = '{$user_info['user_id']}'"); //Если есть, то удаляем if($check['cnt']){ $db->query("DELETE FROM `".PREFIX."_user_public_visits` WHERE uid = '{$user_info['user_id']}'"); } exit(); break; //################### Моуль посещаемые сообщества by Kir KMS ###################// case "visits": $row_public_visits = $db->super_query("SELECT uid, pid FROM `".PREFIX."_user_public_visits` WHERE uid = '{$user_info['user_id']}' ORDER by `id` DESC LIMIT {$limit_page}, {$gcount}", 1); $row_public_visits_block = $db->super_query("SELECT COUNT(*) AS cnt FROM `".PREFIX."_user_public_visits` WHERE uid = '{$user_info['user_id']}'"); $tpl->load_template('groups/public_visits_head.tpl'); //Скрытие контента if($row_public_visits_block['cnt']){ $tpl->set('{num_visits}', $row_public_visits_block['cnt'].' '.gram_record($row_public_visits_block['cnt'], 'public_visits')); $tpl->set('[yes_public_visits]', ''); $tpl->set('[/yes_public_visits]', ''); $tpl->set_block("'\\[no_public_visits\\](.*?)\\[/no_public_visits\\]'si",""); }else{ $tpl->set('[no_public_visits]', ''); $tpl->set('[/no_public_visits]', ''); $tpl->set_block("'\\[yes_public_visits\\](.*?)\\[/yes_public_visits\\]'si",""); } $tpl->compile('info'); $tpl->load_template('groups/group_visits.tpl'); foreach($row_public_visits as $row){ //Запрос на вывод данных о сообществе $row = $db->super_query("SELECT id, title, photo, traf, adres FROM `".PREFIX."_communities` WHERE id = '{$row['pid']}'"); $tpl->set('{id}', $row['id']); if($row['adres']) $tpl->set('{adres}', $row['adres']); else $tpl->set('{adres}', 'public'.$row['id']); $tpl->set('{name}', stripslashes($row['title'])); $tpl->set('{icon}', getIcon($row['icons'])); $tpl->set('{traf}', $row['traf'].' '.gram_record($row['traf'], 'groups_users')); if($act != 'admin'){ $tpl->set('[admin]', ''); $tpl->set('[/admin]', ''); } else $tpl->set_block("'\\[admin\\](.*?)\\[/admin\\]'si",""); if($row['photo']) $tpl->set('{photo}', "/uploads/groups/{$row['id']}/100_{$row['photo']}"); else $tpl->set('{photo}', "{theme}/images/no_ava_groups_100.gif"); $tpl->compile('content'); } if($act == 'admin') $admn_act = 'act=admin&'; navigation($gcount, $owner['user_public_num'], 'groups?'.$admn_act.'page='); break; в этом же файле найти $tpl->load_template('groups/head.tpl'); Вставить ниже //Выводим список последних сообществ $row_public_visits = $db->super_query("SELECT uid, pid FROM `".PREFIX."_user_public_visits` WHERE uid = '{$user_info['user_id']}' ORDER by `id` DESC LIMIT 0, 7", 1); $row_public_visits_block = $db->super_query("SELECT COUNT(*) AS cnt FROM `".PREFIX."_user_public_visits` WHERE uid = '{$user_info['user_id']}'"); //Скрытие контента if($row_public_visits_block['cnt']){ $tpl->set('{num_visits}', $row_public_visits_block['cnt'].' '.gram_record($row_public_visits_block['cnt'], 'public_visits')); $tpl->set('[yes_public_visits]', ''); $tpl->set('[/yes_public_visits]', ''); }else{ $tpl->set_block("'\\[yes_public_visits\\](.*?)\\[/yes_public_visits\\]'si",""); } //Выводим сообщества foreach($row_public_visits as $row){ //Запрос на вывод данных о сообществе $sql_public_visits = $db->super_query("SELECT id, title, photo, traf, adres FROM `".PREFIX."_communities` WHERE id = '{$row['pid']}'"); if($sql_public_visits['photo']) $photo = "/uploads/groups/{$sql_public_visits['id']}/100_{$sql_public_visits['photo']}"; else $photo = "{theme}/images/no_ava_groups_100.gif"; $name = stripslashes($sql_public_visits['title']); if($sql_public_visits['adres']) $adres = $sql_public_visits['adres']; else $adres = 'public'.$sql_public_visits['id']; $traf = $sql_public_visits['traf'].' '.gram_record($sql_public_visits['traf'], 'groups_users'); $plist_users .= '<div class="onefaveu"><td><a href="/'.$adres.'" onClick="Page.Go(this.href); return false"><img src="'.$photo.'" alt="" /><div class="fave_tpad"><b>'.mb_strimwidth($name, 0, 10, "...").'</b></div></a><span class="online">'.$traf.'</span></div>'; }$tpl->set('{plist_users}', $plist_users); Закинуть файлы group_visits.tpl 0 444 Б и public_visits_head.tpl 0 1 кБ в \templates\ваш шаблон\groups\ и открыть там файл head.tpl Найти в файле <div class="margin_top_10"></div><div class="allbar_title" [yes]style="margin-bottom:0px;border-bottom:0px"[/yes]>[yes]Вы состоите в {num}[/yes][no]Вы не состоите ни в одном сообществе.[/no]</div> Вставить выше [yes_public_visits] <div class="margin_top_10"></div><div class="allbar_title" style="margin-bottom:0px;border-bottom:1px solid #e0eaef">Недавно посещали {num_visits} |<a href="/groups/visits" onClick="Page.Go(this.href); return false;">Посмотреть все</a><a href="" onClick="groups.del_public_visits(); return false;"style="float: right;">Очистить список</a></div> <div style="height: 150px;">{plist_users}</div> [/yes_public_visits] Зайти в файл \templates\ваш шаблон\js\profile.js Найти там //GROUPS var groups = { Вставить сразу после //Модуль посещаемые сообщества by Kir KMS del_public_visits: function() { settings.privacyClose('msg'); Box.Show('del_public_visits', 380, lang_title_del_photo, '<div style="padding:15px;" id="del_status_text_forum">Вы уверены, что хотите очистить список посещаемых сообществ?</div>', lang_box_canсel, lang_box_yes, 'groups.start_public_visits()'); }, start_public_visits: function() { $.post('/index.php?go=groups&act=del_public_visits', function(d) { Box.Close(); Box.Info('err', 'Информация', 'Список посещаемых сообществ очищен.', 250, 2000); setTimeout('Page.Go(location.href)', 2300); }); }, Вот и вся установка Могут быть баги, это же паблик модуль С вами был KirKMS. От + в репу не откажусь. Предлагайте идеи для новых модулей. Модуль хороший, лайк в репу). А на счет длинного названия, то для этого есть: text-overflow: ellipsis; 2 Quote Link to comment Share on other sites More sharing options...
KirKMS Posted March 24, 2021 Author Report Share Posted March 24, 2021 1 час назад, _inkognito_04 сказал: 1) Сделай модуль, в функции которого можно будет выбирать "лайк" или "дизлайк" под записи пользователя или сообщества. 2) Модуль, позволяющий удалять записи с последующим их восстановлением. Типо удалил запись/пост, оно перемещается в раздел "Удаленный записи", после чего если захотел восстановить запись, то кликаешь по ней и она обратно возвращается к тебе на стену с пометкой "Восстановлено" Очень хорошие идеи. В паблике я создавал модуль удаления и восстановления записей, на основе его, можно сделать. т.к из бд запись не удаляется. Вопрос в том, где выводить эти записи. 1 Quote Link to comment Share on other sites More sharing options...
wooweef Posted March 26, 2021 Report Share Posted March 26, 2021 Годнота. Quote Link to comment Share on other sites More sharing options...
RUS67 Posted April 24, 2021 Report Share Posted April 24, 2021 (edited) Работает отлично, НО, если сообщество верифицировано (подтверждено), то название не выводится - а отображается только картинка группы и кол-во участников. Может я что не так прописал, но во всём остальном без проблем! Edited April 24, 2021 by RUS67 Quote Link to comment Share on other sites More sharing options...
NaFanyA Posted April 24, 2021 Report Share Posted April 24, 2021 3 часа назад, RUS67 сказал: Работает отлично, НО, если сообщество верифицировано (подтверждено), то название не выводится - а отображается только картинка группы и кол-во участников. Может я что не так прописал, но во всём остальном без проблем! Исправляется легко в php файле Quote Link to comment Share on other sites More sharing options...
Disy Posted December 21, 2021 Report Share Posted December 21, 2021 Вроде все норм, но при переходе во все просмотренные (visits) выдает ошибку 500.. Кто подскажет почему так? Quote Link to comment Share on other sites More sharing options...
KirKMS Posted December 22, 2021 Author Report Share Posted December 22, 2021 6 часов назад, Disy сказал: Вроде все норм, но при переходе во все просмотренные (visits) выдает ошибку 500.. Кто подскажет почему так? Проверь этапы установки модуля. Допустил ошибку скорее всего!!! Quote Link to comment Share on other sites More sharing options...
ytryr Posted December 22, 2021 Report Share Posted December 22, 2021 Можно такой же сделать в поиске Людей кто новый или часто посещает будет круто думаю раньше помню был для зарегистрированных но не нашел его и там был на страницу регистрации Quote Link to comment Share on other sites More sharing options...
KirKMS Posted December 22, 2021 Author Report Share Posted December 22, 2021 2 часа назад, ytryr сказал: Можно такой же сделать в поиске Людей кто новый или часто посещает будет круто думаю раньше помню был для зарегистрированных но не нашел его и там был на страницу регистрации Конечно можно сделать. Берёшь и делаешь. Всё очень просто. Добавляешь сортировку новую и всё. 1 Quote Link to comment Share on other sites More sharing options...
Disy Posted December 24, 2021 Report Share Posted December 24, 2021 В 22.12.2021 в 06:38, KirKMS сказал: Проверь этапы установки модуля. Допустил ошибку скорее всего!!! Все перепроверил 2 раза, ошибок не допустил, но все же имеется ошибка 500.. Quote Link to comment Share on other sites More sharing options...
Disy Posted December 24, 2021 Report Share Posted December 24, 2021 Может дело в версии php? Какую используешь? Quote Link to comment Share on other sites More sharing options...
KirKMS Posted December 24, 2021 Author Report Share Posted December 24, 2021 1 час назад, Disy сказал: Может дело в версии php? Какую используешь? Не уверен что в версии php. Модуль писал на версии 7.3. Пиши в ВК Давай тимвивер, я помогу с проблемой. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.