Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Мои наработки в плане создания ЧПУ

Форум для авторов модов для phpBB 2.0.x.
ra
phpBB 2.0.2
Сообщения: 325
Стаж: 19 лет 11 месяцев
Откуда: Беларусь

Мои наработки в плане создания ЧПУ

Сообщение ra »

Три дня потратил на идею и реализацию.

Во первых, без знаний php+mysql в эту тему лезть не надо было.
Во вторых. то, что вы увидите ниже это всего лишь наработки, а не полноценная реализация. Они создавались с одной целью, посмотреть смогу ли я реализовать эту довольно не простую функцию.
В третьих. Для полноценной реализации ЧПУ код должен дороьатывать конечный пользователь.
В последних. Стабильная работа мода не гарантируеться, и он нуждаеться в доработке.

MySQL:

Код: Выделить всё

CREATE TABLE phpbb_humanoid_topics
(
topic_id SMALLINT(8),
topic_humanoid_name VARCHAR(150),
topic_is_current_name TINYINT(1),
humanoid_name_used_count SMALLINT(5)
);
.htaccess:

Код: Выделить всё

RewriteEngine on

RewriteRule topics-(.*).html viewtopic.php\?name=$1
Мод:

Код: Выделить всё

# 
#-----[ OPEN ]------------------------------------------ 
#

posting.php

# 
#-----[ FIND ]------------------------------------------ 
#

			$subject = ( !empty($HTTP_POST_VARS['subject']) ) ? trim($HTTP_POST_VARS['subject']) : '';

# 
#-----[ AFTER, ADD ]------------------------------------------ 
#

			$subject_hum = str_to_humans($subject);

# 
#-----[ FIND ]------------------------------------------ 
#

				submit_post($mode, $post_data, $return_message, $return_meta, $forum_id, $topic_id, $post_id, $poll_id, $topic_type, $bbcode_on, $html_on, $smilies_on, $attach_sig, $bbcode_uid, str_replace("\'", "''", $username), str_replace("\'", "''", $subject), str_replace("\'", "''", $message), str_replace("\'", "''", $poll_title), $poll_options, $poll_length);

# 
#-----[ IN-LINE, FIND ]------------------------------------------ 
#

str_replace("\'", "''", $subject)

# 
#-----[ IN-LINE, AFTER ADD ]------------------------------------------ 
#

, $subject_hum

# 
#-----[ OPEN ]------------------------------------------ 
#

viewforum.php

# 
#-----[ FIND ]------------------------------------------ 
#

//
// All announcement data, this keeps announcements
// on each viewforum page ...
//
$sql = "SELECT t.*, u.username, u.user_id, u2.username as user2, u2.user_id as id2, p.post_time, p.post_username
	FROM " . TOPICS_TABLE . " t, " . USERS_TABLE . " u, " . POSTS_TABLE . " p, " . USERS_TABLE . " u2
	WHERE t.forum_id = $forum_id 
		AND t.topic_poster = u.user_id
		AND p.post_id = t.topic_last_post_id
		AND p.poster_id = u2.user_id
		AND t.topic_type = " . POST_ANNOUNCE . " 
	ORDER BY t.topic_last_post_id DESC ";

# 
#-----[ REPLACE WITH ]------------------------------------------ 
#

//
// All announcement data, this keeps announcements
// on each viewforum page ...
//
$sql = "SELECT t.*, h.topic_humanoid_name, h.humanoid_name_used_count, u.username, u.user_id, u2.username as user2, u2.user_id as id2, p.post_time, p.post_username
	FROM " . TOPICS_TABLE . " t, phpbb_humanoid_topics h, " . USERS_TABLE . " u, " . POSTS_TABLE . " p, " . USERS_TABLE . " u2
	WHERE t.forum_id = $forum_id
		AND h.topic_id = t.topic_id
		AND h.topic_is_current_name = 1
		AND t.topic_poster = u.user_id
		AND p.post_id = t.topic_last_post_id
		AND p.poster_id = u2.user_id
		AND t.topic_type = " . POST_ANNOUNCE . "

# 
#-----[ FIND ]------------------------------------------ 
#

