Jump to content
  • 0

Отображение ссылки в IPB


@priest
 Share

Question

Как сделать транслит ссылки латиницей на IPB 4.1

Нашел метод:
1. Открыть файл initdata.php в корневой папке с форумом и найти там примерно такой код:
 

define( 'IPB_USE_SEO_TRANSLIT', FALSE );
define( 'IPB_USE_ONLY_ID_FURL', FALSE );

Меняем значение с FALSE на TRUE

Ну у меня нет файла initdata.php у меня

Есть init.php и в коде этого файла я не нахожу такой части кода, как в примере.

Выкладываю код, может подскажете, в какой части кода нужно делать правки? Если вообще в этом файле(

Скрытый текст

<?php
/**
 * @brief		Init for UTF8 Conversion
 * @author		<a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
 * @copyright	(c) 2001 - 2016 Invision Power Services, Inc.
 * @license		http://www.invisionpower.com/legal/standards/
 * @package		IPS Community Suite
 * @since		4 Sept 2013
 * @version		SVN_VERSION_NUMBER
 */

namespace IPSUtf8;

/**
 * Class to contain IPS Community Suite autoloader and exception handler
 */
class IPSUtf8
{
	/**
	 * Initiate IPS Community Suite UTF8 Converter, autoloader and exception handler
	 *
	 * @return	void
	 */
	public static function init()
	{
		/* Set timezone */
		date_default_timezone_set( 'UTC' );
		
		/* Set default MB internal encoding */
		mb_internal_encoding('UTF-8');
		
		/* Constants */
		define( 'THIS_PATH', __DIR__ );
		
		$bits	= explode( DIRECTORY_SEPARATOR, THIS_PATH );
		$bit	= array_pop( $bits );
		$bit2	= array_pop( $bits );

		define( 'ROOT_PATH', preg_replace( '#' . preg_quote( DIRECTORY_SEPARATOR, '#' ) . $bit2 . preg_quote( DIRECTORY_SEPARATOR, '#' ) . $bit . '$#', '', THIS_PATH ) );

		define( 'IS_CLI', ( PHP_SAPI == 'cli' || empty( $_SERVER['REMOTE_ADDR'] ) ) ? true : false );
		
		/* Set Options - deliberately do not use root constants */
		if ( file_exists( './constants.php' ) )
		{
			@include_once( './constants.php' );
		}
		
		foreach( static::defaultConstants() AS $k => $v )
		{
			if ( !defined( $k ) )
			{
				define( $k, $v );
			}
		}

		@set_time_limit();
		
		/* Set autoloader */
		spl_autoload_register( '\IPSUtf8\IPSUtf8::autoloader', true, true );
		
		set_error_handler( '\IPSUtf8\IPSUtf8::errorHandler' );
		set_exception_handler( '\IPSUtf8\IPSUtf8::exceptionHandler' );
	}
	
	/**
	 * Default Constants
	 *
	 * @return	array
	 */
	public static function defaultConstants()
	{
		return array(
			'IPB_LOCK'				=> TRUE, /* Lock conversion to only IP.Board Databases */
			'FORCE_CONVERT'			=> FALSE, /* Enforce conversion */
			'FORCE_CONVERT_CHARSET'	=> NULL,
			'FORCE_CONVERT_METHOD'	=> NULL,
			'SOURCE_DB_CHARSET'		=> NULL, /* If set, will force the source database connection to use this charset */
			'UTF8_INSERT_ONLY'		=> FALSE, /* If true, and sql_charset is present and set to utf8 in conf_global.php, then the "fast" method will simply insert without converting. Useful for mixed collation databases where the utf8 tables are real utf8 */
		);
	}
	
	/**
	 * Error Handler
	 *
	 * @param	int		$errno		Error number
	 * @param	errstr	$errstr		Error message
	 * @param	string	$errfile	File
	 * @param	int		$errline	Line
	 * @param	array	$trace		Backtract
	 * @return	void
	 */
	public static function errorHandler( $errno, $errstr, $errfile, $errline, $trace=NULL )
	{
		if ( in_array( $errno, array( E_NOTICE ) ) )
		{
			return;
		}
		
		throw new \ErrorException( $errstr, $errno, , $errfile, $errline );
	}
	
	/**
	 * Exception Handler
	 *
	 * @param	\Exception	$exception	Exception class
	 * @return	void
	 */
	public static function exceptionHandler( $exception )
	{
		/* Send a diagnostics report if we can */
		$trace = $exception->getTrace();
		if ( isset( $trace[]['class'] ) )
		{
			self::diagnostics( $exception, $trace[]['class'] );
		}
				
		/* And display an error screen */
		try
		{
			if ( IS_CLI )
			{
				print "\nError: " . $exception->getMessage() . "\nFile: " . str_replace( THIS_PATH, '', $exception->getFile() ) . "\nLine: " . $exception->getLine() . "\n";
			}
			else
			{
				/* @todo Elaborate on this for browser */
				print "\nError: " . $exception->getMessage() . "\nFile: " . str_replace( THIS_PATH, '', $exception->getFile() ) . "\nLine: " . $exception->getLine() . "\n"; 
			}
		}
		catch ( \Exception $e )
		{
			if( isset( $_SERVER['SERVER_PROTOCOL'] ) and \strstr( $_SERVER['SERVER_PROTOCOL'], '/1.0' ) !== false )
			{
				header( "HTTP/1.0 500 Internal Server Error" );
			}
			else
			{
				header( "HTTP/1.1 500 Internal Server Error" );
			}
		
			if ( IS_CLI )
			{
				print "\nError: " . $e->getMessage() . "\nString: " . $e->getString() . "\nFile: " . str_replace( THIS_PATH, '', $e->getFile() ) . "\nLine: " . $e->getLine() . "\n";
			}
			else
			{
				/* @todo Elaborate on this for browser */
				print "\nError: " . $e->getMessage() . "\nString: " . $e->getString() . "\nFile: " . str_replace( THIS_PATH, '', $e->getFile() ) . "\nLine: " . $e->getLine() . "\n"; 
			}
		}
		exit;
	}
	
	/**
	 * Diagnostics Reporting
	 *
	 * @param	\Exception	$exception	Exception
	 * @param	string		$class 		Class that caused the exception
	 * @return	void
	 */
	public static function diagnostics( $exception, $class )
	{
		try
		{
			@file_put_contents( THIS_PATH . '/tmp/error_' . date('Y-m-d') . '.cgi', "\n" . str_repeat( '-', 48 ) . "\n" . date('r') . "\n" . var_export( $exception, true ), FILE_APPEND );
		}
		catch ( \Exception $e ) {}
	}
	
	/**
	 * Autoloader
	 *
	 * @param	string	$classname	Class to load
	 * @return	void
	 */
	public static function autoloader( $classname )
	{			
		/* Separate by namespace */
		$bits = explode( '\\', $classname );
		$vendorName = array_shift( $bits );
								
		/* Work out what namespace we're in */
		$class = array_pop( $bits );
		$namespace = empty( $bits ) ? 'IPSUtf8' : ( 'IPSUtf8\\' . implode( '\\', $bits ) );
		
		if( !class_exists( "{$namespace}\\{$class}", FALSE ) )
		{
			/* Locate file */
			$path = THIS_PATH . '/';
			$sourcesDirSet = FALSE;
			
			foreach ( array_merge( $bits, array( $class ) ) as $i => $bit )
			{
				if( preg_match( "/^[a-z0-9]/", $bit ) )
				{
					if( $i ===  )
					{
						$sourcesDirSet = TRUE;
					}
				}
				else if( $sourcesDirSet === FALSE )
				{
					$path .= 'system/';
					
					$sourcesDirSet = TRUE;
				}
			
				$path .= "{$bit}/";
			}
							
			/* Load it */
			$path = \substr( $path, , -1 ) . '.php';
			
			if( !file_exists( $path ) )
			{
				$path = \substr( $path, , -4 ) . \substr( $path, \strrpos( $path, '/' ) );
				
				if ( !file_exists( $path ) )
				{
					return FALSE;
				}
			}
			
			require_once( $path );
			
			/* Is it an interface? */
			if ( interface_exists( "{$namespace}\\{$class}", FALSE ) )
			{
				return;
			}
				
			/* Doesn't exist? */
			if( !class_exists( "{$namespace}\\{$class}", FALSE ) )
			{
				trigger_error( "Class {$classname} could not be loaded. Ensure it is in the correct namespace.", E_USER_ERROR );
			}
		}
	}

}

/* Init */
IPSUtf8::init();

 


 

Edited by klierik
Длинный текст должен лежать в спойлере
Link to comment
Share on other sites

9 answers to this question

Recommended Posts

  • 0

1) я видел уже готовый плагин тут: http://ipbmafia.ru/files/category/38-interfeys/

