+0.90
Рейтинг
2.47
Сила

Частично ограничить функционал?

Здравствуйте. Вопрос чисто теоретический, но важный.
Можно ли сделать на сайте VIP-секцию (плагинами, хуками и т.д.)?

То есть, есть какая-то часть сайта, доступная для комментариев всем (блог отдельный, например, как на Хабрахабре — песочница), а остальная — определенным лицам.

Проблемы со скоростью выполнения запросов Sphinx

Здравствуйте, у меня есть вопрос по скорости выполнения запросов Sphinx, прошу помочь неопытному с решением данной проблемы.

Есть созданный RT индекс в котором находятся ~1 500 000 товаров.
Sphinx используется не только для полнотекстового поиска но и для фильтрации и сортировки
товаров в каталоге, также с его помощью реализована зависимость фильтров и подсчет
количества товаров по определенным характеристикам фильтрации.

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

Sphinx.conf:
index rt_index_name
{
    type = rt
    path = /var/data/index_name
    docinfo = extern
    morphology = stem_enru
    min_word_len = 3
    html_strip = 0
    charset_type = utf-8
    enable_star = 1
    rt_mem_limit = 128M

    rt_field = product_title
    rt_field = product_type
    rt_attr_uint = product_nid
    rt_attr_uint = product_status
    rt_attr_uint = product_promote
    rt_attr_bigint = product_available
    rt_attr_uint = product_shop_weight
    rt_attr_uint = product_price
    rt_attr_uint = product_discount
    rt_attr_uint = product_brand
    rt_attr_uint = product_shop
    rt_attr_uint = product_grade
    rt_attr_multi = product_category
    rt_attr_float = product_rating
    rt_attr_float = product_rating_actual
    rt_attr_timestamp = product_created
    rt_attr_bigint = product_moderation_category
    rt_attr_bigint = product_moderation_status
    rt_attr_bigint = product_moderation_suspect
}

searchd
{
    listen = 127.0.0.1:2413:mysql41
    listen = 127.0.0.1:2414
    log = /var/log/sphinx/searchd.log
    query_log = /var/log/sphinx/query.log
    pid_file = /var/run/sphinx/searchd.pid
    read_timeout = 1
    max_matches = 10000
    max_children = 30
    workers = threads
    compat_sphinxql_magics= 0
    dist_threads = 8
}

Примеры запросов:
Пример №1 Время выполнения: 0.378
$sphinx = new SphinxClient();
$sphinx->SetLimits(0, 100);
$sphinx->SetFilter('product_category', array(32903));
$sphinx->SetSortMode(SPH_SORT_EXTENDED, 'product_available DESC, product_grade ASC,
product_rating_actual DESC, product_nid DESC');
$sphinx_results = $sphinx->Query('', 'rt_index_name');


Пример №1 Время выполнения: 0.642
$sphinx = new SphinxClient();
$sphinx->SetLimits(0, 100);
$sphinx->setGroupBy('product_brand', SPH_GROUPBY_ATTR);
$sphinx_results = $sphinx->Query('', 'rt_index_name');


Пример №1 Время выполнения: 0.677
$sphinx = new SphinxClient();
$sphinx->SetLimits(0, 100);
$sphinx->setGroupBy('product_category', SPH_GROUPBY_ATTR);
$sphinx_results = $sphinx->Query('', 'rt_index_name');

Вставка плеера на сайт

Здравствуйте! Столкнулся с такой проблемой:
Решил добавить плеер на сайт, нашёл код:
<object type="application/x-shockwave-flash" data="http://flv-mp3.com/i/pic/ump3player_500x70.swf" height="70" width="470"><param name="wmode" value="opaque"></param><param name="wmode" value="opaque"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><param name="movie" value="http://flv-mp3.com/i/pic/ump3player_500x70.swf"></param><param name="FlashVars" value="way=http://cs7-3v4.vk.me/p24/7615dc171cf31a.mp3&swf=http://flv-mp3.com/i/pic/ump3player_500x70.swf&w=470&h=70&time_seconds=0&autoplay=0&q=&skin=white&volume=70&comment=Rock Band"></param></object>

добавил всё нужное в jevix.php.
Добавил в Text.class.php строчку:
$sText = preg_replace('/<audio>(.*)<\/audio>/i', '<object type="application/x-shockwave-flash" data="http://flv-mp3.com/i/pic/ump3player_500x70.swf" height="70" width="470"><param name="wmode" value="opaque"></param><param name="wmode" value="opaque"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><param name="movie" value="http://flv-mp3.com/i/pic/ump3player_500x70.swf"></param><param name="FlashVars" value="way=$1&swf=http://flv-mp3.com/i/pic/ump3player_500x70.swf&w=470&h=70&time_seconds=0&autoplay=0&q=&skin=white&volume=70&comment=Rock Band"></param></object>', $sText);

При создании топика плеер появляется, но не воспроизводит аудио…


P.S. После создания топика плеер генерирует такой код:
<OBJECT height=70 width=470><param name="wmode" value="opaque"></param><param name=FlashVars value="way=<a href=&swf=http://flv-mp3.com/i/pic/ump3player_500x70.swf&w=470&h=70&time_seconds=undefined&autoplay=0&skin=white&volume=80&comment="><embed src="http://flv-mp3.com/i/pic/ump3player_500x70.swf" type="application/x-shockwave-flash" wmode="transparent" flashvars="way=<a href=&swf=http://flv-mp3.com/i/pic/ump3player_500x70.swf&w=470&h=70&time_seconds=undefined&autoplay=0&skin=white&volume=80&comment=" height="70" width="470"></embed></embed></OBJECT>


Что не так? Помогите пожалуйста)