//
// Grab all the basic data (all topics except announcements)
// for this forum
//
$sql = "SELECT t.*, u.username, u.user_id, u2.username as user2, u2.user_id as id2, p.post_username, p2.post_username AS post_username2, p2.post_time 
	FROM " . TOPICS_TABLE . " t, " . USERS_TABLE . " u, " . POSTS_TABLE . " p, " . POSTS_TABLE . " p2, " . USERS_TABLE . " u2
	WHERE t.forum_id = $forum_id
		AND t.topic_poster = u.user_id
		AND p.post_id = t.topic_first_post_id
		AND p2.post_id = t.topic_last_post_id
		AND u2.user_id = p2.poster_id 
		AND t.topic_type <> " . POST_ANNOUNCE . " 
		$limit_topics_time
	ORDER BY t.topic_type DESC, t.topic_last_post_id DESC, t.topic_last_post_id DESC 
	LIMIT $start, ".$board_config['topics_per_page'];
# 
#-----[ REPLACE WITH ]------------------------------------------ 
#

//
// Grab all the basic data (all topics except announcements)
// for this forum
//
$sql = "SELECT t.*, h.topic_humanoid_name, h.humanoid_name_used_count, u.username, u.user_id, u2.username as user2, u2.user_id as id2, p.post_username, p2.post_username AS post_username2, p2.post_time
	FROM " . TOPICS_TABLE . " t, phpbb_humanoid_topics h, " . USERS_TABLE . " u, " . POSTS_TABLE . " p, " . POSTS_TABLE . " p2, " . USERS_TABLE . " u2
	WHERE t.forum_id = $forum_id
		AND h.topic_id = t.topic_id
		AND h.topic_is_current_name = 1
		AND t.topic_poster = u.user_id
		AND p.post_id = t.topic_first_post_id
		AND p2.post_id = t.topic_last_post_id
		AND u2.user_id = p2.poster_id 
		AND t.topic_type <> " . POST_ANNOUNCE . " 
		$limit_topics_time
	ORDER BY t.topic_type DESC, t.topic_last_post_id DESC 
	LIMIT $start, ".$board_config['topics_per_page'];

# 
#-----[ FIND ]------------------------------------------ 
#

		$topic_id = $topic_rowset[$i]['topic_id'];

# 
#-----[ AFTER, ADD ]------------------------------------------ 
#

		$topic_name = ( $topic_rowset[$i]['humanoid_name_used_count'] ) ? ($topic_rowset[$i]['topic_humanoid_name'] . '-' . $topic_rowset[$i]['humanoid_name_used_count']) : $topic_rowset[$i]['topic_humanoid_name'];

# 
#-----[ FIND ]------------------------------------------ 
#

							$newest_post_img = '<a href="' . append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id&view=newest") . '"><img src="' . $images['icon_newest_reply'] . '" alt="' . $lang['View_newest_post'] . '" title="' . $lang['View_newest_post'] . '" border="0" /></a> ';

# 
#-----[ REPLACE WITH ]------------------------------------------ 
#

							$newest_post_img = '<a href="' . append_sid("viewtopic.$phpEx?name=$topic_name&view=newest") . '"><img src="' . $images['icon_newest_reply'] . '" alt="' . $lang['View_newest_post'] . '" title="' . $lang['View_newest_post'] . '" border="0" /></a> ';

# 
#-----[ FIND ]------------------------------------------ 
#

						$newest_post_img = '<a href="' . append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id&view=newest") . '"><img src="' . $images['icon_newest_reply'] . '" alt="' . $lang['View_newest_post'] . '" title="' . $lang['View_newest_post'] . '" border="0" /></a> ';

# 
#-----[ REPLACE WITH ]------------------------------------------ 
#

						$newest_post_img = '<a href="' . append_sid("viewtopic.$phpEx?name=$topic_name&view=newest") . '"><img src="' . $images['icon_newest_reply'] . '" alt="' . $lang['View_newest_post'] . '" title="' . $lang['View_newest_post'] . '" border="0" /></a> ';

