-2.27
Рейтинг
0.03
Сила

Иван

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

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

1. Введение

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

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

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

Настраиваем сервер для LiveStreet. Часть IX. LiveStreet.

Предыдущие части:

Не самая сложная, не самая последняя, но самая важная часть. То, ради чего, всё и затевалось :)

Для начала, нужно обеспечить появление ZIP-a с последней версии LiveStreet (на данный момент это LiveStreet_1.0.3.zip ) в корневой папке сайта. Качаем ZIP отсюда livestreetcms.ru/download/ и по SFTP забрасываем в папку сайта /var/www/superls.ru/public/

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

Настраиваем сервер для LiveStreet. Часть VII. NGINX.

Предыдущие части:

Общие замечания:
  1. Для продвинутых: рекомендуется не ставить nginx из бинарников, а пересобрать его из исходного кода только с нужными модулями. В бинарной сборке «по умолчанию», действительно, очень много для LiveStreet лишнего. Однако, я не считаю это простой задачей и поэтому описывать не буду. Кроме того, хотя эта идея, без сомнений, хорошая, драматического эффекта она не даст.
  2. Частично конфигурация снова взята из поста господина xyz
  3. Обращаю особое внимание на использование специального раздела для временных файлов, который, следуя советам господина Orhideous , мы создали во второй части

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

Вопрос по отложенной рассылке и крону

Здравствуйте!
Появилась проблема в виде того, что отложенная рассылка не срабатывает. Причину найти не могу, т.е. ничего серьезного не видоизменял. По факту имею следующее:

в конфиге движка стоит:
$config['module']['notify']['delayed']        = true;  // Указывает на необходимость использовать режим отложенной рассылки сообщений на email
$config['module']['notify']['insert_single']  = true;  // Если опция установлена в true, систему будет собирать записи заданий удаленной публикации, для вставки их в базу единым INSERT
$config['module']['notify']['per_process']    = 100;

команда в кроне:
/usr/bin/php /var/www/site/data/www/site.ru/include/cron/notify.php >/dev/null 2>&1

Лог site.ru/logs/log.log после выполнения задания:
[2013-03-11 17:00:02][31438][7414][NOTICE][NotifyCron: Cron process ended]

В файл site.ru/logs/cron.log по факту выполнения задания ничего не записывается, хотя раньше был отчет о начале, кол-ве заданий и окончании
таблица notify_task не очищается после выполнения крон-задания (т.е., как была).

Пробовал играться с правами на файл notify.php (сейчас 644 пользователь и группа — владелец), тоже не помогает.
После принудительного выполнения команды из крона (через isp) вижу в браузере: Exited with return code = 199

Прошу помочь в решении этого вопроса

Тонкая настройка почты

Столкнулся с тем, что при добавлении топиков, происходят достаточно сильные тормоза. После проведённого анализа выяснилось, что проблема тормозов ПОЧТА. При публикации топика происходит рассылка по всем пользователям, которые имеют отношение к блогу, в который происходит размещение материала.

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

В конфиге config/config.local.php добавляем следующие настройки

// Указывает на необходимость использовать режим отложенной рассылки сообщений на email
$config['module']['notify']['delayed'] = true;
// Если опция установлена в true, систему будет собирать записи заданий удаленной публикации, для вставки их в базу единым INSERT
$config['module']['notify']['insert_single'] = true;
// Количество отложенных заданий, обрабатываемых одним крон-процессом
$config['module']['notify']['per_process'] = 10;


Далее исправляем файл classes/modules/notify/Notify.class.php

Находим в нём функцию

