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

Подфорумы в столбик


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

Многие задают вопросы, как сделать отображение названий подфорумов на главной странице форума в строчку. Я опишу самый простой метод.

Для этого заходим в админцентр форума, далее в редактирование шаблонов.

skin boards ->show_subforum_link

НАЙТИ

<a href="{ipb.script_url}showforum={$id}">{$name}</a>

Вставить ПЕРЕД тег

<br />

Вуаля, теперь подфорумы идут в столбик а не в строчку :D

 

Парочка "штучек" не обязательных для использования =]

Некоторые задают вопросы, как убрать запятую?

Решение:

Открываем файл форума для редактирования (/sources/classes/class_forums.php)

Находим следующее:

if ( is_array( $forum_data['subforums'] ) and count( $forum_data['subforums'] ) )
 {
  $forum_data['show_subforums'] = $this->class->html->show_subforum_all_links( implode( ', ', $forum_data['subforums'] ) );
 }

И вот здесь

implode( ', '

убираем нашу запятую =)

 

Еще можно перед форумами вставить какие-нибудь какртинки. Вот примерчик: Скриншот

 

Для этого делаем слдующее:

Открываем файл ./sources/classes/class_forums.php

НАХОДИМ

if ( ! $done_pass )
			{
				$forum_data['subforums'][ $data['id'] ] = $this->ipsclass->compiled_templates['skin_boards']->show_subforum_link($data['id'],$data['name']);

И меняем его на:

 

if (!$done_pass)
			{
				//-----------------------------------------
				// Subforum Indicators
				//-----------------------------------------

				$img = $this->forums_new_posts($this->forums_calc_children($data['id'], $data, 1));
				if ($img == '<{C_ON}>' || $img == '<{C_ON_CAT}>')
				{
					$img = '<{B_NEW}>';
				}
				else if ($img == '<{C_OFF}>' || $img == '<{C_OFF_CAT}>')
				{
					$img = '<{B_NORM}>';
				}
				else if ($img == '<{C_LOCKED}>')
				{
					$img = '<{B_HOT_NN}>';
				}
				else if ($img == '<{C_ON_RES}>')
				{
					$img = '<{B_HOT_DOT}>';
				}
				else if ($img == '<{C_OFF_RES}>')
				{
					$img = '<{B_HOT_NN_DOT}>';
				}

				$forum_data['subforums'][$data['id']] = $this->ipsclass->compiled_templates['skin_boards']->show_subforum_link($data['id'], $data['name'], $img);

Закрываем ./sources/classes/class_forums.php.

Далее админцентр -> Внешний вид -> Менеджер стилей: [Название скина]

Редактировать фрагменты HTML: skin_boards (Главная страница форума): show_subforum_link

Нажимаем справа в верхнем углу на кнопочку и в всплывающей менюшке выбираем "Редактирование входящих переменных...", там находим:

$id="",$name=""

И после этого дописываем:

, $img=""

В конце концов у вас должна быть строка вида: $id="",$name="", $img=""

 

Далее в show_subforum_link находим истроку:

<a href="{ipb.script_url}showforum={$id}">{$name}</a>

И ЗАМЕНЯЕМ НА

{$img}<a href="{ipb.script_url}showforum={$id}">{$name}</a>

{$img} - то есть теперь перед подфорумами будут отображаться картинки, которые Вы захотите видеть.

 

Далее на вкус и цвет товарищей нет!

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

  • 3 недели спустя...
{$img} - то есть теперь перед подфорумами будут отображаться картинки, которые Вы захотите видеть.

 

Далее на вкус и цвет товарищей нет!

 

Еще объясните, плз, как картинки сопоставить подфорумам и куда их складировать?...

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

Ну вводите вместо этого там коды на свои картинки для отображения перед названием подфорума и все :D

Несложно ведь ;)

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

Ну вводите вместо этого там коды на свои картинки для отображения перед названием подфорума и все :D

Несложно ведь :)

 

, $img="" - этож переменная?... как картинку привязать к id подфорума? ... сорри что в танке ;)

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

Бойан... Тебе не кажется что лучше заменить запятую на <br>? Это исключит появления лишнего переноса после последнего подфорума.
Ссылка на комментарий
Поделиться на других сайтах

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

Как на sysman.ru ?

Подфорумы на главной странице тут писал ГиВ для 1.1*

 

Вот ещё http://mods.invisionize.com/db/index.php/f/4596

но надо чтобы глубже рыл..

1

-2

--3

---4

----5

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

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

 

Кстати подсказка посмотрите как выпадающий списочек для ыбстрого перехода по разделам форума формируется. Сразу станет ясно как действовать надо.

Чтобы не дублировать самого себя дам ссылку:

Быстрая навигации по форуму на главной странице форума

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

Master, а можно для особо тупых написать как прописывать картинки для подфорума? )