# 
#-----[ FIND ]------------------------------------------ 
#

				$goto_page .= '<a href="' . append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=" . $topic_id . "&start=$j") . '">' . $times . '</a>';

# 
#-----[ REPLACE WITH ]------------------------------------------ 
#

				$goto_page .= '<a href="' . append_sid("viewtopic.$phpEx?name=$topic_name&start=$j") . '">' . $times . '</a>';

# 
#-----[ FIND ]------------------------------------------ 
#

		$view_topic_url = append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id");

# 
#-----[ REPLACE WITH ]------------------------------------------ 
#

		$view_topic_url = append_sid("viewtopic.$phpEx?name=$topic_name");

# 
#-----[ OPEN ]------------------------------------------ 
#

viewtopic.php

# 
#-----[ FIND ]------------------------------------------ 
#

if ( isset($HTTP_GET_VARS[POST_POST_URL]))
{
	$post_id = intval($HTTP_GET_VARS[POST_POST_URL]);
}

# 
#-----[ AFTER, ADD ]------------------------------------------ 
#

if ( isset($HTTP_GET_VARS['name']) )
{
	$topic_name = strtolower($HTTP_GET_VARS['name']);
	$count = intval(substr(strrchr($topic_name, '-'), 1));
	$topic_name = ( $pos = strrpos($topic_name, '-') ) ? substr($topic_name, 0, $pos) : $topic_name;

	$sql = "SELECT topic_id from phpbb_humanoid_topics " .
		   "WHERE topic_humanoid_name = '$topic_name' AND humanoid_name_used_count = $count";
	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Could not obtain humanoid information', '', __LINE__, __FILE__, $sql);
	}

	if ( $row = $db->sql_fetchrow($result) )
	{
		$topic_id = $row['topic_id'];
	}
}
else
{
	$topic_name = '';
	$count = 0;
}

# 
#-----[ FIND ]------------------------------------------ 
#

if ( !isset($topic_id) && !isset($post_id) )

# 
#-----[ REPLACE WITH ]------------------------------------------ 
#

if ( !isset($topic_name) && !isset($topic_id) && !isset($post_id) )

# 
#-----[ OPEN ]------------------------------------------ 
#

/includes/functions_post.php

# 
#-----[ FIND ]------------------------------------------ 
#

function submit_post($mode, &$post_data, &$message, &$meta, &$forum_id, &$topic_id, &$post_id, &$poll_id, &$topic_type, &$bbcode_on, &$html_on, &$smilies_on, &$attach_sig, &$bbcode_uid, &$post_username, &$post_subject, &$post_message, &$poll_title, &$poll_options, &$poll_length)

# 
#-----[ IN-LINE, FIND ]------------------------------------------ 
#

&$post_subject

# 
#-----[ IN-LINE, AFTER ADD ]------------------------------------------ 
#

, &$human_subj

