+29.60
Рейтинг
72.60
Сила

Alexandr Kachanov

Выносим обработку евентов в отдельный файл

В транковой версии на github.com появилась возможность выносить объемную обработку евентов из экшена в отдельные файлы.

Эти файлы размещаются в каталоге /classes/actions/[action]/Event[Name].class.php, где [action] — это название экшена, которому принадлежит евент, [Name] — название внешнего обработчика евента.

Рассмотрим более подробно.
Пусть у нас будет экшен ActionBlog.class.php:
<?php

class ActionBlog extends Action {

	public $oUserCurrent=null;

	public function Init() {
		$this->oUserCurrent=$this->User_GetUserCurrent();

		$this->SetDefaultEvent('index');
	}

	/**
	 * Регистрируем евенты
	 *
	 */
	protected function RegisterEvent() {
		/**
		 * Регистрируем внешние обработчики евентов
		 */
		$this->RegisterEventExternal('Topic','ActionBlog_EventTopic');

		$this->AddEvent('index','EventIndex');
		$this->AddEventPreg('/^topic$/i','/^(\d+)\.html$/i','/^$/i','Topic::EventShowTopic');
		$this->AddEventPreg('/^topic$/i','/^list$/i','/^$/i','Topic::EventList');
	}


	protected function EventIndex() {
		/**
		 * Устанавливаем шаблон для вывода
		 */
		$this->SetTemplateAction('index');
	}
}
?>

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

Бартер! Программист - Дизайнер

Привет народ! Есть проект, нет денег свободных)
Кого интересует бартер? Нужен программист (к LS проект не относиться)
Это некие сервис.

Ситуация следующая:
Есть ТЗ, все Исходники, некоторые сверстанные страницы и начатый функционал (25% проекта)
Нужен программист который готов не спеша (пару месяцев) доделать этот проект.
В замен готов поработать дизайнером на сумму, на которой мы сойдемся.

Все материалы для ознакомления по запросу.

Мои работы на www.izhanov.me или www.free-lance.ru/users/Goo4b/ (старые работы)

плагин календарь-график для Livestreet

Нужен плагин под сайт на Livestreet, позволяющий пользователю вести некий набор календарей в которых можно добавлять и привязывать к конкретному дню текстовые или численные аттрибуты. Данные календаря должны обрабатываться по определенному алгоритму и выводиться в виде графиков или таблиц. Для каждого календаря есть настройки приватности позволяющие делать его приватным или общедоступным
Для начала планируется три календаря: 1. календарь сна, 2. календарь настроения, 3. календарь употребления кофе (с подсчетом количества кофеина).
Необходимо чтобы была возможность на этой платформе создавать и другие календари со стандартным набором функций (возможно в режиме обращения к разработчику за доработкой).
Более подробно напишу в личку если интересно.

Настройки SphinxSearch 2.0.4 поставленного в Ubuntu 12.04 командой apt-get

