Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Strategius

Транслитерация русских URL для английской версии IPB 3.4

Recommended Posts

Сделал транслит русских ссылок таким методом (без хука).

 

P.S. - для английской версии IPB 3.4

 

1. admin\sources\base\core.php

 

Найти:

 

	elseif ( strtolower( IPS_DOC_CHAR_SET ) == 'utf-8' )
	{
		$string = utf8_encode( $string );
	}

	return $string;
}

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

 

	static public function monthNameRu2En( $text )
{

		return str_replace( array('Январь','Февраль','Март','Апрель','Май','Июнь,','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'), array('January','February','March','April','May','June','July','August','September','October','November','December'), $text );
}

static public function transliterate( $text )
{
	return str_replace( array('а','б','в','г','ґ','д','е','є','ё','ж','з','и','і','ї','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','э','ю','я','ы','ь','ъ'), array('a','b','v','g','g','d','e','e','yo','zh','z','i','i','i','i','k','l','m','n','o','p','r','s','t','u','f','h','c','ch','sh','sch','e','yu','ya','y','','j'), $text);

}

static public function makeSeoTransliterate( $text )
{
	if  (!IPB_USE_SEO_TRANSLIT )
	{
		return $text;
	}

	if ((is_array($text)) && (count($text)))
	{ 
		foreach( $text as $titlefortranslit)
		{
			$titlefortranslit = self::makeSeoTransliterate( $titlefortranslit );
		}
		return $text;

	}
	else
	{

		$text = urldecode($text);

		$text = self::transliterate( $text );

		$text = preg_replace('#[^a-z0-9-.]#', '', $text);

		$text = urlencode($text);
	}

	return $text;

}

Найти:

 

	$text = preg_replace( "#-{2,}#", '-', $text );
	$text = trim($text, '-');

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

 

		$text = self::makeSeoTransliterate( $text );

Перед сохранением для корректной обработки кириллицы нужно изменить кодировку файла на UTF-8 без BOM.

 

2. admin\sources\classes\output\publicOutput.php

 

Найти:

 

if ( ! ipsRegistry::$settings['use_friendly_urls'] )
{
return $url;
}

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

 

$seoTitle = IPSText::makeSeoTransliterate( $seoTitle );

Обновить кеш Furl.

  • Upvote 2

Share this post


Link to post
Share on other sites

Спасибо транслитерация работает, но нет редиректа, т.е. адрес доступен и английский и русский, пример: site.ru/topic/33-tema также открывается по адресам - site.ru/topic/33-тема и даже site.ru/topic/33-tem, site.ru/topic/33-любыебуквы

Share this post


Link to post
Share on other sites

но нет редиректа,

А до правок был?

Share this post


Link to post
Share on other sites

А до правок был?

Не знаю, проверил только вчера увидев в Google вебмастер такие ссылки, по умолчанию этого нет?

 

Сейчас проверю и отпишусь, если проблема не уйдёт думаю дело в .htaccess

Edited by ovi8

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Вопрос в

				if ( $base_url . $_toTest != $newurl AND !preg_match( "/(android 2|msie|trident|safari)/i", $this->member->user_agent ) )

Оставьте для тестов без второго условия

				if ( $base_url . $_toTest != $newurl )

За почти 5 лет много чего поменялось в браузерах. Может уже не нужна данная проверка.

Share this post


Link to post
Share on other sites

Оставьте для тестов без второго условия

				if ( $base_url . $_toTest != $newurl )

Не получается, показывает error to many redirects и белый экран.

 

Оставлю как было, видимо скоро останутся крупные сайты с программистами в штате, социальные сети и Вордпресс. Это ни в коем случае не упрёк кому бы то ни было :)

Share this post


Link to post
Share on other sites

Проверил на чистой англ. версии (3.4.9) - работает.

Share this post


Link to post
Share on other sites

Проверил на чистой англ. версии (3.4.9) - работает.

Действительно работает, но с правками как в этой теме у меня белый экран, если вернуть к оригиналу всё отлично.

 

Как совместить латинские урл и редирект, а то работает что-то одно, но не вместе.

Edited by ovi8

Share this post


Link to post
Share on other sites

		if ( ! $this->settings['use_friendly_urls'] OR ! $seoTitle )
	{
		return FALSE;
	}

после добавить

		$seoTitle = IPSText::makeSeoTransliterate( $seoTitle );		

  • Upvote 1

Share this post


Link to post
Share on other sites

Большое спасибо, работает :rolleyes:

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...