Перейти к контенту

[2.1.x]Forums Visibility / Видимость Форумов / 2.1.x


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

Название: Forums Visibility / Видимость Форумов / 2.1.x

Добавил: Arhar

Добавлен: 04 Апр 2007

Обновлен: 06 Апр 2007

Категория: IP.Board 2.1.x

 

Адаптация мода www.ibresource.ru/db/153/ для версии 2.1.х

 

Посвящается Master, без его помощи мод бы не был доработан и приведен в нормальный функциональный вид

 

Данная модификация позволяет всем зарегистрированным пользователям, через систему управления профилем, контролировать вывод форумов в списке форумов. То есть составить свой список форумов, который будет выводиться на главной странице, тем самым оставив для себя только интересные (наиболее посещаемые) разделы. Настройка индивидуальна для каждого пользователя!

 

Нажмите здесь, чтобы скачать файл

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

  • Ответы 70
  • Создана
  • Последний ответ

Лучшие авторы в этой теме

Лучшие авторы в этой теме

5 Баллов!

Работает на ура.

 

Архар, молодец!

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

там в 21 такая муторная система доступа по маскам..не по ид групп, а по туфтятине, и причем учитываются еще и второстепенные группы и второстепенные маски

так что RC)

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

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

еще один ньюанс, в моде в usercp.php добавляется

if (strpos(",".$forum['read_perms'].",",",".$gid.","))

так вот, если гид стоит в строке реад_пермс на первом месте, то функция вернет 0

поэтому сделаем так, заменим эту строчку на

if (strpos("notnull,".$forum['read_perms'].",",",".$gid.","))

инструкцию поправлю

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

По желанию,

 

на шаге:

5. Добавить шаблон в skin_ucp 
Название - forum_end
Переменные -
Содержание -

Предлагаемое содержание:

<tr>
<td align='right' class='titlemedium' valign='middle' colspan='5'><input type="submit" value="Поменять" class='forminput'></td></tr>
</table>
</div>
</form>

заменить на:

<tr>
<td align='center' class='row1' valign='middle' colspan='2'><input type="submit" value="Сохранить изменения" class='forminput'></td></tr>
</table>
</div>
</form>

Итог: кнопка сохранения изменений будет смотреться лучше.

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

Скриншоты получившейся кнопки можно наблюдать какое-то время тут:

 

http://www.lofors.com/images/1.gif

http://www.lofors.com/images/2.gif

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

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

Код в студию!

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

