Jump to content
Sign in to follow this  
KirKMS

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

Recommended Posts

Всем привет.: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 3
  • Upvote 1

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
1 час назад, _inkognito_04 сказал:

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

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

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×