Перейти к содержанию
CMSTOOLS.org - форум поддержки и развития CMS

[Модуль] Недавно посещаемые сообщества By KirKMS


Рекомендуемые сообщения

Всем привет.:emoji_1f63c:

Решил написать ещё один модуль для пользователей форума cmstools.ru

Модуль выводит недавно посещаемые сообщества пользователя.

Принцип работы.

Пользователь зашел в сообщество, оно занеслось в бд и выводиться на странице всех сообществ пользователя.

Если пользователь зашел ещё раз, то сообщество будет самым первым в в списке.

Есть возможность очищать список сообществ. И есть полноценная страница, где выводятся все сообщества.

Вот вам несколько скринов.

image.pngimage.pngimage.pngimage.png

Недостатки.

Если название сообщества будет длинным, то вывод будет не очень красиво.

Но это можно исправить при помощи обрезания строки.

Типо 

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);  
		});
		
 
	},

Вот и вся установка

Могут быть баги, это же паблик модуль :emoji_1f602:

С вами был KirKMS.

От + в репу не откажусь.

Предлагайте идеи для новых модулей.

 

 

 

  • Like 6
Ссылка на комментарий
Поделиться на другие сайты

1) Сделай модуль, в функции которого можно будет выбирать "лайк" или "дизлайк" под записи пользователя или сообщества. 

2) Модуль, позволяющий удалять записи с последующим их восстановлением. Типо удалил запись/пост, оно перемещается в раздел "Удаленный записи", после чего если захотел восстановить запись, то кликаешь по ней и она обратно возвращается к тебе на стену с пометкой "Восстановлено"

Ссылка на комментарий
Поделиться на другие сайты

4 часа назад, KirKMS сказал:

Всем привет.:emoji_1f63c:

Решил написать ещё один модуль для пользователей форума cmstools.ru

Модуль выводит недавно посещаемые сообщества пользователя.

Принцип работы.

Пользователь зашел в сообщество, оно занеслось в бд и выводиться на странице всех сообществ пользователя.

Если пользователь зашел ещё раз, то сообщество будет самым первым в в списке.

Есть возможность очищать список сообществ. И есть полноценная страница, где выводятся все сообщества.

Вот вам несколько скринов.

image.pngimage.pngimage.pngimage.png

Недостатки.

Если название сообщества будет длинным, то вывод будет не очень красиво.

Но это можно исправить при помощи обрезания строки.

Типо 


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);  
		});
		
 
	},

Вот и вся установка

Могут быть баги, это же паблик модуль :emoji_1f602:

С вами был KirKMS.

От + в репу не откажусь.

Предлагайте идеи для новых модулей.

 

 

 

Модуль хороший, лайк в репу). А на счет длинного названия, то для этого есть:

text-overflow: ellipsis;
  • Like 2
Ссылка на комментарий
Поделиться на другие сайты

1 час назад, _inkognito_04 сказал:

1) Сделай модуль, в функции которого можно будет выбирать "лайк" или "дизлайк" под записи пользователя или сообщества. 

2) Модуль, позволяющий удалять записи с последующим их восстановлением. Типо удалил запись/пост, оно перемещается в раздел "Удаленный записи", после чего если захотел восстановить запись, то кликаешь по ней и она обратно возвращается к тебе на стену с пометкой "Восстановлено"

Очень хорошие идеи. В паблике я создавал модуль удаления и восстановления записей, на основе его, можно сделать.

т.к из бд запись не удаляется. Вопрос в том, где выводить эти записи.

  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

  • 4 недели спустя...

Работает отлично, НО,  если сообщество верифицировано (подтверждено), то название не выводится - а отображается только картинка группы и кол-во участников.  Может я что не так прописал, но во всём остальном без проблем!:)

image.png.28b2e9eac4bc9f81153dd6765a534954.png

Изменено пользователем RUS67
Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, RUS67 сказал:

Работает отлично, НО,  если сообщество верифицировано (подтверждено), то название не выводится - а отображается только картинка группы и кол-во участников.  Может я что не так прописал, но во всём остальном без проблем!:)

image.png.28b2e9eac4bc9f81153dd6765a534954.png

Исправляется легко в php файле 

Ссылка на комментарий
Поделиться на другие сайты

  • 7 месяцев спустя...
6 часов назад, Disy сказал:

Вроде все норм, но при переходе во все просмотренные (visits) выдает ошибку 500.. Кто подскажет почему так?

Проверь этапы установки модуля. Допустил ошибку скорее всего!!!

Ссылка на комментарий
Поделиться на другие сайты

Можно такой же сделать в поиске Людей кто новый или часто посещает будет круто думаю раньше помню был для зарегистрированных но не нашел его и там был на страницу регистрации 

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, ytryr сказал:

Можно такой же сделать в поиске Людей кто новый или часто посещает будет круто думаю раньше помню был для зарегистрированных но не нашел его и там был на страницу регистрации 

Конечно можно сделать. Берёшь и делаешь. Всё очень просто. Добавляешь сортировку новую и всё.

  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

В 22.12.2021 в 06:38, KirKMS сказал:

Проверь этапы установки модуля. Допустил ошибку скорее всего!!!

Все перепроверил 2 раза, ошибок не допустил, но все же имеется ошибка 500..

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Disy сказал:

Может дело в версии php? Какую используешь?

Не уверен что в версии php. Модуль писал на версии 7.3.

Пиши в ВК Давай тимвивер, я помогу с проблемой. 

 

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...