и подфорумы второгоуровня на главной тоже неплохо бы сделать ))

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

Открыть: sources\classes\class_forums.php

 

Найти:

		if ( $this->ipsclass->vars['disable_subforum_show'] == 0 AND $show_subforums == 1 )
	{
		if ( is_array( $forum_data['subforums'] ) and count( $forum_data['subforums'] ) )
		{
			$forum_data['show_subforums'] = $this->ipsclass->compiled_templates['skin_boards']->show_subforum_all_links( implode( ', ', $forum_data['subforums'] ) );
		}
	}

 

Замените эти строки (или закомментируйте их и добавьте ниже):

		$my_z=0;
	$v_str=$this->ipsclass->vars['sf_in_column'];
	$sub_f="<td width='".$sf_width."%'  valign=top>";
	if ( $this->ipsclass->vars['disable_subforum_show'] == 0 AND $show_subforums == 1 )
	{
		if ( is_array( $forum_data['subforums'] ) and count( $forum_data['subforums'] ) )
		{

		IF (count( $forum_data['subforums'] ) < $v_str) $v_str=count( $forum_data['subforums']);
		$sf_width=ceil(count($forum_data['subforums'])/$v_str);
		$sf_width=100/$sf_width;

		while (list($sf_key, $sf_value) = each ($forum_data['subforums'])){


			If ($my_z < $v_str){
				  $sub_f .= $sf_value."<br /> ";
				  $my_z++;
			}else{
				$sub_f .= "<td width='".$sf_width."%'   valign=top>";
				$sub_f .= $sf_value."<br /> ";
				  $my_z=1;	


			}	  

		}
		  $forum_data['show_subforums'] = $this->ipsclass->compiled_templates['skin_boards']->show_subforum_all_links( $sub_f );
		}
	}

 

Сохраните.

 

Далее. Шаг 2.

Идем в админ панель = Настройки = добавить настройку

----

Название: Подфорумов в столбе

Группа настройки: Темы, Сообщения и Опросы

Тип настройки: Ввод текста (одна строка)

Ключ настройки: sf_in_column

Текущее значение настройки: 3

Значение настройки по умолчанию: 3

Добавить эту настройку в кеш настроек: Да (не знаю за что этот параметр отвечает, я поставл Да)

ДОБАВЛЯЕМ НАСТРОЙКУ.

 

Всё! Теперь можно из Настроек регулировать сколько подфорумов будет в каждом столбе.

 

Конечно Шаг 2 можно пропустить, если вы не собираетесь часто менять количество подфорумов в столбе. Чтобы не добавлять настроек в админку просто меняем строку в Шаге 1:

 

Эту:

$v_str=$this->ipsclass->vars['sf_in_column'];

На эту:

$v_str=3; // число подфорумов в столбце

 

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

 

в админке - Менеджер стилей - Изменить HTML фрагменты - skin_boards (Главная страница форума) - ForumRow

 

меняем:

<tr> 
		<td align="center" class="row2" width="1%">{$data['img_new_post']}</td>
		<td class="row2">{$data['_queued_img']}<b><a href="{ipb.script_url}showforum={$data['id']}">{$data['name']}</a></b><br /><span class="forumdesc">{$data['description']}{$data['show_subforums']}<br /><i>{$data['moderator']}</i></span>{$data['_queued_info']}</td>
		<td align="center" class="row1">{$data['topics']}</td>
		<td align="center" class="row1">{$data['posts']}</td>
		<td class="row1" nowrap="nowrap">{$data['last_unread']} <span>{$data['last_post']}<br /><b>{ipb.lang['in']}:</b> {$data['last_topic']}<br /><b>{ipb.lang['by']}:</b> {$data['last_poster']}</span></td>
	</tr>

 

на

<tr> 
		<td align="center" class="row2" width="1%">{$data['img_new_post']}</td>
					<td class="row2">
		<table width=100% border=0 cellpadding=0 cellspacing=0><tr><td style="padding: 1px">{$data['_queued_img']}
		<b><a href="{ipb.script_url}showforum={$data['id']}" class='f_title'>{$data['name']}</a></b><br />
		<span class="forumdesc">{$data['description']}
		<i>{$data['moderator']}</i>

		{$data['show_subforums']}

		</span>{$data['_queued_info']}</table></td>				<td align="center" class="row1">{$data['topics']}</td>
		<td align="center" class="row1">{$data['posts']}</td>
		<td class="row1" nowrap="nowrap">{$data['last_unread']} <span>{$data['last_post']}<br /><b>{ipb.lang['in']}:</b> {$data['last_topic']}<br /><b>{ipb.lang['by']}:</b> {$data['last_poster']}</span></td>
	</tr>

 

дальше: show_subforum_all_links

 

меняем:

