+0.64
Рейтинг
0.60
Сила

Хук "Обработчик пользователей"

Необходимо создать обработчик хука, который бы определял логику отображения главной страницы.
Помогите как его создать.
Что бы авторизированных перекидывало на новости(топики) /feed/
А не авторизированых на главнусб страницу т.е. просто на /

Простой сервис push-уведомлений для Вашего сайта

Как известно, самое интересное происходит на стыке технологий, вот и я хочу поделиться с Вами последней своей разработкой, которая по ненадобности своей для меня стала вещью-в-себе. а сообществу может и пригодиться представляет собой сервис push-сообщений для сайта на базе livestreet.

Что такое сервис push-сообщений? Это некоторый функционал, позволяющий посылать сообщения с Вашего сайта на телефоны пользователей. Это технология сочетает в себе три составляющие:

  1. клиентское приложение (в нашем случае приложение для телефонов с ОС Android);
  2. сервис GCM, предоставляемый Googlом;
  3. серверная часть в виде плагина для LS.


Как это все работает читаем ниже…

Выпадающее меню на jquery в header_top.tpl

Заметка для себя.
Как добавить многоуровневое выпадающее горизонтальное меню на Livestreet 1.0.3

Понравился мне здесь один вариант готового меню, которое остается только допилить напильником.
Если кому-то не приглянулся дизайн, то всегда можно поискать аналоги, я на оригинальность не претендую…



А в этом деле нам помогут камень, ножницы, бумага и волшебный порошок...
Читать дальше →

Разные шаблоны новотей для полной и краткой новости

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



Итак обмозговав и протестировав, выкладываю Вам свой мануал, решение данной проблемы вывода новостей.

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

Как заставить CSS и JS обновляться автоматически при обновлении файлов

У нас на сервере включена полезная опция объединения всех JS и CSS файлов. Задается она в конфиге

/**
 * Параметры компрессии css-файлов
 */
$config['compress']['css']['merge'] = true;       // указывает на необходимость слияния файлов по указанным блокам.
$config['compress']['js']['merge']  = true; 


Однако при обновлении исходников JS и CSS файлов пользователи не получают обновления. Я видел есть плагин ReloadCSS однако он не занимается JS файлами, плюс тыкать кнопку мне тоже не охота совсем. В итоге я полез в код движка и нашел место, где формируется название скомпрессированных файлов