# 
#-----[ FIND ]------------------------------------------ 
#

		if ($mode == 'newtopic')
		{
			$topic_id = $db->sql_nextid();

# 
#-----[ AFTER, ADD ]------------------------------------------ 
#

			$is_current = 1;
		}
		else
		{
			$sql = "SELECT topic_humanoid_name FROM phpbb_humanoid_topics " .
				   "WHERE topic_id = $topic_id AND topic_is_current_name = 1";
        		if ( !($result = $db->sql_query($sql)) )
			{
				message_die(GENERAL_ERROR, 'Could not obtain humanoid information', '', __LINE__, __FILE__, $sql);
			}

			if ($row = $db->sql_fetchrow($result))
			{
				$is_current = ( $row['topic_humanoid_name'] != $human_subj ) ? 1 : 0;

				if ($is_current)
				{
					$sql = "UPDATE phpbb_humanoid_topics SET topic_is_current_name = 0 " .
						   "WHERE topic_id = $topic_id AND topic_is_current_name = 1";
        				if ( !($result = $db->sql_query($sql)) )
					{
						message_die(GENERAL_ERROR, 'Could not update humanoid information', '', __LINE__, __FILE__, $sql);
					}
				}
			}
		}

		if ($is_current)
		{
			$sql = "SELECT humanoid_name_used_count FROM phpbb_humanoid_topics " .
				   "WHERE topic_humanoid_name = '$human_subj' " .
				   "ORDER BY humanoid_name_used_count DESC LIMIT 1";
        		if ( !($result = $db->sql_query($sql)) )
			{
				message_die(GENERAL_ERROR, 'Could not obtain humanoid information', '', __LINE__, __FILE__, $sql);
			}

			$used_count = ($row = $db->sql_fetchrow($result)) ? ($row['humanoid_name_used_count'] + 1) : 0;

			$sql = "INSERT INTO phpbb_humanoid_topics " .
				   "(topic_id, topic_humanoid_name, topic_is_current_name, humanoid_name_used_count) VALUES " .
				   "($topic_id, '$human_subj', $is_current, $used_count)";
			if ( !($result = $db->sql_query($sql)) )
			{
				message_die(GENERAL_ERROR, 'Could not obtain humanoid information', '', __LINE__, __FILE__, $sql);
			}

# 
#-----[ OPEN ]------------------------------------------ 
#

/includes/functions.php

# 
#-----[ FIND ]------------------------------------------ 
#

// added at phpBB 2.0.11 to properly format the username
function phpbb_clean_username($username)

# 
#-----[ BEFORE, ADD ]------------------------------------------ 
#

function str_to_humans($str)
{
	if (trim($str) == '' || trim($str, '_') == '')
	{
		return 'empty';
	}
	else
	{

		$str = preg_replace('#[\s\-]#', '_', strtolower(trim($str)));
		$srt = preg_replace('#_{1,}#', '_', preg_replace('#\W#', '', $str));
		$str = trim($str, '_');

		return $str;
	}
}
Добавлено спустя 48 секунд:

Ах, и ещё. Ставить надо только на чистый 2.0.15

Добавлено спустя 31 минуту 48 секунд:

Немного опшу переменные в sql-запросе.

topic_id - тема, для которой предназначаеться даный ЧПУ
topic_humanoid_name - имя которое будет использовать пользователь, чтобы попасть в тему.php
topic_is_current_name - определяет, какой из названий темы будет выводиться при просмотре viewforum
humanoid_name_used_count - служит для обозначения порядкового номера имя ЧПУ.


Немного попродробнее о последних двух.
Ситуация 1. Допустим пользователь назвал тему по старой привычке "Обсуждение phpBB 2.0.15", а потом вспомнил, что на дворе-то не 2.0.15 а 3.0.0. И исправил название темы на "Обсуждение phpBB 3.0.0".
Соответственно и ЧПУ ссылка тоже изменилась. И нам надо показывать не старую с версией 2.0.15, а новую 3.0.0. А так как старые ЧПУ не удаляються (на них уже сослалось пол интернета), то мы устанавливаем флажок с названием topic_is_current_name, что теперь всем надо выдавать ЧПУ не с версией 2.0.15, а с версией 3.0.0

Ситуция 2.
Вася Пуповкин решил поставить форум, но у него с завидной постоянностью выскакивает ошибка "Please delete install/ and contrib/ directories". Он решил создать тему, и назвал её в честь этой ошибки. ЧПУ получило имя "please_delete_install_and_contrib_directories". Но тут через два часа с такой же проблемой сталкнулся Вася Пупапоповкин. И так же решил создать тему и назвать её в честь ошибки критичиской. И тут у нас получаеться что две разные темы имеют один и тот же ЧПУ. Не порядок, подумал я и дабавил поле humanoid_name_used_count что бы знать сколько раз использовался данный ЧПУ и если испольховался добавить единичку сверху. И стала ссылка посылать в тему Пупапоповкина не на "please_delete_install_and_contrib_directories", а на "please_delete_install_and_contrib_directories-1". Соответсвенно ссылка для следуещего родственника Василия будет "please_delete_install_and_contrib_directories-2".

Описал как мог.
Splurov
phpBB 1.4.4
Сообщения: 138
Стаж: 19 лет 4 месяца
Откуда: Россия, Москва

Сообщение Splurov »

1. А почему-бы не добавлять поля к таблице phpbb_topics?
2. На счёт одинаковых имён. Почему-бы просто не проверять на существование темы с таким рулом? Зачем отдельное поле?
Аватара пользователя
Rick
phpBB 1.4.2
Сообщения: 63
Стаж: 19 лет 5 месяцев

Сообщение Rick »

Я конечно дико извиняюсь, но что такое ЧПУ?
quazi
phpBB 2.0.2
Сообщения: 306
Стаж: 19 лет 1 месяц

Сообщение quazi »

брррр
Rick, ЧПУ - Человеко-Понятные URL
то есть ссылка типа http://site/path/file?show=new&day=21&moth=6&year=2005 будет видна для вас как http://site/news/2005/06/21

R@, что-то слишком сложно и путанно
имхо, кое-что вы почерпнули с дклаб, что-то свое.
вообще-то ЧПУ крутить надо на завершенный сайт (форум)
для начала надо разделы чпуизировать
темы - это вообще отдельный разговор
опять же имхо есть 3 варианта (на примере этой темы)
1. транслит названия http://phpbbguru.net/community/authors/ ... aChPU.html
2. перевод на англ. http://phpbbguru.net/community/authors/ ... ating.html
3. нумерация (по дате, по ID в таблице БД
ra
phpBB 2.0.2
Сообщения: 325
Стаж: 19 лет 11 месяцев
Откуда: Беларусь

Сообщение ra »

А почему-бы не добавлять поля к таблице phpbb_topics?
Потому что тогда для одной темы можно было бы хранить только один ЧПУ. И если мы изменим название темы, то, либы мы изменим ЧПУ и ссылки на этот ЧПУ будут не действительные, либо мы не меняем, но он не соответствует нынешнему названию темы.
На счёт одинаковых имён. Почему-бы просто не проверять на существование темы с таким рулом? Зачем отдельное поле?
Потому что проверкой существования ЧПУ мы не узнаем какой номер присвоить новому ЧПУ с таким же именем.
нумерация (по дате, по ID в таблице БД
Какое-то не полноценное ЧПУ. Мне понятнятнее параметры, чем обилие слешей.
Самый лучший, но использавать сокеты довольно ресурсоемко и к тому же на бесплатных хостингах это не дают (на холме точно).
http://phpbbguru.net/community/authors/MoiNarabotkiVPlaneSozdaniyaChPU.html
Я отказался от показа названия форума из-за того что если у нас будут чпуизированы пользователи и мы создадим форум с названием "users" то получаеться огромный конфликт.
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 5284
Стаж: 19 лет 3 месяца
Откуда: Питер
Благодарил (а): 186 раз
Поблагодарили: 793 раза

Сообщение Siava »

R@
Просто замечательно!
А как можно сделать, чтоб ссылки на русские названия тем были в транслите?
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb 2.0.x 3.5.x)
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 5284
Стаж: 19 лет 3 месяца
Откуда: Питер
Благодарил (а): 186 раз
Поблагодарили: 793 раза

Сообщение Siava »

Всё, уже сам разобрался.

Вот так у меня выглядит новая функция (пока что в тестовом, но вроде бы рабочем состоянии):

Код: Выделить всё

function str_to_humans($str)
{
   if (trim($str) == '' || trim($str, '_') == '')
   {
      return 'empty';
   }
   else
   {

                $str = preg_replace('/^.*::/s', '', $str);
                $str = trim($str);
                $str = strtr(
                        $str,
                        "абвгдежзийклмнопрстуфыэАБВГДЕЖЗИЙКЛМНОПРСТУФЫЭ",
                        "abvgdegziyklmnoprstufieABVGDEGZIYKLMNOPRSTUFIE"
                );
                $str = strtr($str, array(
                        'ё' => "yo",
                        'х' => "h",
                        'ц' => "ts",
                        'ч' => "ch",
                        'ш' => "sh",
                        'щ' => "shch",
                        'ъ' => '',
                        'ь' => '',
                        'ю' => "yu",
                        'я' => "ya",
                        'Ё' => "YO",
                        'Х' => "H",
                        'Ц' => "TS",
                        'Ч' => "CH",
                        'Ш' => "SH",
                        'Щ' => "SHCH",
                        'Ъ' => '',
                        'Ь' => '',
                        'Ю' => "YU",
                        'Я' => "YA",
                ));

      $str = preg_replace('#[\s\-\/]#', '_', strtolower(trim($str)));
      $srt = preg_replace('#_{1,}#', '_', preg_replace('#\W#', '', $str));
      $str = trim($str, '_');

      return $str;
   }
}
Использовал данные "размышления" в совокупностью с модом friendly topics, сделал ЧПУ для категорий, форумов и топиков. =) Осталось только отладить и собрать всё в кучку чтобы выложить. :roll:
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb 2.0.x 3.5.x)
Аватара пользователя
[R: R@m$e$ :U]
phpBB Maniac
Сообщения: 1464
Стаж: 19 лет 3 месяца
Откуда: Novosibirsk,RU

