+3.80
Рейтинг
7.45
Сила

Yuran

Бета-версия админ-панели для LiveStreet CMS



Сегодня мы готовы показать вам бета-версию панели управления для LiveStreet CMS.
История создания админки началась еще четыре года назад, с тех пор ее раза три полностью переделывали, откладывали, возвращались к ней и так несколько лет. Далась она не легко.

Итак, на данный момент это бета, в ней много еще нет, но уже заложена базовая основа для наращивания функционала.
Главное, что мы сделали:
  • Механизм и интерфейс редактирования конфигов
  • Простая интеграция плагинов в админку
  • Поддержка интерфейса для управления конфигами плагинов
  • Универсальное key-value хранилище данных для плагинов
  • Новый функционал управления дополнительными полями. Можно к любой сущности привязывать доп поля (если сущность ORM, то это делается буквально одной строчкой). В коробке поддержка полей для топиков.
  • Управление пользователями и банами (нужный и долгожданный функционал)
  • Базовая интеграция каталога плагинов прямо в админ-панель
  • Базовая статистика по контенту (топики, комментарии, регистрации)

И да, мы сделали админку в виде отдельного плагина. Это избавляет от тесной интеграции с ядром движка, позволяет кастомизировать админку под свои проекты, не обязательно блого-социальные.

Код админки github.com/livestreet/lsplugin-admin
Установка:
  1. Админка работает только на текущей девел-версии ЛС.
  2. Скачиваем LS от сюда github.com/livestreet/livestreet
  3. Не забываем про каталог framework, который берем здесь github.com/livestreet/livestreet-framework
  4. Далее через стандартный инсталлятор (/install/) ставим LS
  5. После установки выполняем в БД патч из /install/patch.sql
  6. Авторизируемся под администратором и по адресу /admin/ активируем плагин «Admin panel» (предварительно скачав его с github.com/livestreet/lsplugin-admin, название каталога с плагином должно быть «admin»)

В комплекте с админкой в /example/plugins/ идет пример плагина «Статьи», который интегрируется в интерфейс админки и работает с дополнительными полями. По интеграции будет отдельный топик.

По админке выслушаем любые пожелания, от функционала до оформления.

Под катом несколько скриншотов

Скорости работы ЛС vs Конфигурация сервера

Здравствуйте уважаемые знатоки. перечитал весь сайт по тегам «скорость и livestreet»
Но ситуация вынудила меня поднять эту тему снова.
На пустом сервере с включенным мемкешем и всяческими оптимизациями движка найденными на просторах этого сайта загрузка 1-й страницы занимает 0.5-0.6сек и выглядит следующим образом:

Читать дальше →

Снова редактор...

Перелопатил здесь кучу топиков про выравнивание текста. По этим топикам прикрутил кнопки к редактору markitup, прописал теги в Jevix.php. Вроде как все получилось, но оказалось что нет. Главное что интересно — выравнивание по краям и по центру работает, а вот выравнивание по ширине не хочет ни в какую… Кто нибудь прикручивал выравнивание текста к редактору? Помогите пожалуйста решить проблему.
Вот мой jevix.php может там где то что то добавить или убрать надо…
Просто непонятно почему
<div align="right">текст</div><div align="center">текст</div><div align="left">текст</div>
работают, а
<div align="justify">текст</div>
нифига не работает. Кто знает что за тайна?

На всякий случай вот мой jevix

<?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', 'div', 'p'),
			),			
		),
		// Коротие теги типа
		'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(
                                'div',
                                array('align'=> array('left','center','right','justify'))
                        ),       
               
           array(
                                'p',
                                array('align'=> array('left','center','right','justify'))
                        ),       

           


			// следующий вызов метода
			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')))
			),
			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('border'=>'#int','cellpadding'=>'#int','cellspacing'=>'#int','align'=>array('right', 'left', 'center', 'justify'),'height'=>'#int','width'=>'#int')
			),
		),
		// допустимые комбинации значений у параметров
		'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','justify','center'),
					),
					'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
			),
			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
			)
		),
		// Автозамена
		'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')
			),			
		),
	),
);

MarkitUP для новичков. Или как добавить свои кнопки в редактор? [Перепост]

Перепост давно почившего из DB, но полезного топика (битые ссылки убрал).
По мотивам: этого топика и этого комментария, спасибо lifecom .

1. Введение

Заголовок говорит сам за себя — данная статья это итоги моего ковыряния в редакторе MarkitUP.
Все началось с того, что на сайте сообщества появилась небольшая статья о том как добавить кнопку в редактор (точнее это был вопрос) и в комментариях пользователь Shrike дал очень важные для меня наводки. После этого у меня появилась идея добавить пару новых возможностей в редактор:

  1. Цвет текста
  2. Выравнивания текста по центру, левому краю, правому краю
  3. Вертикальное выравнивание текста (sub, sup)

Читать дальше →

Оптимизация индексирования Shpinx для LiveStreet, и чуть-чуть про его установку.

На самом деле, стандартный конфигурационный файл sphinx.conf идущий в комплекте с LiveStreet 1.0.1 (/install/sphinx.conf) слегка простоват. Собственно, это, с мелкими изменениями, всё та же конфигурация описанная господином kruft в далёком 2008 году ( за что ему, по сей день, огромнейший респект).

Не сказать, что с тех пор многое поменялось с вопросом интеграции Shpinx и LiveStreet «по умолчанию».(интересные, платные, плагины для поиска — иной разговор). Однако, вполне можно выжать гораздо больше и из того, что есть на халяву. :)

Чего опять хотелось?
  1. Чтобы топики искало не только по заголовку и тексту, но еще и по списку тегов, названию блога и автору.
  2. Чтобы комментарии искало ещё и по автору тоже (почему бы и нет?)
  3. Словарь синонимов, ибо Shpinx умеет и иногда полезно.
  4. Я так и не понял, зачем индексировать не опубликованные топики и забаненые комментарии, а потом фильтровать их LiveStreet-ом. Тайна сия велика есть. Решил выкинуть из индекса и то, и другое.

Читать дальше →

Настройка TinyMCE в LiveStreet (универсальная инструкция)

У меня возникла необходимость настроить WYSIWYG редактор TinyMCE в LS, но толковой инструкции по этой теме я на сайте найти не смог, а так как уже порядком подзабыл что там и как, да еще и в связке с LiveStreet — то пришлось разбираться самому. Прочитав все что есть по данной теме здесь, я решил, что будет полезно написать универсальную инструкцию по настройке данного редактора. Всех кого эта тема заинтересовала — прошу под кат.
Читать дальше →