Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

ЧПУ для IPB 3.x

Опубликовано:

Скажите, есть у кого ЧПУ короткие как на этом форуме или может Fisana у вас есть хук на продажу? Спасибо.

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

Опубликовано:

Да, сложности. Правил publicOutput, coreVariables + темплейты, но так и не заработало :blink: :D

Тем не менее, форумы по компьютерной и технической тематике в топе яндекса предпочитают формат (но у многих vBulletin):

/t5.html

/t5-2.html

/t5-2.html#post56

А потом уже дополнительные параметры типа короткой ссылки на пост через ?p=56, либо просто #post56.

Ещё так очень часто встречается:

/t5/

/t5-2/

/t5-2/#post56 - этот вариант какой-то неправильный по сравнению с предыдущим с html ;)

Ещё так делают:

/f5/t5p2/ - 5-й форум, 5-й топик, 2-ая страница.

В этом варианте последовательность какая-то присутствует.

 

Если бы так как на vBulletin можно было бы отдельный пост выводить, тогда бы хорошо было сделать так:

хттп://форум.ру/f5/ - 5-й форум

хттп://форум.ру/t5/ - 5-й топик

хттп://форум.ру/t5p2/ - 5-й топик 2-ая страница

хттп://форум.ру/p56/ - 567 пост, выводящийся в VB на отдельных страницах...

 

Но для IPB получается ближе так:

хттп://форум.ру/f5/ - 5-й форум

хттп://форум.ру/t5/ - 5-й топик

хттп://форум.ру/t5/p2/ - 5-й топик 2-ая страница (page-2 = p2/)

хттп://форум.ру/t5/p2/#entry567 - 567 пост на второй странице 5-ой темы.

 

В раздумьях :blink:

 

Очень не нравятся городульки:

хттп://форум.ру/topic5.html/page-2#entry79005

Особенно, когда после html идет / <_<

Можно поставить 'isPagesMode' => 0, и получить вместо слеша знак вопроса, но тогда смысл всего...

Изменено пользователем CompForum

Опубликовано:

Тем не менее, форумы по компьютерной и технической тематике в топе яндекса предпочитают формат (но у многих vBulletin):

Предпочитают потому что все это вбуллетин, а там другая система ЧПУ. И вряд ли это зависит от того, чего они предпочитают - на ипб так, и все предпочитают именно так.

 

Если бы так как на vBulletin можно было бы отдельный пост выводить, тогда бы хорошо было сделать так:

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

Сейчас все наоборот стараются избегать дублей страниц, как отдельная ссылка на пост и тд.

 

Очень не нравятся городульки:

Исключительно личные предпочтения. Пользователям и всем остальным, поверьте, это мало заботит. И, если вы полагаете что сменив тип чпу окажетесь в топе со стопиццот пользователями - боюсь вас сильно разочаровать.

Ру-боард до сих пор на динамических урл-ах сидит.

Опубликовано:

Сделал так:

хттп://forum.ru/f1/ - первая страница подфорума

хттп://forum.ru/f1/page2/ - вторая страница подфорума

хттп://forum.ru/t1/ - первая страница темы

хттп://forum.ru/t1/page2/ - вторая страница темы

хттп://forum.ru/t1/page2/#entry727 - ссылка на 727 пост темы

хттп://forum.ru/userid1/ - ссылка на профиль пользователя

 

 

Изменения в файлах:

 

coreVariables.php

// Найти:
'varPage'  => 'page-',

// Заменить на:
'varPage'  => 'page',

 

ipsRegistry.php

// Найти:
preg_match( '#(' . preg_quote( self::$_seoTemplates['__data__']['varPage'], '#' ) . '(\d+?))(?:$|' . preg_quote( self::$_seoTemplates['__data__']['varBlock'], '#' ) . ')#', $_toTest, $pageMatches );

// Заменить на:
preg_match( '#(' . preg_quote( self::$_seoTemplates['__data__']['varPage'], '#' ) . '(\d+?))/(?:$|' . preg_quote( self::$_seoTemplates['__data__']['varBlock'], '#' ) . ')#', $_toTest, $pageMatches );

 

publicOutput.php

// Найти:
$_page .= $this->seoTemplates['__data__']['varPage'] . $vv;

// Заменить на:
$_page .= $this->seoTemplates['__data__']['varPage'] . $vv . '/';


// Найти:
$_toTest = preg_replace( '#^(.*)/(.)?#', '\1/' . $this->seoTemplates['__data__']['varPage'] . $page . '\2', $_toTest );

// Заменить на:
$_toTest = preg_replace( '#^(.*)/(.)?#', '\1/' . $this->seoTemplates['__data__']['varPage'] . $page . '/\2', $_toTest );


// Найти:
preg_match( '#(' . preg_quote( $this->seoTemplates['__data__']['varPage'], '#' ) . '(\d+?))(?:$|' . preg_quote( $this->seoTemplates['__data__']['varBlock'], '#' ) . ')#', $_toTest, $pageMatches );

