Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
seobot

ЧПУ для IPB 3.x

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

Может кто делал уже, подскажите, пожалуйста:

Пагинация через темплейты чпу не меняется. А правкой скриптов и редактирования не простой системы ЧПУ вряд ли кто-то стал бы заниматься.

Поделиться сообщением


Ссылка на сообщение
07/14/13 10:44 (изменено)

Да, сложности. Правил 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)

  • Upvote 2

Поделиться сообщением


Ссылка на сообщение

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

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

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

Поделиться сообщением


Ссылка на сообщение

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

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

 

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

Хочу изменить ссылку на Правила форума, чтобы они не были жуткого вида 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"}

  • Upvote 2

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

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

Поделиться сообщением


Ссылка на сообщение

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

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

 

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

Поделиться сообщением


Ссылка на сообщение

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

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

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

 

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

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

Поделиться сообщением


Ссылка на сообщение

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

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

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

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