Сообщение [R: R@m$e$ :U] »

имхо... функция должна не должна использовать русские буквы... chr(xxx) рулит =)
Руководство пользователя | FAQ | Правила | Как устанавливать MOD'ы
ВОСПОЛЬЗУЙСЯ ПОИСКОМ, ТАМ ЕСТЬ БОЛЬШИНСТВО ОТВЕТОВ
ЕСЛИ НЕ ПОМОГЛО, ИСПОЛЬЗУЙ ШАБЛОН ЗАПРОСА, ПОМОГИ В РЕШЕНИИ ЗАДАЧИ
БЕСПЛАТНО ПОМОГУ ТОЛЬКО НА ФОРУМЕ!!! (ЛС НЕ В СЧЕТ)

Оставь благодарность, подтверди работоспособность совета.

ВСЕ ПРАВА НА МОДЫ ОТДАНЫ m157y
ra
phpBB 2.0.2
Сообщения: 325
Стаж: 19 лет 11 месяцев
Откуда: Беларусь

Сообщение ra »

[R: R@m$e$ :U] писал(а):имхо... функция должна не должна использовать русские буквы
Хуже, в качесте ЧПУ-имя_топика нельзя использовать симолы которые меняются при urlencode().
Аватара пользователя
Гога
phpBB 2.0.0
Сообщения: 220
Стаж: 18 лет 11 месяцев
Откуда: Архангельск

Сообщение Гога »

Siava писал(а):'х' => "h",

Код: Выделить всё

'х' => "kh", 
вообще-то. Иначе казузы, типа сходи => shodi
Гугл рулит. Я люблю ЛОР.
Интересно, они пришли с миром или им таки нужен наш моск?
Знания принадлежат всему человечеству.
Аватара пользователя
Coagulant
Former team member
Сообщения: 955
Стаж: 19 лет 3 месяца
Откуда: Москва

Сообщение Coagulant »

Удачная транслитерация в Translit Mod, имхо. А здесь явно неполная.
Lenux
phpBB 1.0.0
Сообщения: 8
Стаж: 19 лет

Сообщение Lenux »

Хм.. в принципе мод инетерсный, то ка не доделаный, но это и не важно, на мой взгляд ссылки в виде:
/10/25/ нету смысла, если и делать, то по названию форума, таким видом:
/forum name/topic name
Так в приницпе viewtopici разные используют числа, что более удобно на мой взгляд.
Exploder
phpBB 1.4.2
Сообщения: 56
Стаж: 18 лет 8 месяцев
Откуда: Германия

Сообщение Exploder »

Так всетаки хотелось бы узнать, есть полная реализация этого мода или может быть есть другие моды делающик тоже самое?
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 5284
Стаж: 19 лет 3 месяца
Откуда: Питер
Благодарил (а): 186 раз
Поблагодарили: 793 раза

Сообщение Siava »

Exploder
Полной реализации наверно нет, но я сделал из этого кое-что похожее на полную реализацию, совместив с модом Search Engines Friendly Board..
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb 2.0.x 3.5.x)
Exploder
phpBB 1.4.2
Сообщения: 56
Стаж: 18 лет 8 месяцев
Откуда: Германия

Сообщение Exploder »

Siava
Там ссылка мертвая((

Вернуться в «Для авторов (phpBB 2.0.x)»