// Заменить на:
preg_match( '#(' . preg_quote( $this->seoTemplates['__data__']['varPage'], '#' ) . '(\d+?))/(?:$|' . preg_quote( $this->seoTemplates['__data__']['varBlock'], '#' ) . ')#', $_toTest, $pageMatches );

 

sitemapgenerator.php

// Найти:
$_page .= self::$_seoTemplates['__data__']['varPage'] . $vv;

// Заменить на:
$_page .= self::$_seoTemplates['__data__']['varPage'] . $vv . '/';

 

furlTemplates.php (из members)

// Найти:
'showuser'	=> array( 'app'		      => 'members',
					  'allowRedirect' => 1,
					  'out'           => array( '#showuser=(.+?)((?:&|&)f=(.+?))?(&|$)#i', 'user/$1-#{__title__}/$2$4' ),
					  'in'            => array( 'regex'   => "#^/user/(\d+?)-#i",
											    'matches' => array( array( 'showuser', '$1' ) ) ) ),

// Заменить на:
'showuser'	=> array( 'app'		      => 'members',
					  'allowRedirect' => 1,
					  'out'           => array( '#showuser=(\d+)((?:&|&)f=(\d+))?(&|$)#i', 'userid$1/$2$4' ),
					  'in'            => array( 'regex'   => "#^/userid(\d+)#i",
											    'matches' => array( array( 'showuser', '$1' ) ) ) ),

 

furlTemplates.php (из forums)

// Найти:
$_SEOTEMPLATES = array(

'showannouncement'     => array( 'app'		     => 'forums',
								 'allowRedirect' => 1,
								 'out'           => array( '#showannouncement=(.+?)((?:&|&)f=(.+?))?(&|$)#i', 'forum-$3/announcement-$1-#{__title__}/$4' ),
						  		 'in'            => array( 'regex'   => '#/forum-(\d+?)?/announcement-(\d+?)-#i',
												 		   'matches' => array( array( 'showannouncement', '$2' ), array( 'f', '$1' ) ) ) ),

'showforum'     => array( 'app'		      => 'forums',
						  'allowRedirect' => 1,
						  'isPagesMode'   => 1,
						  'out'           => array( '#showforum=(.+?)(&|$)#i', 'forum/$1-#{__title__}/$2' ),
						  'in'            => array( 'regex'   => '#^/forum/(\d+?)-#i',
												    'matches' => array( array( 'showforum', '$1' ) ) ) ),


'showtopic'     => array( 'app'		      => 'forums',
						  'allowRedirect' => 1,
						  'isPagesMode'   => 1,
						  'out'           => array( '#showtopic=(.+?)(\#|&|$)#i', 'topic/$1-#{__title__}/$2' ),
						  'in'            => array( 'regex'   => '#^/topic/(\d+?)-#i',
											        'matches' => array( array( 'showtopic', '$1' ) ) ) ),

'acteqst'       => array( 'app'		      => 'forums',
						  'allowRedirect' => 1,
						  'out'           => array( '#act=ST(.*?)&t=(.+?)(&|$)#i', 'topic/$2-#{__title__}/$3' ),
						  'in'            => array( 'regex'   => '#^notavalidrequest$#i',
											        'matches' => array( array( 'showtopic', '0' ) ) ) ),

'act=idx'       => array( 'app'		      => 'forums',
						  'allowRedirect' => 0,
						  'out'           => array( '#act=idx(&|$)#i', 'index$1' ),
						  'in'            => array( 'regex'   => '#^/index(/|$|\?)#i',
											        'matches' => array( array( 'act', 'idx' ) ) ) ),
);

// Заменить на:
$_SEOTEMPLATES = array(

'showannouncement'     => array( 'app'		     => 'forums',
								 'allowRedirect' => 1,
								 'out'           => array( '#showannouncement=(\d+)((?:&|&)f=(\d+))?(&|$)#i', 'f$3/announcement$1/$4' ),
						  		 'in'            => array( 'regex'   => '#/f(\d+)?/announcement(\d+)#i',
												 		   'matches' => array( array( 'showannouncement', '$2' ), array( 'f', '$1' ) ) ) ),

'showforum'     => array( 'app'		      => 'forums',
						  'allowRedirect' => 1,
						  'isPagesMode'   => 1,
						  'out'           => array( '#showforum=(\d+)(&|$)#i', 'f$1/$2' ),
						  'in'            => array( 'regex'   => '#^/f(\d+)#i',
												    'matches' => array( array( 'showforum', '$1' ) ) ) ),


'showtopic'     => array( 'app'		      => 'forums',
						  'allowRedirect' => 1,
						  'isPagesMode'   => 1,
						  'out'           => array( '#showtopic=(\d+)(\#|&|$)#i', 't$1/$2' ),
						  'in'            => array( 'regex'   => '#^/t(\d+)#i',
											        'matches' => array( array( 'showtopic', '$1' ) ) ) ),

'acteqst'       => array( 'app'		      => 'forums',
						  'allowRedirect' => 1,
						  'out'           => array( '#act=ST(.*?)&t=(\d+)(&|$)#i', 't$2/$3' ),
						  'in'            => array( 'regex'   => '#^notavalidrequest$#i',
											        'matches' => array( array( 'showtopic', '0' ) ) ) ),

'act=idx'       => array( 'app'		      => 'forums',
						  'allowRedirect' => 0,
						  'out'           => array( '#act=idx(&|$)#i', 'index$1' ),
						  'in'            => array( 'regex'   => '#^/index(/|$|\?)#i',
											        'matches' => array( array( 'act', 'idx' ) ) ) ),
);

 

