+80.16
Рейтинг
207.74
Сила

Степан Танасийчук

Плагин "Дополнительные блоки"

Здраствуйте друзья.

Презентую плагин «Дополнительные блоки».
В текущей версии всего два блока
  1. Блок «Рейтинг пользователей»
  2. Блок «Кто на сате?»
Блок «Рейтинг пользователей» выводит N пользователей с вышим рейтингом, с максимальным кол-вом публикаций и коментариев. Переключение вкладок на ajax как в блоке «Блоги».
Блок «Кто на сайте?» — выводит пользователей кто онлайн.

Идея плагина такова: он не должен делегировать ни один модуль, ни один шаблон, работать полностью автономно, чтобы мог сочитаться с любым другим плагином, не вступать с ним в конфликт.

Благодарности:
aVadim за его блок «Who is online», который вошел в плагин под названием «Кто на сайте?»
Lora_GT именно она дала идею сделать вывод пользователей по кол-ву публикаций и комментов.

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

После модерации будет доступно по «Дополнительные блоки»
Сейчас можно скачать и опробывать с «Дополнительные блоки»

ВКонтакте на сайтах LiveStreet (ТЗ)

В топике livestreet.ru/blog/wishlist/4136.html обсуждался модуль, который бы обеспечивал авторизацию с сервиса vkontakte.ru

Мы (я и Wizard) хотим этот модуль сделать. Как минимум обсудить.

Каким нам видится функционал этого модуля:

1. Обеспечение возможности авторизации на сайте на движке LS с данными из vkontakte.ru
2. Создание пользователя в LS в формате ИмяФамилия@vkontakte.ru (ИмяФамилия в латинской транслитерации)
3. Создание личного блога в формате ИмяФамилия (в латинской транслитерации)
4. Адаптация аналогичного функционала к другим сервисам (gmail, OpenId, МойМир… какие ещё?)

Ставим хук внутри шаблона.

Появилась возможность устанавливать хуки прямо внутри шаблона — trac.lsdev.ru/livestreet/changeset/848
Делается это за счет плагина к Smarty hook, например:
{hook run='body_begin'}
вызовет хуки повешенные на событие 'template_body_begin'(обратите внимание, что приставка template_ добавляется автоматически, если хук вызван из шаблона), а их результат в виде строки вернется в шаблон.

Предлагаю определиться какие нужны стандартные хуки? Сейчас добавлено только два: body_begin и body_end, соответственно вызываются в начале HTML тега BODY и в конце.

Публикация ссылок - vkontakte

vkontakte.ru/pages.php?act=share

Если Вы разместите под статьями Вашего издания или блога кнопку «Опубликовать ВКонтакте», то позволите 70 миллионам пользователям ВКонтакте быстро делиться ссылкой на Вашу статью со своими друзьями ВКонтакте.

Каждый раз, когда пользователь ВКонтакте нажимает на эту кнопку на Вашем сайте, на его странице ВКонтакте автоматически создается заметка со ссылкой на Ваш сайт. После этого друзья пользователя сразу же смогут узнать о статье из трех источников — со страницы Мои Новости, со страницы Заметки друзей и с личной страницы опубликовавшего пользователя.

Последнее принесет Вашему сайту внимание дополнительных посетителей не только в краткий промежуток времени, но и в перспективе, так как ссылка на Ваш сайт навсегда останется доступной всем посетителям страницы опубликовавшего. Данная особенность выгодно отличает публикацию ВКонтакте от других методов публикации в интернете.

Разместить кнопку ВКонтакте на Вашем сайте очень просто. Для этого мы предлагаем воспользоваться конструктором кнопки ниже.

А теперь вопрос:

Вставил в header внутри :
<script type="text/javascript" src="http://vkontakte.ru/js/api/share.js?2"></script>


Вставил в конце сообщения:
<script type="text/javascript"><!--
document.write(VK.Share.button(false,{type: "round", text: "Сохранить"}));
--></script>


Результата нет — в чем проблема?

P.S. Линк на сайт куда вставил. ibalet.ru/blog/foto/164.html

Переопределение методов модулей с помощью ...Hook'ов!

В LiveStreet 0.4 появилась возможность переопределять не только целиком модули, но и отдельные методы. Это позволить разным плагинам бесконфликтно переопределять разные методы одного модуля.

Принцип действия этого механизма основан на Hook'ах:
  1. Вызов каждого метода сопровождается выполнением хуков — module_ModuleName_MethodName_before и module_ModuleName_MethodName_after, соответственно ДО и ПОСЛЕ вызова метода модуля. В первом случаи в хук передаются параметры вызова метода, во втором передается результат выполнения метода модуля.
  2. На module_ModuleName_MethodName_before можно повесить специальный хук — delegate, результат выполнения которого и будет «результатом» выполнения метода модуля

Пример:
<?php 
class HookTest extends Hook {
	public function RegisterHook() {
		$this->AddDelegateHook('module_text_parser_before','testHook',__CLASS__,-3);
	}

	public function testHook($aVars) {
		return 'Topic text > '.$aVars[0];
	}
}
?>

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

Разработка шаблона для мобильных устройств

Давно я хотел это сделать, да всё как-то не до того было...

Итак, я решил сделать шаблон для мобильников. Дизайн по мотивам «родного» дизайна сайта движка.

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

  1. Нужен ли такой шаблон вообще?
  2. Что должна содержать мобильная версия сайта
  3. Необходимо протестировать то что сейчас есть различными устройствами

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

Делегирование в плагинах

Решил не засорять топик с руководством по созданию плагинов, напишу тут, что нашел в процессе тестирования.