У меня только две функции - hide_forums и функция апдейта hide_forums_upd

 

 	function hide_forums()
	{
		$this->output .= $this->ipsclass->compiled_templates['skin_ucp']->hide_forums_head();
		foreach( $this->ipsclass->forums->forum_cache['root'] as $id => $forum_data )
		{
			$cat_data = $forum_data;
			if ( is_array( $this->ipsclass->forums->forum_cache[ $forum_data['id'] ] ) )
			{
				foreach( $this->ipsclass->forums->forum_cache[ $forum_data['id'] ] as $id => $forum_data )
				{
					if ( $this->ipsclass->check_perms($forum_data['show_perms']) != TRUE ) continue;
					if (in_array($forum_data['id'], explode(",",$this->ipsclass->member['hide_forums']))) 
						$forum_data['checked'] = 'checked="checked"'; 
					$forum_data['folder_icon'] = $this->ipsclass->forums->forums_new_posts($forum_data);
					$forum_data['last_post']   = $this->ipsclass->get_date($forum_data['last_post'], 'LONG');
					$forum_data['last_topic']  = $this->ipsclass->lang['f_none'];
					$forum_data['last_title']  = str_replace( "!" , "!", $forum_data['last_title'] );
					$forum_data['last_title']  = str_replace( """, "\"", $forum_data['last_title'] );	
					if ( strlen($forum_data['last_title']) > 30 )
					{
					$forum_data['last_title'] = substr($forum_data['last_title'],0,27) . "...";
					$forum_data['last_title'] = preg_replace( '/&(#(\d+;?)?)?\.\.\.$/', '...', $forum_data['last_title'] );
					}
					if ($forum_data['password'] != "")
						$forum_data['last_topic'] = $this->ipsclass->lang['f_none'];
					else
						$forum_data['last_topic'] = "<a href='{$this->ipsclass->base_url}showtopic={$forum_data['last_id']}&view=getlastpost'>{$forum_data['last_title']}</a>";		
					if ( isset($forum_data['last_poster_name']))
						$forum_data['last_poster'] = $forum_data['last_poster_id'] ? "<a href='{$this->ipsclass->base_url}showuser={$forum_data['last_poster_id']}'>{$forum_data['last_poster_name']}</a>"
						 : $forum_data['last_poster_name'];
					else
						$forum_data['last_poster'] = $this->ipsclass->lang['f_none'];
					if ( $this->ipsclass->vars['forum_cache_minimum'] )
					{
					$forum_data['description'] = "<!--DESCRIPTION:{$forum_data['id']}-->";
					$need_desc[] = $forum_data['id'];
					}
					if ( $forum_data['redirect_on'] )
						continue;
					else
						$temp_html .= $this->ipsclass->compiled_templates['skin_ucp']->hide_forums_row( $forum_data  );
			   }
			}
			if ( $temp_html )
				$this->output .= $temp_html;
			  unset($temp_html);
		}
			$this->output .= $this->ipsclass->compiled_templates['skin_ucp']->hide_forums_end();
		$this->page_title = $this->ipsclass->lang['t_welcome'];
 		$this->nav		= array( "<a href='".$this->ipsclass->base_url."act=UserCP&CODE=00'>".$this->ipsclass->lang['t_title']."</a>" );
	}

	function hide_forums_upd()
	{
	$ids = array();
		foreach ($this->ipsclass->input as $key => $value)
			if ( preg_match( "/^id-(\d+)$/", $key, $match ) )
				if ($this->ipsclass->input[$match[0]])
					$ids[] = $match[1];

		//$this->output .= print_r($ids);
		$this->ipsclass->DB->do_update( 'members', array( 'hide_forums' => ''.implode( ",", $ids ).'' ), "id={$this->ipsclass->member['id']}" );
		$this->ipsclass->boink_it($this->ipsclass->base_url."act=UserCP&CODE=hide_forums");
   }

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

Кстати,

 

в моде слово "inVisible", которое отображается в колонке с галочками в личных данных можно заменить, например, на такой вот символ ""

 

будет смотреться тоже более лучше

 

 

 

www.lofors.com/images/3.gif

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

если автор не использует кеш, значит автор не знает его устройства

плюс автор переписывал код с 1.1.х, а с тех пор столько всего менялось...

к тому же, автор не видит больших проблем в добавлении 2 лишних запросов к базе, тем более планирую их оптимизировать

тем более права доступа учтены максимально возможно

с запароленными форумами еще добавлю проверку

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

выходит поправленная версия, спасибо всем за пояснения и наводки

 

для обновления необходимо произвести следующие действия:

 

 

Добавить шаблон в skin_ucp

Название - forum_cat_row

Переменные - $data=""

Содержание -

<tr>
                  <td class='row1' align='left' colspan="2">
                      <b><a href='{ipb.script_url}act=SF&f={$data['id']}'>{$data['name']}</a></b>
                      <br><span class='desc'>{$data['description']}</span>
                  </td>
                </tr>

 

 

 

В файле sources/action_public/usercp.php

 

найти

 

function forums_view()

...

}

?>

 

заменить на

 

 	function forums_view() {

		$this->output .= $this->ipsclass->compiled_templates['skin_ucp']->forum_header();

	foreach( $this->ipsclass->forums->forum_cache['root'] as $id => $forum_data )
		{
			$cat_data = $forum_data;
			$temp_html .= $this->ipsclass->compiled_templates['skin_ucp']->forum_cat_row( $cat_data );

			if ( is_array( $this->ipsclass->forums->forum_cache[ $forum_data['id'] ] ) )
			{
				foreach( $this->ipsclass->forums->forum_cache[ $forum_data['id'] ] as $id => $forum_data )
				{
					if ( $this->ipsclass->check_perms($forum_data['show_perms']) != TRUE ) continue;
					if (in_array($forum_data['id'], explode(",",$this->ipsclass->member['invisible_forums']))) 
						$forum_data['checked'] = 'checked="checked"'; 
					if ( $this->ipsclass->vars['forum_cache_minimum'] )
					{
					$forum_data['description'] = "<!--DESCRIPTION:{$forum_data['id']}-->";
					$need_desc[] = $forum_data['id'];
					}
					$temp_html .= $this->ipsclass->compiled_templates['skin_ucp']->forum_row( $forum_data  );
			   }
			}

			if ( $temp_html )
				$this->output .= $temp_html;
			  unset($temp_html);
		}
	$this->output .= $this->ipsclass->compiled_templates['skin_ucp']->forum_end();

	$this->page_title = $this->ipsclass->lang['t_welcome'];
		$this->nav		= array( "<a href='".$this->ipsclass->base_url."act=UserCP&CODE=00'>".$this->ipsclass->lang['t_title']."</a>" );

	}

	//*******************************************************************/
	//| Forums Visibility Change function
	//|
	//| Change user inVisible forums list.
	//|
	//*******************************************************************/
	function do_forums_view()
	{

	//---------------------------------------------------------
	// If no inVisible forums then make default variable value
	//---------------------------------------------------------
	if (empty($this->ipsclass->input['invForums']))
		{
			$this->ipsclass->input['invForums'][] = '0';
		}

	//---------------------------------------------------------
	// Create string of inVisible forums id's
	//---------------------------------------------------------

	$invis_forums_list = implode(',',$this->ipsclass->input['invForums']);


	//---------------------------------------------------------
	//update user profile in DataBase
	//---------------------------------------------------------
		$this->ipsclass->DB->do_update( 'members', array( 'invisible_forums' => ''.$invis_forums_list.'' ), "id={$this->ipsclass->member['id']}" );

	//---------------------------------------------------------
	//redirect to the Forums List
	//---------------------------------------------------------
	$this->ipsclass->print->redirect_screen( 'Видимость форумов изменена', 'act=UserCP&CODE=333' );
}
}

?>

 

могу сказать, что в этом случае нет возможности убрать подфорумы...плохо

надо будет поработать над этим

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

еще одно изменение внес, для показа подфорумов

да здравствует рекурсия)

ща напишу

 

для обновления заменить функцию forums_view()

на две:

	 function forums_view() {

	 $this->output .= $this->ipsclass->compiled_templates['skin_ucp']->forum_header();

		foreach( $this->ipsclass->forums->forum_cache['root'] as $id => $forum_data )
		{
		$cat_data = $forum_data;
		$this->output .= $this->ipsclass->compiled_templates['skin_ucp']->forum_cat_row( $cat_data );

				if ( is_array( $this->ipsclass->forums->forum_cache[ $forum_data['id'] ] ) )
				{
			$this->recursion_forum_view($this->ipsclass->forums->forum_cache[ $forum_data['id'] ]);
				}
		}
	$this->output .= $this->ipsclass->compiled_templates['skin_ucp']->forum_end();

	$this->page_title = $this->ipsclass->lang['t_welcome'];
	 $this->nav		= array( "<a href='".$this->ipsclass->base_url."act=UserCP&CODE=00'>".$this->ipsclass->lang['t_title']."</a>" );

 }

function recursion_forum_view($forums)
{
		   foreach( $forums as $id => $forum_data )
		{
		if ( $this->ipsclass->check_perms($forum_data['show_perms']) != TRUE ) continue;

		if (in_array($forum_data['id'], explode(",",$this->ipsclass->member['invisible_forums']))) 
					  $forum_data['checked'] = 'checked="checked"'; 
				if ( $this->ipsclass->vars['forum_cache_minimum'] )
				{
					  $forum_data['description'] = "<!--DESCRIPTION:{$forum_data['id']}-->";
			$need_desc[] = $forum_data['id'];
			}
			$this->output .= $this->ipsclass->compiled_templates['skin_ucp']->forum_row( $forum_data  );

		if (is_array( $this->ipsclass->forums->forum_cache[ $forum_data['id'] ]))
			$this->recursion_forum_view($this->ipsclass->forums->forum_cache[ $forum_data['id'] ]);

	}
}

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

Спасибо за мод, хорошая вещь. А можно ли сделать так, чтобы при нажатии на кнопку "Новые сообщения", новые сообщения из невидимых форумов не показывались в списке?
Ссылка на комментарий
Поделиться на других сайтах


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

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.