Как реализовать функционал "правильно" "не правильно"

Доброго дня! Возник вопрос:
Как реализовать функционал викторины, наподобие вот этого www.buzzfeed.com/richardhjames/who-is-older-the-politician-or-the-celebrity или вот этого www.buzzfeed.com/richardhjames/who-is-older-the-politician-or-the-celebrity

INKA - новый шаблон для LiveStreet CMS

Inka

Разрешите представить вам свой новый шаблон под названием «INKA». Наверное еще ни один из своих шаблонов не делал так долго — свободного времени сейчас практически не бывает, но по чуть-чуть все же допилил до конца. Шаблон три раза менял свой вид и структуру пока не получилось что-то, чем можно поделиться с общественностью.

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

Новый функционал фреймворка - поведения (behavior)

В новой версии LS 2.0 появится функционал поведений (behaviors), который очень поход на подобный в Yii.
Суть сводится к тому, что теперь определенному типу объектов (пользователи, топики, блоги и т.п.) или конкретному объекту можно назначить через поведения определенный новый функционал.
Добавить новое поведение в объект достаточно просто, можно у объекта определить свойство $aBehaviors. Например:
	protected $aBehaviors=array(
		'category'=>'ModuleCategory_BehaviorCategory',
		'property'=>array(
			'class'=>'ModuleProperty_BehaviorPropertyEntity',
	        	'target_type'=>'article'
		)
	);

В этом примере добавляются два поведения — категории и дополнительные поля. В качестве ключа используется название поведение (далее по этому ключу можно обращаться к поведению), а в качестве значения идут параметры. Параметры идут произвольным массивом имя/значение, 'class' — это служебный параметр, означающий класс поведения. Если у повеления нет параметром, то его можно записать в короткой форме (смотри 'category'). Альтернативным (скорее дополнительным) способом добавления поведения является прямой вызов метода AttachBehavior, например:
$oTopic->AttachBehavior('property','ModuleProperty_BehaviorPropertyEntity');

// далее можно убрать поведение
$oTopic->DetachBehavior('property');


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

Работа в различных окружениях (devel, production и т.п.)

В новой версии LS мы изменили механизм работы определения окружения и загрузки соответствующих конфигов (config.local.php и config.stable.php). Если раньше эти конфиги всегда подгружались(просто перезаписывая данные), то сейчас подключается только нужный конфиг.

Логику работы мы взяли из популярного фреймворка Laravel. Теперь у нас есть в корне сайта каталог /bootstrap/ с файлом start.php. Именно в этом файле задается механизм определения текущего окружения:
$sEnv=Engine::DetectEnvironment(array(
                                 'production' => array('your-machine-name'),
                             ));