<br /><b>{ipb.lang['sub_forum_title']}:</b> $links

на

<tr><td valign=bottom width=100% height=100% style="padding: 1px" valign=top><table width=100% border=0  cellpadding=0 cellspacing=0 style="padding: 1px" class=ipbtable ><tr >$links</table>

 

Всё. Должно работать.

 

Отпишитесь, работает ли это у Вас.

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

Непонял, а как

(или закомментируйте их и добавьте ниже):

[off]глупый вопрос наверно, но мож просто я вас не понял ?[/off]

Что занчит закомментировать ?

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

Комментарий предназначен для объяснения работы вашего кода (обычно). Даже при написании своих собственных сценариев, за исключением простейших сценариев, комментарии могут оказаться необходимыми во всех случаях.

 

В PHP есть возможность создавать однострочные комментарии. Двойные косые черты или символ # приводят к тому, что любой символ, находящийся полсе них и до конца строки, будет проигнорирован синтаксическим анализатором.

 

Заккоментировать несколько строчек можно следующим образом:

/*
код
код
код
*/

Где /* и */ начало и конец комментария.

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

Про какую кнопочку идет речь? У вас заработало отображение подфорумов в несколько столбиков? Изменено пользователем Master
Ссылка на комментарий
Поделиться на других сайтах

Млин фигня какая-то получилась...

Вот http://www.provision.tu1.ru/forum/index.php?act=idx

А мона сделать, чтоб они были как в 1 посте написанно, только в 2 столбика ?

 

Я имел в виду "спасибо" ( кнопку )

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

А в два нельзя ??? ;)

вот даже скрин сделал , чего получилось :) после вашего мануала по нескольким столбцам.

http://img526.imageshack.us/img526/4743/111111111sa5.png

 

Я хотел чтоб было как в первом посте но только в 2 столбца :D

Вот я знаю, в вБулетин есть хак такой . . . . . . . . . .

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

Если знаете ссылку на такой хак для воблы, дайте мне, я посмотрю что там, возможно сделаем и для ipb сие.
Ссылка на комментарий
Поделиться на других сайтах

Вот, нарисовал на скорую руку - отображение всех подфорумов в древовидном виде, пользуйтесь..

 

Код для IPB 2.1.x:

/sources/classes/class_forums.php

Найти:

	function forums_calc_children($root_id, $forum_data=array(), $done_pass=0 )

Заменить на:

	function forums_calc_children($root_id, $forum_data=array(), $done_pass=0, $p=0 )

Найти далее:

				if ( ! $done_pass )

Добавить выше:

				if( $p == 0 ){
				$p = $forum_data['parent_id'];
			}
			$this->_debug = $p;
			$this->offset = 0;
			$this->my_getOffset( $root_id );

Найти далее:

					$forum_data['subforums'][ $data['id'] ] = $this->ipsclass->compiled_templates['skin_boards']->show_subforum_link($data['id'],$data['name']);

Заменить на:

					$forum_data['subforums'][ $data['id'] ] = $this->ipsclass->compiled_templates['skin_boards']->show_subforum_link($data['id'],$data['name'], $this->my_setOffset($this->offset));

Найти далее:

				$forum_data = $this->forums_calc_children( $data['id'], $forum_data, 1 );

Заменить на:

				$forum_data = $this->forums_calc_children( $data['id'], $forum_data, 0, $p );

Найти далее:

		return $forum_data;
}

Добавить ниже:

	function my_setOffset( $of ){
	$of = $of * 2;
	$ret = "";
	for( $i = 0; $i < $of; $i++ ){
		$ret .= "-";
	}
	return $ret;
}

function my_getOffset( $id  ){
	$this->offset++;
	$f = $this->forum_by_id[ $id ];
	if( $f['parent_id'] == $this->_debug ){
		$this->offset--;
		return;
	}
	$this->my_getOffset( $f['parent_id'] );
}

Найти (в функции forums_format_lastinfo):

				$forum_data['show_subforums'] = $this->ipsclass->compiled_templates['skin_boards']->show_subforum_all_links( implode( ', ', $forum_data['subforums'] ) );

Заменить на:

				$forum_data['show_subforums'] = $this->ipsclass->compiled_templates['skin_boards']->show_subforum_all_links( implode( '<br />', $forum_data['subforums'] ) );

 

АЦ > Внешний Вид > skin_boards > show_subforum_link:

Входящие переменные, добавить:

, $offset = ""

Содержание, заменить на:

$offset<a href="{ipb.script_url}showforum={$id}">{$name}</a>

 

АЦ > Внешний Вид > skin_boards > show_subforum_all_links:

Содержание, заменить на:

<br /><b>{ipb.lang['sub_forum_title']}:</b><br /><div style="margin-left:20px;">$links</div>

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

Присоединиться к обсуждению

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

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

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

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