Skip to content

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

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

 

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.

Featured Replies

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

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

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

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

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

 

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

Edited by ovi8

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

Вопрос в

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

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

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

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

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

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

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

 

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

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

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

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

 

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

Edited by ovi8

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

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

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

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

Create an account or sign in to comment

Account

Navigation

Search

Search

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.