2) а вообще саппорт IPS находится тут: https://ipshelp.ru/forums/

@wwt, а этот плагин вообще имеет смысл ставить? Практическое преимущество какое?

Link to comment
Share on other sites

  • 0
13 минуты назад, klierik сказал:

2) а вообще саппорт IPS находится тут

За сапорт спасибо, попробую там спросить.

Я бы хотел решить эту проблему без плагина, ведь в примере явное решение, только почему то в новой версии где то есть отличие.

Link to comment
Share on other sites

  • 0
1 минуту назад, klierik сказал:

Но изменения в сорсах IPS приведет к тому что они затрутся обновлением

Ну значит снова придется исправлять) Или не обновляться)

Просто странно, что данное решение реализовали в отдельном плагине.

Link to comment
Share on other sites

  • 0

Это не странно так как такая возможность надо, всего лишь, на пост-советском пространстве.

Имхо, я рекомендую использовать плагин пока (или если) это не будет штатной функцией

Link to comment
Share on other sites

  • 0
38 минут назад, klierik сказал:

1) я видел уже готовый плагин тут: http://ipbmafia.ru/files/category/38-interfeys/

2) а вообще саппорт IPS находится тут: https://ipshelp.ru/forums/

@wwt, а этот плагин вообще имеет смысл ставить? Практическое преимущество какое?

В случае с кириллицей думаю полезно, чтобы не было вот такого:

Цитата

 

Link to comment
Share on other sites

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
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy