Jump to content

[Модуль] Недавно посещаемые сообщества 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 5
Link to comment
Share on other sites

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

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

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

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

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

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

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

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

  • Upvote 1
Link to comment
Share on other sites

  • 4 weeks later...

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

image.png.28b2e9eac4bc9f81153dd6765a534954.png

Edited by RUS67
Link to comment
Share on other sites

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

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

image.png.28b2e9eac4bc9f81153dd6765a534954.png

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...