engine/modules/viewer/Viewer.class.php функция Compress
        /**
	 * Сжимает все переданные файлы в один,
	 * использует файловое кеширование
	 *
	 * @param  array  $aFiles	Список файлов
	 * @param  string $sType	Тип файла - js, css
	 * @return array
	 */
	protected function Compress($aFiles,$sType) {
		$sCacheDir  = $this->sCacheDir."/".Config::Get('view.skin');
		$sCacheName = $sCacheDir."/".md5(serialize($aFiles).'_head').".{$sType}";
		$sPathWeb    = Config::Get('path.root.web');
		/**
		 * Если кеш существует, то берем из кеша
		 */
		if(!file_exists($sCacheName)) {


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

	/**
	 * Сжимает все переданные файлы в один,
	 * использует файловое кеширование
	 *
	 * @param  array  $aFiles	Список файлов
	 * @param  string $sType	Тип файла - js, css
	 * @return array
	 */
	protected function Compress($aFiles,$sType) {
		$sPathWeb    = Config::Get('path.root.web');
		$aFileDates = array();
		$iStart = microtime(true);
		foreach ($aFiles as $sFile) {
			// если файл локальный
			if (strpos($sFile, $sPathWeb)!==false) {
				$sFile=$this->GetServerPath($sFile);
				list($sFile,)=explode('?',$sFile,2);
				$aFileDates[] = filectime($sFile);
			}
		}
		$sCacheDir  = $this->sCacheDir."/".Config::Get('view.skin');
		$sCacheName = $sCacheDir."/".md5(implode($aFiles).implode($aFileDates).'_head').".{$sType}";
		echo "Key calculation took ".(microtime(true) - $iStart)." secs\n";
		/**
		 * Если кеш существует, то берем из кеша
		 */
		if(!file_exists($sCacheName)) {


Проверка показала, что время пренебрежимо мало:

Key calculation took 0,0016648769378662 secs
Key calculation took 0,0010089874267578 secs


Убираем отладочный вывод и радумеся обновлениям JS и CSS.

Можно было бы это сделать плагином, но в плагине пришлось бы переопределить функцию Compress. Может, лучше это изменение просто включить в следующую версию LS.

[Создан] Плагин расчета авторских гонораров

Техзадание на LS плагин расчета авторских гонораров

Назначение плагина:
Упростить труд модератора по оценке вклада авторов в создание контента на сайте, и выплате гонораров.

Требования:
  • вывод списком постов и комментов
  • проставление признака и процента полезности прямо из списка
  • расчет кол-ва символов без пробелов и тэгов
  • расчет кол-ва фото в посте/комменте
  • фильтрация по дате создания (указание периода)
  • фильтрация по автору
  • фильтрация по типу: топик/комментарий
  • фильтрация по мин кол-ву символов
  • фильтрация по мин полезности
  • фильтрация по мин полезности поста (это только для комментариев, можно попросить вывести все комментарии только к “полезным” постам)
  • подсчет суммарных значений
  • настройка кол-ва выводимых символом из тела поста
  • экспорт в csv
  • интеграция в админку LS, доступ только администратору. В меню пункт называется “Расчет гонорара”

Подход к реализации

  • код оформляется как полноценный независимый плагин к LS, без вмешательства в ядро или другие плагины
  • Для работы плагина необходима установка плагина aceadminpanel
  • В качестве обучающего примера можно взять admintopic — это подсказка разработчику
  • Название плагина — habihonorar

ТЗ на плагин расчет гонорара

Серые подписи не надо реализовывать, это комментарии к макету

Комментарии к статистике:

  • Полезность измеряется в процентах.
  • Полезных расчитывается среди всех постов с полезностью > 0.
  • Взвешенно расситывается как сумма показателей по каждому посту с коэффициентом полезности.

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

Связь через skype: ddegtyarev

UPD: Плагин создан, ожидайте появления в каталоге

MyWriter - социальные публикации. Набираем тестеров.

Приглашаем желающих принять участие в закрытом альфа-тестирование нового сервис социального репостинга — MyWriter.ru.



Описание
MyWriter — сервис для удобного репостинга контента в различные социальные сети. Сейчас поддерживаются три — Facebook, Twitter и ВКонтакте. Можно подключать RSS каналы или использовать свои каналы поступления контента через API. Для LS есть специальный плагин, который добавляет чекбокс (для отправки топика в сервис) в форму создания топика.

Тестирование
Если вам интересен подобный сервис, то можете принять участие в закрытом тестировании.
При регистрации укажите код приглашения — livestreet, код рассчитан на 15 30 50 60 100 человек. Ошибки/баги/пожелания можно оставлять в этом топике.

Некоторые технические подробности.
Сервис сделан на основе фреймворка LiveStreet и в нем применили несколько новых для LS решений — работа с очередями resque, ajax обработчики блоков(когда простой обработчик Block занимается и ajax обработкой) и новый механиз ajax-модальных окон. Как только обкатаем эти решения, то выложим их в паблик.

Теперь все наши плагины совместимы с LS v1.0.*!

Хочу поделиться хорошей новостью — теперь все наши плагины совместимы с LS v1.0.* :))
Также плагины покрыты тестовыми сценариями и основной функционал должен работать без ошибок (тесты бегают на чистой сборке LiveStreet).
 
 

Плагин «LSGallery»

Плагин «LSGallery» предназначен для создания пользователем альбомов и загрузки в них фотографий. Поддерживает пакетную загрузку фотографий и различные настройки приватности для альбомов. Также позволяет отмечать друзей на фотографиях.

Плагин «Sitemap» (важен для SEO)

Предназначен для автоматической генерации карты сайта в виде файла sitemap.xml. Карта сайта включает в себя ссылки на блоги, топики и профили пользователей. Совместим с плагинами «LSGallery», «Page», «L10n» и другими.

Плагин «SEO»

Основное предназначение плагина это автоматическая генерация мета тегов keywords и description в зависимости от контента страницы. Это положительно влияет на индексацию сайта поисковыми системами и ранжирование их выдачи.

Плагин «OpenID Comments»

При отправке комментария гость увидит всплывающее окошко авторизации/регистрации, а после авторизации/регистрации его комментарий появится на сайте.
Плагин может работать совместно с плагином OpenId (что удобней для гостей сайта) или без него.

Плагин «Banneroid (баннерокрутилка)»

Плагин для удобного размещения и управлениями баннерами на LiveStreet сайтах. Добавление/редактирование/удаление баннеров. Возможность выбирать дату начала/окончания показов, место отображения и др. Полное описание функционала на странице плагина.

Плагин «Similar topics»

Выводит список похожих записей как блок в сайдбаре. Записи сортирует по количеству совпавших тегов и дате/рейтингу.
 

Плагин «L10n (для мультиязычности)»

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

Плагин «Mailing»

Плагин для рассылок сообщений на LiveStreet сайтах с большим количеством пользователей. Есть возможность фильтра получателей по свойству «Пол» («мужчины», «женщины», «не указан») и по свойству «Язык» (интеграция с плагином «L10n»). Можно посмотреть список рассылок и статус хода рассылки. Полное описание функционала на странице плагина.

Плагин «LSDigest»

Плагин предназначен для рассылки дайджестов лучших записей за определенное время. Для работы плагина требуется плагин рассылок «Mailing». Совместим с плагином L10n (разные дайджесты в зависимости от языка указанного в профиле пользователя).

Плагин «Use watermark»

Плагин дает пользователю возможность выбора накладывать на загружаемое изображение водяной знак или нет. Также плагин может делать бекап оригиналов закачиваемых изображений до накладывания водяного знака.

Плагин «Greeting (приветствие новым пользователям)»

Плагин предназначен для рассылки приветсвий новым пользователя в LiveStreet CMS. Например, в тексте сообщения можно благодарить пользователя за регистрацию и дать ему ссылки на страницу помощи или общих вопросов по работе с сайтом. Cовместим с плагином многоязычности l10n. Т.е. вы можете создавать разные шаблоны сообщений для разных языков.

Плагин «Пингатор (исправленный)»

Исправленный пингатор для оправки сообщений Яндексу и Google. Эта штука дает возможность поисковым системам практически моментально индексировать добавленный контент.
 

Плагин «Debug Toolbar»

Плагин «Debug Toolbar» предназначен для вывода технической информации о работе сайта на LiveStreet.
 
 
 

Просьба!

Идеи по улучшению и бегрепорты (сообщения о ошибках) пишите в трекерах плагинов (значек  на странице плагина).
Спасибо ;)

Отправитель письма при использовании sendmail

При отправки писем движком LiveStreet используя sendmail есть один нюанс, что отправителем письма (Return-Path) является какой-нибудь nobody@localhost или www-data@localhost или ещё что-то в подобном духе. (всё зависит от настроек сервера, но при виртуальном хостинге возможность исправить настройки сервера отсутствуют).

Изза чего письма могут оседать на некоторых спам фильтрах. или в некоторых webmailах или почтовых программах высвечиваться типа ваш@мейл On Behalf Of: nobody@localhost, что в принципе не кошерно.

Решение проблемы достаточно простое. (я думаю этот момент стоит внести в штатную сборку LiveStreet)

в файле engine/modules/mail/Mail.class.php

176 строка файла
в функции Init() находим
$this->oMailer->From=$this->sFrom;

и добавляем
$this->oMailer->Sender=$this->sFrom;


т.е. вот так выглядить функция после исправлений
	public function Init() {
		/**
		 * Настройки SMTP сервера для отправки писем
		 */
		$this->sHost     = Config::Get('sys.mail.smtp.host');
		$this->iPort     = Config::Get('sys.mail.smtp.port');
		$this->sUsername = Config::Get('sys.mail.smtp.user');
		$this->sPassword = Config::Get('sys.mail.smtp.password');
		$this->bSmtpAuth = Config::Get('sys.mail.smtp.auth');
		$this->sSmtpSecure = Config::Get('sys.mail.smtp.secure');
		/**
		 * Метод отправки почты
		 */
		$this->sMailerType=Config::Get('sys.mail.type');
		/**
		 * Кодировка писем
		 */
		$this->sCharSet=Config::Get('sys.mail.charset');
		/**
		 * Мыло от кого отправляется вся почта
		 */
		$this->sFrom=Config::Get('sys.mail.from_email');
		/**
		 * Имя от кого отправляется вся почта
		 */
		$this->sFromName=Config::Get('sys.mail.from_name');

		/**
		 * Создаём объект phpMailer и устанвливаем ему необходимые настройки
		 */
		$this->oMailer = new phpmailer();
		$this->oMailer->Host=$this->sHost;
		$this->oMailer->Port=$this->iPort;
		$this->oMailer->Username=$this->sUsername;
		$this->oMailer->Password=$this->sPassword;
		$this->oMailer->SMTPAuth=$this->bSmtpAuth;
		$this->oMailer->SMTPSecure=$this->sSmtpSecure;
		$this->oMailer->Mailer=$this->sMailerType;
		$this->oMailer->WordWrap=$this->iWordWrap;
		$this->oMailer->CharSet=$this->sCharSet;

		$this->oMailer->From=$this->sFrom;
		$this->oMailer->Sender=$this->sFrom; // 176 строка. фиксит return-path
		$this->oMailer->FromName=$this->sFromName;
	}

fashion v0.0.5

Плагин позволяет создавать неограниченное кол-во профилей и полей к ним.
Редактировать поля профиля в личном кабинете, а также выполнять отбор по профилям и предоставлять статистику по их количеству.

Отбор пользователей по профилю




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