TinyMCE как включить кнопки центрирования

Здравствуйте.
Включил tinymce и обнаружил что там нет кнопочек выравнивания (JustfyLeft,JustifyRight,JustifyCenter)
Включил их в в тулбары в (engine/lib/internal/template/js/settings.js). Они отображаются но не работают.
Подскажите в какую сторону копать?

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

avatar
Та же проблема!
avatar
Аналогичная проблема. М.б. есть у кого решение?
avatar
Надо смотреть какой код генерируют те кнопочки и смотреть а не фильтруется ли он jevix-ом случайно при публикации
+ смотреть на стили в верстке т.к. этот функционал очень сильно зависит от шаблона
avatar
Нет не фильтруется, он банально не срабатывает в самом тини (без сохранения). Т.е. не стиль aling-*, ни класс не добавляется, соответвенно при сохранении тоже нет стилей и классов. Даже обрамление в p не отрабатывает — без ошибок в консоль.
avatar
Решение есть. В jevix прописал разрешения?
avatar
Круто. Да, прописал в jevix.
avatar
И? В исходном тексте при просмотре топика проходят теги?
avatar
При нажатии на кнопки в самом тини ничего не меняется, т.е. кнопки есть, но JS в них не отрабатывает в редактор (картинка с кодом).

В консоли ничего нет. В предпросмотре, соответственно тоже текст отображается как есть, т.к. нет стиля или класса в теге.
avatar
суде по демке тини, нужно:
— разрешить тег p
— для тега p разрешить параметр style
— для style в теге p допустимое значение text-align