Я ставил Sphinx на Ubuntu 12.04. Использую облачный сервер Selectel, поэтому все операции выполнялись под root.
  1. В Ubuntu SphinxSearch 2.0.4 ставится простой командой
    apt-get install sphinxsearch

  2. Правим файл /etc/default/sphinxsearch и ставим START=yes
  3. Создаем файл /etc/sphinxsearch/sphinx.conf
    Я изначально взял отсюда: Sphinx. Установка и первичная настройка, и поправил пути, а также заменил deprecated address на listen.

    Также оказалось что таблица topic_comment теперь называется comment, поправил это тоже.
    ## Конфигурационный файл Sphinx-а для индексации Живой улицы
    
    #######################
    #
    # Описываем индексы
    #
    #######################
    
    # Источник-родитель для всех остальных источников. Здесь указываются параметры доступа 
    # к базе данных сайта
    source lsParentSource
    {
    	type		= mysql
    	sql_host	= localhost
    	sql_user	= root
    	sql_pass	= 
    	sql_db		= livestreet
    	sql_port	= 3306
        	# Для ускорения работы прописываем путь до MySQL-го UNIX-сокета (чтобы 
    	# операции с БД происходили не через TCP/IP стек сервера)
        	sql_sock	= /var/run/mysqld/mysqld.sock
        
        	
    	mysql_connect_flags	= 32 # 32- включение сжатие при обмене данными с БД
        
    	# Включам нужную кодировку соединения и выключаем кеш запросов
    	sql_query_pre			= SET NAMES utf8
        	sql_query_pre			= SET SESSION query_cache_type=OFF    
    }
    
    # Источник топиков
    source topicsSource : lsParentSource
    {
    	# запрос на получения данных топиков
    	sql_query		= \
    		SELECT t_fast.topic_id, t_fast.topic_title, UNIX_TIMESTAMP(t_fast.topic_date_add) as topic_date_add, \
    		tc.topic_text, t_fast.topic_publish \
    		FROM prefix_topic as t_fast, prefix_topic_content AS tc \
    		WHERE t_fast.topic_id=tc.topic_id AND t_fast.topic_id>=$start AND t_fast.topic_id<=$end
    
    	# запрос для дробления получения топиков на неколько итераций
    	sql_query_range		= SELECT MIN(topic_id),MAX(topic_id) FROM prefix_topic
    	
    	# сколько получать объектов за итерацию
    	sql_range_step		= 1000
    
    	
    	# Указываем булевый атрибут критерия "топик опубликован". Для возможности указания этого критерия при поиске
    	sql_attr_bool		= topic_publish
    
    	# Атрибут даты добавления, типа "время"
    	sql_attr_timestamp	= topic_date_add
    
    	# мульти-аттрибут "теги топика"
    	sql_attr_multi	= uint tag from query; SELECT topic_id, topic_tag_id FROM prefix_topic_tag
    
    	sql_ranged_throttle	= 0
    }
    
    # Источник комментариев
    source commentsSource : lsParentSource
    {
    	sql_query		= \
    			SELECT comment_id, comment_text, UNIX_TIMESTAMP(comment_date) as comment_date, comment_delete \
    			FROM prefix_comment \
    			WHERE comment_id>=$start AND comment_id<=$end
    
    	sql_query_range		= SELECT MIN(comment_id),MAX(comment_id) FROM prefix_comment
    	sql_range_step		= 5000
    
    	sql_attr_bool		= comment_delete
    	sql_attr_timestamp	= comment_date
    }
    
    #######################
    #
    # Описываем индексы
    #
    #######################
    
    index topicsIndex
    {
    	# Источник, который будет хранить данный индекса
    	source			= topicsSource
    	path			= /var/lib/sphinxsearch/data/lstopics
    
    	# Тип хранения аттрибутов
    	docinfo			= extern
    
    	mlock			= 0
    
    	# Используемые морфологические движки
    	morphology		= stem_enru, soundex, metaphone
    
    	# Кодировака данных из источника	
    	charset_type		= utf-8
    
    
    	# Из данных источника HTML-код нужно вырезать
    	html_strip				= 1
    }
    
    # Индекс комментариев
    index commentsIndex
    {
    	source			= commentsSource
    	path			= /var/lib/sphinxsearch/data/lscomments
    
    	docinfo			= extern
    
    	mlock			= 0
    
    	morphology		= stem_enru, soundex, metaphone
    
    	charset_type		= utf-8
    }
    
    #######################
    #
    # Настройки индексатора
    #
    #######################
    
    
    indexer
    {
    	# Лимит памяти, который может использавать демон-индексатор
    	mem_limit			= 32M
    }
    
    #######################
    #
    # Настройка демона-поисковика
    #
    #######################
    
    searchd
    {
            # Адрес, на котором будет прослушиваться порт
            listen                  = 127.0.0.1:3312
    
    	# Лог-файл демона
    	log					= /var/log/sphinxsearch/searchd.log
    
    	# Лог поисковых запросов. Если закомментировать,то логировать поисковые строки не будет
    	query_log			= /var/log/sphinxsearch/query.log
    
    	# Время в секундах, которое ждет демон при обмене данными с клиентом. По исчерпании происходит разрыв коннекта
    	read_timeout		= 5
    
    	# Максимальное количество одновременно-обрабатываемых запросов. 0 означает дофига, а точнее без ограничения
    	max_children		= 30
    
    	# Файл, в который сохраняется PID-процесса при запуске
    	pid_file			= /var/run/sphinxsearch/searchd.pid
    }

  4. Правим настройки для соединения с базой
    source lsParentSource
    {
            type            = mysql
            sql_host        = localhost
            sql_user        = root
            sql_pass        =
            sql_db          = livestreet
            sql_port        = 3306
    

  5. Правим префикс таблиц. В моем случае я заменил все вхождения prefix_ на пустоту. (6 замен)
  6. Индексацию будем делать под пользователем sphinxsearch, для этого надо ему выставить /bin/sh в виде шелла
    chsh -s /bin/sh sphinxsearch

  7. Запускаем индексацию из-под юзера sphinxsearch
    su sphinxsearch -c 'indexer --all'

    Индерксатор не должен выдавать ошибок, и должны появиться файлы индексов в папке /var/lib/sphinxsearch/data/
  8. Запускаем искалку
    service sphinxsearch start

  9. Проверяем, что поиск работает. У меня заработал.
  10. Ставим переиндексацию на крон. Для этого редактируем кронтаб для пользователя sphinxsearch
    su sphinxsearch -c 'crontab -e'

    Выбираем редактор и вводим такие таски
    12 */3 * * *  indexer --rotate topicsIndex > /dev/null 2>&1
    */50 * * * *  indexer --rotate commentsIndex > /dev/null 2>&1

Блочная верстка с наследованием - что это такое

Собственно, про блочну верстку я писал уже не раз, и даже как-то приводил ее пример в этом топике: livestreet.ru/blog/wishlist/13103.html (и мне кажется, что имеет смысл прочитать топик по ссылке, прежде чем читать этот; хотя и не обязательно — можно и после этого).

Но то ли пример там слишком сложный, то ли за один раз не получается все объяснить. Поэтому я решил еще один топик запостить с простыми и понятными (как мне кажется) примерами.
Читать дальше →

Плагин "Magic Rule"


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

GitHubgithub.com/livestreet/lsplugin-magicrule

Пример стандартной конфигурации:
Читать дальше →

Список хуков LiveStreet CMS 1.0.1

На днях написал черновик по списку хуков и так забыл о нем, пока не увидел новое видео от Максима и сразу вспомнил об этом тексте, решив под общий шумок вокруг хуков добавить и эту статью. Я видел разные топики, где спрашивали "есть ли список хуков?". Да, есть. Вот он.

Привожу список стандартных хуков для чистой официальной ЛС 1.0.1, большинство из них неявно прописаны в движке, поэтому попытка найти их вызовы в коде у вас не выйдет т.к. часть их них автоматически формируется ядром движка.
Из стандартной поставки ЛС хуки в сумме вызываются 486 раз, некоторые по нескольку раз. Это нормально. Здесь приведены 161 хук, которые доступны в ЛС 1.0.1, в порядке их вызова, начиная с самого первого, исключая дальнейшие повторения.

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

Интеграция с amazon S3 для livestreet 1.0



В каталоге появился бесплатный плагин интеграции LiveStreet 1.0.1 с amazons3. Он загружает картинки из топиков, фотосетов, аватары и фото юзеров на amazons3. Все настройки bucket в конфиге.
Также интегрированы для заливки фото плагины линейки DAO(+market) и LSGallery:

подробнее

Дизайнеру на заметку — что необходимо нарисовать для сайта на LiveStreet 1.0

Этот пост для тех, кто хочет нарисовать свой уникальный и неповторимый дизайн для сайта на LiveStreet CMS. В нем я хочу перечислить то, что придется нарисовать, отдельно акцентируя внимание на блоки, которые можно упустить или не догадаться. Список получен эмпирическим путем, при работе над Synio.


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