public function Send($oUserTo,$sTemplate,$sSubject,$aAssign=array(),$sPluginName=null) {


В этой функции находим строчку

if(Config::Get('module.notify.delayed')) {


И заменяем её на

$isNotifyDelayed = Config::Get('module.notify.delayed');
if (($sTemplate == "notify.registration_activate.tpl") || ($sTemplate == "notify.registration.tpl") || ($sTemplate == "notify.reactivation.tpl") || ($sTemplate == "notify.reminder_code.tpl") || ($sTemplate == "notify.reminder_password.tpl")) { $isNotifyDelayed = false; }
if($isNotifyDelayed) {


PS: Возможно разместил топик не в тот блог, но в другие писать к сожалению не могу. Видимо не хватает рейтинга или силы.

Небольшое дополнение:
Кто-то может забыть, поэтому напоминаю, что необходимо по крону запускать скрипт include/cron/notify.php

есть 2 варианта запуска.

1. используя HTTP.

для этого необходимо поправить .htaccess в папке include/cron/
содержание должно быть

Order Deny,Allow
Deny from all
Allow from XXX.XXX.XXX.XXX


вместо XXX.XXX.XXX.XXX укажите IP, с которого будет производиться HTTP запрос.
и в крон можно внести следующую запись

*/5 * * * *   wget -O- http://www.livestreet.ru/include/cron/notify.php >> /dev/null


2. либо из консоли.

и в крон можно внести следующую запись

*/5 * * * *   /usr/bin/php /vhosts/site.ru/www/include/cron/notify.php


Пути указывайте в соответствии с настройками вашего сервера.

Оптимизация индексирования Shpinx для LiveStreet, исправляем древнюю проблему с закрытыми блогами

Суть проблемы — LS ищет и находит сфинксом заметки и комментарии из всех блогов, независимо от того имеете вы к ним доступ или нет.

Чинится это просто:
  1. вносим в поисковый индекс id закрытого блога к которому относится топик или комментарий, либо 0 если этот блог не закрытый.
  2. передаём в поиск id текущего пользователя
  3. находим список закрытых блогов в которые имеет доступ текущий пользователь.
  4. используем этот список расширенный нулём (что добавит все не закрытые блоги в результаты поиска для любого пользователя) со стандартной возможностью фильтрации Сфинкса


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

[Open Source] Решение - «Realtime»


Предисловие
В век постоянного прогресса и движения вперед важно не остаться за бортом, а для этого нужны инструменты позволяющие реагировать на события без промедления.

Вместо пиара
Вконтакте, одноклассники, фэйсбук, твиттер, гугл уже давно используют силу обновлений в реальном времени, создав своим пользователям комфортные условия для общения

Что это
Это инструмент для вас, вашего сайта, разработчиков, позволяющее создавать свои real-time дополнения для livestreet'a. Он состоит из node.js сервера и плагина для livestreet.

Сервер realtime берет на себя роль связующего звена между пользователем и livestreet'ом, который передает серверу данные при наступления запланированного события.

В базовую комплектацию входят:
  • Моментальные уведомления о событиях:
    — новом топике в блоге на который вы подписаны,
    — новом комментарии в вашем топике,
    — ответе на комментарий,
    — новом личном сообщении,
    — ответе на личное сообщение,
    — добавлении вас в друзья
  • Моментальная подгрузка комментариев и личных сообщений для авторизированных пользователей


Цели
Предоставить функционал перечисленный выше, создающий на вашем сайте ощущение вовлечения во все происходящие на сайте события, вплоть до новых комментариев к статьям и личной переписке. Помимо этого дать инструмент для разработчиков неравнодушных к real-time технологиям.

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

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

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

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

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

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

Модификация списка блогов

В Livestreet CMS в списке блогов и в топе блогов выводятся все, кроме персональны блогов. Как-то раз мне потребовалось вывести в этот список еще и личные блоги пользователей.

Этот способ решения проблемы с выводом списка блогов придуман лично мной, и я не гарантирую, что он рационален, прост или полностью правилен

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

Это функция GetBlogsRating в файле classes/modules/blog/mapper/Blog.mapper.class.php приблизительно на 280 строке

Посмотрев на нее, видно, что в запросе к базе данных фильтруются персональные блоги:
WHERE b.blog_type <> 'personal'


По умолчанию у личных блогов нет своего собственного url-адреса, они доступны по адресу site.ru/my/имя_пользователя. Поэтому, если мы просто уберем эту проверку, блоги выведутся, но ссылка будет вести в никуда

Поэтому я решил сделать следующим образом: выводить в список те блоги, у которых есть url-адрес

Я заменил вот эту проверку:
WHERE b.blog_type <> 'personal'
на вот такую:
WHERE 		b.blog_url IS NOT NULL


Сейчас ничего не изменится, так как у персональных блогов в базе данных url-адрес указан как NULL

Дальше есть несколько вариантов действий:
  • Вручную подправить url-адрес в базе данных у нужных блогов, таким образом, в список будут выводится только те блоги, которые вы выберете сами
  • Создать url-адрес для всех персональных блогов (уникальный для каждого) и назначать url-адрес каждому новому созданному персональному блогу

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

Для этого, в том же Blog.mapper.class.php нашел функцию CreatePersonalBlog приблизительно на 260 строке

Я уже не помню, устанавливается ли там url-адрес для персонального блога или нет. В общем ищем там (в функции) строку:
$oBlog->setUrl(что-то там);
(если ее нет, то добавьте ее, к примеру после $oBlog->setType('personal');)

Вместо этого «что-то там» и надо подставить url-адрес блога. Важно, чтобы он был уникален

Туда можно подставить логин пользователя:
$oUser->getLogin()

Но лучше что-нибудь еще добавить к этому, к примеру:
"blog_".$oUser->getLogin()
Url-адрес будет таким: blogs/blog_имя_пользователя

Теперь эти блоги появятся в списке (не забудьте почистить кеш!) и ссылки на них будут работать правильно

У этого способа правда есть недостатки: происходит дублирование контента, адреса my/имя_пользователя и blog/blog_имя_пользователя содержат один и тот же текст, что может не понравится поисковикам

Плюс к этому, по адресу my/имя_пользователя будет отображаться немного другое меню, эту проблему я пока не стал решать, но ее я думаю можно решить на уровне шаблона: в шаблоне блога проверять, не является ли он персональным и подключать соответствующее меню в этом случае

Для сайтов, которые уже давно работают и где уже много персональных блогов будет трудно (а возможно и очень трудно) поменять в базе данных вручную все url-адреса персональных блогов. Поэтому можно придумать какой-нибудь sql-запрос к базе данных, вроде этого:
UPDATE table имя_таблицы_блогов AS b SET b.blog_url=(SELECT u.user_login FROM имя_таблицы_пользователей AS u WHERE u.user_id=b.blog_owner_id) WHERE b.blog_urs IS NULL


Предупреждаю, что этот запрос может быть неправильным, я его не тестировал и придумал прямо сейчас на ходу. Суть его в следующем: для блогов, у которых нет url-адреса, установить его равным логину автора блога.

В общем, эту проблему со списком блогов я решил именно так, может быть, вам пригодится

Установка Livestreet с нуля (Debian): nginx + mysql + php-fpm + apc + memcached + sphinx

Возможно, этот гайд даже кому-нибудь понадобится.

0) Итак, у нас имеется свежепоставленный Debian с настроенным ssh-доступом и юзер с правами, достаточными для работы sudo.
Здесь и далее "#" в начале команды означает, что ее необходимо запускать с правами root-пользователя (например, с помощью sudo)
1) Пакеты будем ставить из репозитория dotdeb, поэтому для начала добавим его в sources.list:
# nano /etc/apt/sources.list

дописываем в конец файла
deb http://packages.dotdeb.org stable all

Далее импортируем ключ dotdeb'а:
wget http://www.dotdeb.org/dotdeb.gpg -O - -q | sudo apt-key add -

Обновляем список пакетов
# apt-get update

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