геморрой вобщем, поэтому думаю для тини свой отдельный конфиг проще сделать
avatar
Спасибо. Это я сделал. Но тут проблема не в jevix, до него отредактированный текст даже не доходит. Т.к. сами кнопки не проставляют нужные стили.
avatar
Мне кажется, для тини нужно прописывать отдельную схему jevix-а и при включенном тини использовать её, т.к. там еще полно своих классов.
1099511627776 , кстати, думаю в вашем плагине можно например через конфиг добавлять в jevix все (или не все)) тиниевские классы
avatar
у меня вроде эта функция работает
avatar
На 4 версии да, работает. Классная реализация! На 3 не хочет :(
avatar
Ну… шо я могу сказать… переходите на 4-ку тем более что давно пора
avatar
Да, хотел, и даже поставил, очень понравилось. Но тут понеслось — если плагин статичных страниц, или какой нибудь другой с тини поправить 5 секунд, то например Role (функция редактирование комментов) поправить так просто не получилось. Надо переписывать часть JS в нем, были еще плагины проблемные, но не вспомню сейчас.

Оно понятно что ваша реализация под тини 4 не должна их поддерживать, однако решил что лучше использовать то, что есть из коробки, чтобы невзначай не упереться в проблемы в дальнейшем.
avatar
Ну как вариант развернуть тестовый сайт, там подправить нужные плагины (или дать мне доступ что я подправил), сделать pull request и людям будет лучше жить
avatar
Отличная идея. Однако тема немного тупиковая кажется, т.к. плагинов много, по сути все равно не охватить все возможные плагины, это надо сотрудничать с разработчиками этих плагинов, или чтобы Максим внедрил в коробку вашу реализацию (это проще и правильней), иначе получится так:

— Вы или кто-то еще добавил совместимость в файл, который нужно перезалить в плагине.
— Разработчик плагина что-то поменял/добавил, выпустил новую версию без учета правок с вашей адаптации. Все поломалось в итоге, нужно делать/копипастить по новой. Это все время + надо отслеживать какие то обновления, много дел получается.

М.б. ошибаюсь конечно.
avatar
Я сделал так:
settings.js
var ls = ls || {};

/**
* Различные настройки
*/
ls.skinsettings = (function ($) {

    this.getTinymce = function() {
        return {
            mode : 									"specific_textareas",
            editor_selector : 						"mce-editor",
            theme : 								"advanced",
            content_css : 							DIR_STATIC_SKIN + "/css/reset.css" + "," + DIR_STATIC_SKIN + "/css/tinymce.css?" + new Date().getTime(),
            theme_advanced_toolbar_location : 		"top",
            theme_advanced_toolbar_align : 			"left",
            theme_advanced_buttons1 : 				"fontselect,fontsizeselect,|,lshselect,bold,italic,underline,strikethrough,|bullist,numlist,|,undo,redo,|,lslink,unlink,lsvideo,lsimage,pagebreak,code",
            theme_advanced_buttons2 : 				"justifyleft,justifycenter,justifyright,justifyfull,|,tablecontrols,|,forecolor,backcolor",
            theme_advanced_buttons3 : 				"",
            theme_advanced_statusbar_location : 	"bottom",
            theme_advanced_resizing : 				true,
            theme_advanced_resize_horizontal : 		0,
            theme_advanced_resizing_use_cookie : 	0,
            theme_advanced_path : 					false,
            object_resizing : 						true,
            force_br_newlines :						true,
            forced_root_block : 					'', // Needed for 3.x
            /*
             force_p_newlines : 						false,
             */
            //plugins : 								"lseditor,safari,inlinepopups,media,pagebreak,autoresize",
            plugins: "lseditor,safari,autolink,lists,spellchecker,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",

            convert_urls : 							false,
            extended_valid_elements : 				"embed[src|type|allowscriptaccess|allowfullscreen|width|height]",
            pagebreak_separator :					"<cut>",
            media_strict : 							false,
            language : 								TINYMCE_LANG,
            inline_styles:							false,
            formats : {
                underline : 	{inline : 'u', exact : true},
                strikethrough : {inline : 's', exact : true}
            }
        }
    };

	return this;
}).call(ls.skinsettings || {},jQuery);

jevix.php
<?php

return array(
	'default' => array(
		// Разрешённые теги
		'cfgAllowTags' => array(
			// вызов метода с параметрами
			array(
				array('ls','cut','a', 'img', 'i', 'b', 'u', 's', 'video', 'em',  'strong', 'nobr', 'li', 'ol', 'ul', 'sup', 'abbr', 'sub', 'acronym', 'h4', 'h5', 'h6', 'br', 'hr', 'pre', 'code', 'object', 'param', 'embed', 'blockquote', 'iframe','table','th','tr','td','p','span'),
			),			
		),
		// Коротие теги типа
		'cfgSetTagShort' => array(
			array(
				array('br','img', 'hr', 'cut','ls')
			),
		),
		// Преформатированные теги
		'cfgSetTagPreformatted' => array(
			array(
				array('pre','code','video')
			),
		),
		// Разрешённые параметры тегов
		'cfgAllowTagParams' => array(
			// вызов метода
			array(
				'img',
				array('src', 'alt' => '#text', 'title', 'align' => array('right', 'left', 'center', 'middle'), 'width' => '#int', 'height' => '#int', 'hspace' => '#int', 'vspace' => '#int', 'class'=> array('image-center'))
			),
			// следующий вызов метода
			array(
				'a',
				array('title', 'href', 'rel' => '#text', 'name' => '#text', 'target' => array('_blank'))
			),
			// и т.д.
			array(
				'cut',
				array('name')
			),
			array(
				'object',
				array('width' => '#int', 'height' => '#int', 'data' => array('#domain'=>array('youtube.com','rutube.ru','vimeo.com')), 'type' => '#text')
			),
			array(
				'param',
				array('name' => '#text', 'value' => '#text')
			),
			array(
				'embed',
				array('src' => array('#domain'=>array('youtube.com','rutube.ru','vimeo.com')), 'type' => '#text','allowscriptaccess' => '#text', 'allowfullscreen' => '#text','width' => '#int', 'height' => '#int', 'flashvars'=> '#text', 'wmode'=> '#text')
			),
			array(
				'acronym',
				array('title')
			),
			array(
				'abbr',
				array('title')
			),
			array(
				'iframe',
				array('width' => '#int', 'height' => '#int', 'src' => array('#domain'=>array('youtube.com','rutube.ru','vimeo.com','1tv.ru')))
			),
			array(
				'ls',
				array('user'=>'#text')
			),
			array(
				'td',
				array('colspan'=>'#int','rowspan'=>'#int','align'=>array('right', 'left', 'center', 'justify'),'height'=>'#int','width'=>'#int')
			),
			array(
				'table',
				array('style'=>'#text','border'=>'#int','cellpadding'=>'#int','cellspacing'=>'#int','align'=>array('right', 'left', 'center'),'height'=>'#int','width'=>'#int')
			),
            array(
                'p',
                array('style'=>'#text')
            ),
            array(
                'span',
                array('style'=>'#text')
            ),
		),
		// допустимые комбинации значений у параметров
		'cfgSetTagParamCombination' => array(
			array(
				'param',
				'name',
				array(
					'allowScriptAccess' => array(
						'value'=>array('sameDomain'),
					),
					'movie' => array(
						'value'=>array('#domain'=>array('youtube.com','rutube.ru','vimeo.com')),
					),
					'align' => array(
						'value'=>array('bottom','middle','top','left','right'),
					),
					'base' => array(
						'value'=>true,
					),
					'bgcolor' => array(
						'value'=>true,
					),
					'border' => array(
						'value'=>true,
					),
					'devicefont' => array(
						'value'=>true,
					),
					'flashVars' => array(
						'value'=>true,
					),
					'hspace' => array(
						'value'=>true,
					),
					'quality' => array(
						'value'=>array('low','medium','high','autolow','autohigh','best'),
					),
					'salign' => array(
						'value'=>array('L','T','R','B','TL','TR','BL','BR'),
					),
					'scale' => array(
						'value'=>array('scale','showall','noborder','exactfit'),
					),
					'tabindex' => array(
						'value'=>true,
					),
					'title' => array(
						'value'=>true,
					),
					'type' => array(
						'value'=>true,
					),
					'vspace' => array(
						'value'=>true,
					),
					'wmode' => array(
						'value'=>array('window','opaque','transparent'),
					),
				),
				true, // Удалять тег, если нет основного значения параметра в списке комбинаций
			),
		),
		// Параметры тегов являющиеся обязательными
		'cfgSetTagParamsRequired' => array(
			array(
				'img',
				'src'
			),			
		),
		// Теги которые необходимо вырезать из текста вместе с контентом
		'cfgSetTagCutWithContent' => array(
			array(
				array('script',  'style')
			),
		),
		// Вложенные теги
		'cfgSetTagChilds' => array(
			array(
				'ul',
				array('li'),
				false,
				true
			),
			array(
				'ol',
				array('li'),
				false,
				true
			),
			array(
				'object',
				'param',
				false,
				true
			),
			array(
				'object',
				'embed',
				false,
				false
			),
			array(
				'table',
				array('tr'),
				false,
                //true sersar 02.07.2015
                false
			),
			array(
				'tr',
				array('td','th'),
				false,
				true
			),
		),
		// Если нужно оставлять пустые не короткие теги
		'cfgSetTagIsEmpty' => array(
			array(
				array('param','embed','a','iframe')
			),
		),
		// Не нужна авто-расстановка 
		'cfgSetTagNoAutoBr' => array(
			array(
				array('ul','ol','object','table','tr')
			)
		),
		// Теги с обязательными параметрами
		'cfgSetTagParamDefault' => array(
			array(
				'embed',
				'wmode',
				'opaque',
				true
			),
		),
		// Отключение авто-добавления 
		'cfgSetAutoBrMode' => array(
			array(
				//true
				false // sersar 02.07.2015
			)
		),
		// Автозамена
		'cfgSetAutoReplace' => array(
			array(
				array('±', '©', '©', '®', '©', '©', '®'),
				array('±', '©', '©', '®', '©', '©', '®')
			)
		),
		// Список допустимых протоколов для ссылок
		'cfgSetLinkProtocolAllow' => array(
			array(
				array('http','https','ftp')
			)
		),
		'cfgSetTagNoTypography' => array(			
			array(
				array('code','video','object')
			),
		),
		// Теги, после которых необходимо пропускать одну пробельную строку
		'cfgSetTagBlockType' => array(
			array(
				array('h4','h5','h6','ol','ul','blockquote','pre','table','iframe')
			)
		),
		'cfgSetTagCallbackFull' => array(
			array(
				'ls',
				array('_this_','CallbackTagLs'),
			),
		),
	),
	
	// настройки для обработки текста в результатах поиска
	'search' => array(
		// Разрешённые теги
		'cfgAllowTags' => array(
			// вызов метода с параметрами
			array(
				array('span'),
			),			
		),
		// Разрешённые параметры тегов
		'cfgAllowTagParams' => array(
			array(
				'span',
				array('class' => '#text')
			),			
		),
	),
);

В файле шаблона editor.tpl изменить:
{assign var="sSettingsTinymce" value="ls.skinsettings.getTinymce()"}
avatar
Спасибо большое, классно, работает. Вся проблема оказывается в:

force_p_newlines : false
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.