В метод DetectEnvironment передается список окружений (ключи массива) и в качестве значений список хост-неймов серверов. Текущий хост-нейм можно посмотреть в nix командой hostname. Как альтернатива в метод DetectEnvironment вместо списка можно передать функцию и определить в ней свою логику:
$sEnv=Engine::DetectEnvironment(function(){
    // здесь ваша логика
    return 'devel';
});

В зависимости от текущего окружения будет загружен необходимый конфиг (если он существует). Например, для окружения «production» загрузится /application/config/config.production.php Этот же механизм работает и для плагинов! Будет подгружен конфиг /application/config/plugins/[plugin_name]/config.production.php

По умолчанию (если не удалось определить окружение) подключается окружение «local». Дополнительно зарезервировано окружение «testing», которое используется для юнит-тестов. Активируется оно довольно просто — достаточно перед подключением файла /bootstrap/start.php создать переменную $bUseEnvironmentTesting=true;.

Плагин «Просмотры» (обновление 16.11.2015)

Описание

Плагин осуществляет подсчет количества просмотров топиков и позволяет сортировать топики по числу просмотров на страницах "/index", "/blog", "/personal_blog" и для каждого из блогов в отдельности. Поддерживается фильтрация по дате.

Плагин анализирует статистику просмотров 2 видов:
  1. Простая статистика по общему числу просмотров.
  2. Расширенная статистика — использует данные, собранные плагином «ViewStat». Данный режим активизируется автоматически при активном плагине «ViewStat». В данном режиме фильтрация может быть как по времени создания топиков, так и только по просматриваемым за выбранное время.

Совместим с шаблонами:
— Synio;
— Mobile;
— VK Flat Style.

Не совместим с плагином «ViewCount».

Для повышение производительности, по совету PSNet , хранение статистики осуществляется в отдельной таблице.

GitHub: github.com/wasja1982/livestreet_views

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

jQuery плагин для создания вкладок

simple tabs jquery plugin

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

jQuery плагин для быстрого и простого создания вкладок. Не нуждается в инициализации, работает сразу после готовности DOM, использует on (live) события, поэтому будет работать на динамично формируемых страницах.

Для вкладок задается группа и id (для возможности размещать на странице несколько разных групп вкладок даже если у них пересекаются id).

GitHub: github.com/psnet/simple_tabs
Demo: demo simple_tabs

Инструкция по подключению находится на гитхабе.

UPD: Может и Simple Tree — простое сворачиваемое дерево на чистом CSS без использования JS и изображений понадобится кому-то.

ls_geofiller - скрипт для автоматического заполнения таблицы geo_target

Однажды мне понадобилось обработать список юзеров и отфильтровать по их по географическому местоположению. В процессе я столкнулся с тем, что из ~450 юзеров информация о географическом положении заполнена лишь у 16-ти. И я решил сделать скрипт, который бы на основании IP с которым юзер регистрировался, получал данные о географическом положении, и заполнял эти данные. Для осуществления этого я использовал один из общедоступных сервисов sypexgeo.net (Не сочтите за рекламу, я к сервису отношения не имею, но не указать его, было бы неправильно)

Скрипт решил писать на python, так как владею им получше чем php, поэтому запускать его нужно из командной строки.

Одной из проблем является не точное соответствие названий получаемых от API сервиса, и названий в таблицах geo* livestreet например (Dnepropetrovsk и Dnipropetrovsk, Moskva и Moscow & Moscow region и тысячи других несоответствий), поэтому я сделал словарь синонимов, который заполняется при работе скрипта, именно поэтому скрипт требует участия человека при работе. Натолкнувший на неизвестный ему географический объект, скрипт спросит у вас синоним этого названия из базы livestreet (список отсортирован эвристически, и зачастую (но не обязательно) самый последний элемент является верным синонимом) В дальнейшем, скрипт будет использовать этот синоним, сохранив его в базе, то есть ввести его предстоит только один раз)

Скорее всего словарь синонимов (ls-geo.dat), после того как скрипт отработает, пополнится, если вам будет не сложно, можете прислать его мне для обновления исходного словаря.

Итак, ссылка на исходники на Гитхабе: github.com/svfat/ls-geofiller