Динамическая смена редактора тектса

Сегодня столкнулся с проблемой, на сайт невозможно было написать с мобильных устройств т.к. используется редактор tinymce.

В общем подумал и решил так: распарсить $_SERVER['HTTP_USER_AGENT'] и если по ту сторону провода компьютер то подсовываю tinymce, ну а если нет то стандартный редактор который нормально работает со всем подряд.

Вот код который надо вставить в config.local

if (isset($_SERVER['HTTP_USER_AGENT'])){
	
	$browsers = array(
		'Flock'				=> 'Flock',
		'Chrome'			=> 'Chrome',
		'Opera'				=> 'Opera',
		'MSIE'				=> 'Internet Explorer',
		'Internet Explorer'	=> 'Internet Explorer',
		'Shiira'			=> 'Shiira',
		'Firefox'			=> 'Firefox',
		'Chimera'			=> 'Chimera',
		'Phoenix'			=> 'Phoenix',
		'Firebird'			=> 'Firebird',
		'Camino'			=> 'Camino',
		'Netscape'			=> 'Netscape',
		'OmniWeb'			=> 'OmniWeb',
		'Safari'			=> 'Safari',
		'Mozilla'			=> 'Mozilla',
		'Konqueror'			=> 'Konqueror',
		'icab'				=> 'iCab',
		'Lynx'				=> 'Lynx',
		'Links'				=> 'Links',
		'hotjava'			=> 'HotJava',
		'amaya'				=> 'Amaya',
		'IBrowse'			=> 'IBrowse'
	);

	$platforms = array (
		'windows nt 6.2'	=> 'Windows 8',
		'windows nt 6.1'	=> 'Windows 7',
		'windows nt 6.0'	=> 'Windows Vista',
		'windows nt 5.2'	=> 'Windows 2003',
		'windows nt 5.0'	=> 'Windows 2000',
		'windows nt 5.1'	=> 'Windows XP',
		'windows nt 4.0'	=> 'Windows NT 4.0',
		'winnt4.0'			=> 'Windows NT 4.0',
		'winnt 4.0'			=> 'Windows NT',
		'winnt'				=> 'Windows NT',
		'windows 98'		=> 'Windows 98',
		'win98'				=> 'Windows 98',
		'windows 95'		=> 'Windows 95',
		'win95'				=> 'Windows 95',
		'windows'			=> 'Unknown Windows OS',
		'os x'				=> 'Mac OS X',
		'ppc mac'			=> 'Power PC Mac',
		'freebsd'			=> 'FreeBSD',
		'ppc'				=> 'Macintosh',
		'linux'				=> 'Linux',
		'debian'			=> 'Debian',
		'sunos'				=> 'Sun Solaris',
		'beos'				=> 'BeOS',
		'apachebench'		=> 'ApacheBench',
		'aix'				=> 'AIX',
		'irix'				=> 'Irix',
		'osf'				=> 'DEC OSF',
		'hp-ux'				=> 'HP-UX',
		'netbsd'			=> 'NetBSD',
		'bsdi'				=> 'BSDi',
		'openbsd'			=> 'OpenBSD',
		'gnu'				=> 'GNU/Linux',
		'unix'				=> 'Unknown Unix OS',	
	);

	$mobiles = array(
		'mobileexplorer'	=> 'Mobile Explorer',
		'palmsource'		=> 'Palm',
		'palmscape'			=> 'Palmscape',

		#Phones and Manufacturers
		'motorola'			=> 'Motorola',
		'nokia'				=> 'Nokia',
		'palm'				=> 'Palm',
		'iphone'			=> 'Apple iPhone',
		'ipad'				=> 'iPad',
		'ipod'				=> 'Apple iPod Touch',
		'sony'				=> 'Sony Ericsson',
		'ericsson'			=> 'Sony Ericsson',
		'blackberry'		=> 'BlackBerry',
		'cocoon'			=> 'O2 Cocoon',
		'blazer'			=> 'Treo',
		'lg'				=> 'LG',
		'amoi'				=> 'Amoi',
		'xda'				=> 'XDA',
		'mda'				=> 'MDA',
		'vario'				=> 'Vario',
		'htc'				=> 'HTC',
		'samsung'			=> 'Samsung',
		'sharp'				=> 'Sharp',
		'sie-'				=> 'Siemens',
		'alcatel'			=> 'Alcatel',
		'benq'				=> 'BenQ',
		'ipaq'				=> 'HP iPaq',
		'mot-'				=> 'Motorola',
		'playstation portable'	=> 'PlayStation Portable',
		'hiptop'			=> 'Danger Hiptop',
		'nec-'				=> 'NEC',
		'panasonic'			=> 'Panasonic',
		'philips'			=> 'Philips',
		'sagem'				=> 'Sagem',
		'sanyo'				=> 'Sanyo',
		'spv'				=> 'SPV',
		'zte'				=> 'ZTE',
		'sendo'				=> 'Sendo',

		#Operating Systems
		'symbian'			=> 'Symbian',
		'SymbianOS'			=> 'SymbianOS',
		'elaine'			=> 'Palm',
		'palm'				=> 'Palm',
		'series60'			=> 'Symbian S60',
		'windows ce'		=> 'Windows CE',
		'android'			=> 'Android',
		
		#Browsers
		'obigo'				=> 'Obigo',
		'netfront'			=> 'Netfront Browser',
		'openwave'			=> 'Openwave Browser',
		'mobilexplorer'		=> 'Mobile Explorer',
		'operamini'			=> 'Opera Mini',
		'opera mini'		=> 'Opera Mini',
		'opera mobile'		=> 'Opera Mobile',
		'mobile safari'		=> 'Mobile Safari',

		#Other
		'digital paths'		=> 'Digital Paths',
		'avantgo'			=> 'AvantGo',
		'xiino'				=> 'Xiino',
		'novarra'			=> 'Novarra Transcoder',
		'vodafone'			=> 'Vodafone',
		'docomo'			=> 'NTT DoCoMo',
		'o2'				=> 'O2',

		#Fallback
		'mobile'			=> 'Generic Mobile',
		'wireless'			=> 'Generic Mobile',
		'j2me'				=> 'Generic Mobile',
		'midp'				=> 'Generic Mobile',
		'cldc'				=> 'Generic Mobile',
		'up.link'			=> 'Generic Mobile',
		'up.browser'		=> 'Generic Mobile',
		'smartphone'		=> 'Generic Mobile',
		'cellphone'			=> 'Generic Mobile'
	);	

	function __GetUserBrowser___( $list )
	{
		foreach ($list as $key => $val)
		{
			if (preg_match('|'.preg_quote($key).'|i', $_SERVER['HTTP_USER_AGENT']))
			{
				return $val;
				break;
			}
		}	
	}
	
	if( __GetUserBrowser___($browsers) == true )
	{
		if( __GetUserBrowser___($platforms) == true )
		{
			if( __GetUserBrowser___($mobiles) == false )
			{		
				$get_user_agent = __GetUserBrowser___($browsers).' '.__GetUserBrowser___($platforms);
			}
			else $get_user_agent = false;
		}
		else $get_user_agent = false;
	}
	else $get_user_agent = false;	
	
        if($get_user_agent == true) $config['view']['tinymce'] = true; // использовать или нет визуальный редактор TinyMCE для браузеров
	else $config['view']['tinymce'] = false; // ЗАПРЕТИТЬ использовать или нет визуальный редактор TinyMCE для мобильных
}


в config на всякий случай надо запретить использование tinymce
$config['view']['tinymce'] = false;


Потом я сталкнулся с другой проблемой, на сайте стоит acesearch который использует aceadminpanel, и уже aceadminpanel записывает конфигурацию которая мешала нормальному функционированию моего говночудо кода.

Искал долго, в итоге нашел в файле aceadminpanel/config/config.custom.php немного изменил 29 строку:
if ($key != 'view.tinymce' AND ($key != 'view.skin')


$key != 'view.tinymce' — запрещает записывать конфигурацию использования tinymce и настройке в итоге берутся с config.local.

Может кому пригодиться.

6 комментариев

avatar
Писать посты или комментарии неудобно? Я пользуюсь iOS и меня это тоже иногда напрягает.
avatar
у нас видимо разные iosи разные эплы, но у иеня такой проблемы нет
avatar
Мобилки можно определять Яндекс.детект
files.mail.ru/7N4E2U
avatar
Сделал проще. Поставил mDetect плагин и в канфиге строку
avatar
Config::Set('view.skin', $config['mobile_skin']);


Заменил на

Config::Set('view.tinymce', false);


Т.е. плагин не скин меняет а редактор.
avatar
правило оверрайдет эйсАдмин панель.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.