Особо не проверял, вроде бы работает B)

  • 2 недели спустя...
Опубликовано:

Вторая замена в publicOutput.php для версии IPB 3.4.3 будет такой:

// Найти:
$_toTest = preg_replace( '#^(.*)/(.)?#', '\1/page-' . $page . '\2', $_toTest );

// Заменить на:
$_toTest = preg_replace( '#^(.*)/(.)?#', '\1/page' . $page . '/\2', $_toTest );

  • 2 месяца спустя...
Опубликовано:

прошу помощи:

версия 3.4.5 IPS, необходимо изменить ссылки с кирилицы на транслит

 

заранее благодарен

Опубликовано:

прошу прощения - чуть позже нашел хук

  • 1 месяц спустя...
Опубликовано:

Хочу изменить ссылку на Правила форума, чтобы они не были жуткого вида index.php?app=forums&module=extras&section=boardrules, а попроще /boardrules

 

Вписал в furltemplates:

'boardrules'	=> array(  'app'		   => 'forums',
		   'allowRedirect' => 0,
                          'out'		   => array( '#app=forums(&|&)module=extras(&|&)section=boardrules(&|&|?)#i', 'boardrules/' ),
		   'in'			   => array( 'regex'		=> "#/boardrules(/|$|\?)#i",
						     'matches'	=> array( array( 'app', 'forums' ),
									   array( 'module', 'extras' ),
									   array( 'section', 'boardrules' )																		  )
											) 
								),

При прямом заходе на /boardrules все работает, но ссылка на главной странице не парсится и по-прежнему выводится кривой. Чего-то я не доделал явно. Кстати, а название правила (в данном случае имя массива boardrules) оно вообще имеет значение и куда-то еще вносится, кроме файла furlTemplates.php?

Опубликовано:

К ссылки boardrules не применяется чпу преобразование.

 

1. admin\applications\forums\extensions\furlTemplates.php

'boardrules' => array(
	'app'           => 'forums',
	'allowRedirect' => 0,
	'out'           => array( '#app=forums(?:&|&)module=extras(?:&|&)section=boardrules#i', 'boardrules/' ),
	'in'            => array( 'regex'   => '#/boardrules/#i',
							 'matches'  => array( array( 'app', 'forums' ), array( 'module', 'extras' ), array( 'section', 'boardrules' ) ) ) ),

 

2. Перестроить кеш чпу

 

3. Внешний вид -> Шаблон -> globalTemplate

Найти

{parse url="app=forums&module=extras&section=boardrules" base="public"}

Заменить

{parse url="app=forums&module=extras&section=boardrules" base="public" seotitle="boardrules" template="boardrules"}

Опубликовано:

Спасибо, получилось!

  • 3 месяца спустя...
Опубликовано:

Подскажите как сделать что-бы был такой адрес,дапустим я создал тему рецепта Лосось с апельсиновым джемом,мне нужно что-бы адрес был такой http:адрес сайта/forum/losos_s_apelsinovym_djemom

как это сделать

Опубликовано:

Никак. Только с ид

/topic/%id-lososi-s-apelsinon.html

 

.html можно убрать, ид в конце переместить,но без него никак.

  • 8 месяцев спустя...
Опубликовано:

Кстати в ЧПУ есть можно так сказать дыра в безопасности. Если ссылка на тему или раздел имеет вид к примеру http://домен/topic/ид темы-название темы/ то посетитель не имея доступа к такой теме (разделу) с лёгкость может прочитать его.

Считаю это дырой в безопасности.

Опубликовано:

Если дыра и есть, то это не в чпу, так как чпу только парсит параметры из урл'а. За проверкой прав отвечают другие функции. О таком баге что можно зайти в тему без прав слышу впервые. Был такой, но он касался ответов и не имел отношения к чпу.

Опубликовано:

О таком баге что можно зайти в тему без прав слышу впервые.

Вы не так меня поняли. Зайти в тему конечно невозможно, а вот прочитать её название с ЧПУ - легко.

 

За проверкой прав отвечают другие функции.

Странно что разрабы не предусмотрели это. Скажем при заходе в такую тему что бы был редирект на страницу ошибки.

Опубликовано:
Зайти в тему конечно невозможно, а вот прочитать её название с ЧПУ - легко.

Ну прочитает название и что? Да ради бога, пусть читает. Я думаю в название темы никто не выкладывает доступы к аккаунту. Кроме того, нужно еще знать ид темы в закрытом разделе. Даже если подбирать ид, при желании можно переместить редирект корректности url после проверки прав, и пользователю наличие ид ничего не даст. Имхо, название "дыры" сильно преувеличено, и может доставить неудобства разве что только полным параноикам.

Создайте аккаунт или войдите в него для комментирования

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.