Jump to content
View in the app

A better way to browse. Learn more.

IPBMafia.ru - поддержка 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.

Транслитерация URL в версиях от IPS

В русских  версиях   IP .Board присутствует полезная возможность транслита  URL .
Поисковикам нравится, если адреса на сайте написаны латинскими буквами, поэтому это помогает в поисковой оптимизации форума.

Однако, в англоязычных  версиях  такой функции нет (попросту не нужно), поэтому, если вы поставили англоязычную версию форума, адреса будут отображаться как есть, без транслита. Ниже я описываю как добавить эту функцию в англоязычную  версию  форума.
Внимание! Это нужно только если у вас англоязычная  версия , не от IBR!

 
Откройте файл root/admin/sources/base/core.php (где root - корень вашего форума).
Найдите:

static public function encodeForXml( $string )
{
if ( function_exists( 'mb_detect_encoding' ) )
{
$encoding = mb_detect_encoding( $string );
if ( $encoding != 'UTF-8' )
{
$string = IPSText::convertCharsets( $string, $encoding );
}
}
elseif ( strtolower(  IPS _DOC_CHAR_SET ) == 'utf-8' )
{
$string = utf8_encode( $string );
}

return $string;
}

ниже вставьте:

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

static public function makeSeoTransliterate( $text )
{
$text = urldecode($text);
$text = self::transliterate( $text );
$text = preg_replace('#[^a-z0-9-]#', '', $text);
$text = urlencode($text);
return $text;
}


Теперь в этом же файле найдите

/**
* Make an SEO title for use in the  URL 
* We parse them even if friendly  urls  are off so that the data is there when you do switch it on
*
* @param string Raw SEO title or text
* @return string Cleaned up SEO title
*/
static public function makeSeoTitle( $text )
{
if ( ! $text )
{
return '';
}

/* Strip all HTML tags first */
$text = strip_tags($text);

/* Preserve %data */
$text = preg_replace('#%([a-fA-F0-9][a-fA-F0-9])#', '-xx-$1-xx-', $text);
$text = str_replace( array( '%', '`' ), '', $text);
$text = preg_replace('#-xx-([a-fA-F0-9][a-fA-F0-9])-xx-#', '%$1', $text);

/* Convert accented chars */
$text = self::convertAccents($text);

/* Convert it */
if ( self::isUTF8( $text ) )
{
if ( function_exists('mb_strtolower') )
{
$text = mb_strtolower($text, 'UTF-8');
}

$text = self::utf8Encode( $text, 250 );
}

/* Finish off */
$text = strtolower($text);

if ( strtolower(  IPS _DOC_CHAR_SET ) == 'utf-8' )
{
$text = preg_replace( '#&.+?;#'	 , '', $text );
$text = preg_replace( '#[^%a-z0-9 _-]#', '', $text );
}
else
{
/* Remove &#xx; and &#xxx; but keep &#xxxx; */
$text = preg_replace( '/&#(d){2,3};/', '', $text );
$text = preg_replace( '#[^%&#;a-z0-9 _-]#', '', $text );
$text = str_replace( array( '"', '&'), '', $text );
}

$text = str_replace( array( '`', ' ', '+', '.', '?', '_', '#' ), '-', $text );
$text = preg_replace( "#-{2,}#", '-', $text );
$text = trim($text, '-');

IPSDebug::addMessage( "<span style='color:red'>makeSeoTitle ($text) called</span>" );

return ( $text ) ? $text : '-';
}

и после строчки

$text = trim($text, '-');

вставьте:

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

Внимание! Сохраните этот файл в кодировке UTF-8 БЕЗ BOM! По умолчанию он в кодировке ANSI, поэтому работать ничего не будет! Для того, чтобы сохранить файл в этой кодировке, скачайте программу Notepad++, откройте в ней этот файл (root/admin/sources/base/core.php) и выберите в верхнем меню Кодировки → Преобразовать в UTF-8 без BOM, после этого сохраните файл и закачайте к себе на сервер.


Теперь откройте файл root/admin/sources/classes/output/publicOutput.php
Найдите:

/**
* Formats the  URL  (.htaccess SEO, etc)
*
* @access public
* @param string Raw  URL 
* @param string Any special SEO title passed
* @param string Any special SEO template to use. If none is passed but SEO is enabled, IPB will search all templates for a match
* @return string Formatted  URL 
*/
public function formatUrl( $ url , $seoTitle='', $seoTemplate='' )
{
//-----------------------------------------
// INIT
//-----------------------------------------
if ( ! ipsRegistry::$settings['use_friendly_ urls '] )
{
return $ url ;
}

и после этой фигурной скобки вставьте:

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


Все. Теперь адреса содержащие кириллицу будут отображаться транслитом.

User Feedback

Recommended Comments

Комментариев пока нет

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Добавить комментарий...

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.