Итак, по порядку, что уже было:
1) (fixed) ошибка с определением названия экшена при делегировании: создал тикет
2) предложение об автоподстановке префиксов делегатов ( livestreet.ru/blog/dev_documentation/3710.html#comment59803, пункт 2 )
3) (fixed) отсутствие поддержки делегирования на основе данных из xml-файла (по-видимому, функция просто ещё в разработке)

И теперь ещё кое-какие мысли (пока все в файле /engine/classes/ActionPlugin.class.php).

— Сейчас, при делегировании экшена (например {plugin_dir}/classes/actions/ActionSettings.class.php) происходит автоматическое делегирование соответствующей директории темплейтов, что не очень хорошо, т.к. это совершенно необязательно по логике и придется тупо копировать всю папку actions/ActionSettings в плагин.
Сейчас там проверяется только наличие в плагине папки с соответствующим шаблоном:
$sTemplateName=in_array(Config::Get('view.skin'),array_map('basename',glob(Config::Get('path.root.server').'/plugins/'.$aMatches[1].'/templates/skin/*',GLOB_ONLYDIR)))
				? Config::Get('view.skin')
				: 'default';

хорошо бы проверять наличие папки с соответствующим экшеном:
$fGetTpl = create_function('$sPath','preg_match("/skin\/([\w]+)\/actions/i",$sPath,$aMatches); return $aMatches[1];');
$sTemplateName=in_array(Config::Get('view.skin'),array_map($fGetTpl,glob(Config::Get('path.root.server').'/plugins/'.$aMatches[1].'/templates/skin/*/actions/Action'.ucfirst($aMatches[2]),GLOB_ONLYDIR)))
				? Config::Get('view.skin')
				: 'default';


— В методе SetTemplateAction() код
$this->getTemplatePathPlugin().'/actions/Action'.ucfirst($aMatches[2]).'/'.$sTemplate.'.tpl'
в случае без делегирования вернет /actions/ActionSettings/profile.tpl, а надо actions/ActionSettings/profile.tpl, поэтому первый слэш переносим отсюда в getTemplatePathPlugin():
$sDir=Config::Get('path.root.server')."/plugins/{$aMatches[1]}/templates/skin/{$sTemplateName}/";


— Дублирование кода в GetTemplate() лучше заменить на
if (is_null($this->sActionTemplate)) {
    $this->SetTemplateAction($this->sCurrentEvent);
}


— В дополнение к первому:
Чаще всего нужно изменить не все шаблоны экшена, а только некоторые, зачем же копировать не измененные? Сделаем проверку, есть ли они в делегирующей папке, и, если нет, вернем стандартные:
protected function SetTemplateAction($sTemplate) {
if($sActionTemplate=preg_match('/^Plugin([\w]+)_Action([\w]+)$/i',$this->GetActionClass(),$aMatches)) {
      $sTplFile = 'actions/Action'.ucfirst($aMatches[2]).'/'.$sTemplate.'.tpl';
      $sActionTemplate = is_file($this->getTemplatePathPlugin().$sTplFile)
        ? $this->getTemplatePathPlugin().$sTplFile
        : $sTplFile;
    }
    $this->sActionTemplate = $sActionTemplate;
	}


Вот такие вот мысли.
Что скажете?

PS — также с нетерпением ждем описания функционала кастомных модулей.

Video Mail.ru

Хак дает возможность вставлять видео с mail.ru в топик.

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

Открываем в редакторе:
classes\modules\sys_text\Text.class.php

Находим:
public function VideoParser($sText) {

ниже вставляем:

		/**
		 * mail.ru
		 */
		$sText = preg_replace('/<video>http:\/\/(?:www\.|)video\.mail\.ru\/([a-zA-Z0-9_\-]+)\/([a-zA-Z0-9_\-]+)\/([a-zA-Z0-9_\-]+)\/([a-zA-Z0-9_\-]+)\.html<\/video>/Ui', '<object width=626 height=367><param name="wmode" value="opaque"></param><param name="allowScriptAccess" value="always"></param><param name="movie" value="http://img.mail.ru/r/video2/player_v2.swf?par=http://content.video.mail.ru/$1/$2/$3/\$$4&id=$4"></param><embed src="http://img.mail.ru/r/video2/player_v2.swf?par=http://content.video.mail.ru/$1/$2/$3/\$$4&id=$4" type="application/x-shockwave-flash" width=626 height=367 allowScriptAccess="always"></embed></embed></object>', $sText);


Сохраняем.
Теперь при написании топиков в теге
<video>

можно вставлять видео с mail.ru, например:
<video>http://video.mail.ru/mail/gabdiev_g/_vblogs/19.html</video>

Нюансы переработки модуля в соответствующий плагин для 0.4 на примере модуля Круг друзей


Собрался с силами и попробовал превратить модуль в плагин :)
Решил начать с самого простого — модуля Круг друзей.
Получившийся плагин iFace для 0.4 можно скачать здесь (как и модуль распространяется бесплатно при условии сохранения копирайтов).
Расскажу с какими нюансами столкнулся.
Читать дальше →

Авторизация по OpenID и oAuth

Очень страдаю от отсутствия модуля для регистрации/авторизации пользователей по OpenID или oAuth. Подобный модуль мог бы быть очень полезен для привлечения аудитории на любой сайт. Большинство интернетчиков уже имеет аккаунты на Twitter, Google, Яндексе или OpenID-провайдере и авторизация или регистрация с помощью них сильно упростила бы жизнь.



Если кто-то возьмется за реализацию, то готов даже оплатить разработку подобного модуля. Если там еще и Facebook будет, то вообще сказка.