+4.29
Рейтинг
9.15
Сила

Хуки JS в LS, краткое руководство для тех, кто запутался

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

Вступление


Механизм делегирования кода ЖС в ЛС можно осуществлять такими наиболее часто употребляемыми методами в зависимости от поставленной задачи:

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

Боевой курс новичка или "всем новеньким - сюда"

Это краткое FAQ.

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

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

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

Итак:

  1. Кнопка вступления в блог — она должна быть максимально доступной, большой и понятной. Вокруг неё должно быть логичное объяснение типа сноски что она делает.

  2. К каждому объекту на ЛС можно было бы добавить справку, например в виде значка ?, при наведении указателя мыши на который выводилась бы краткая справка в попап окне для чего нужен тот или иной блок/элемент.
  3. В личных сообщения проставить маленький значок «адресат прочитал письмо»
  4. Добавить подписи ко всем элементам (title) — vOFFka
  5. При добавлении записи убирать ссылку на создание блога при нажатии выдавать сообщение в углу «Недостаточно рейтинга для создания блога», если человек не достиг нужного рейтинга. — vOFFka , nickostyle
  6. чтоб верстальщики хотя бы процентов 30 css-классов называли одинаково — avadim
  7. можно сбоку добавить кнопку «Наверх», как в контакте, чтобы не скроллом прокручивать страницу до самого верха (ведь в некоторых темах и по 500 комментариев бывает). — Newman
  8. Вывести в более удобное место управление подписчиками (по заявек) в закрытый блог… — Bo0oM
  9. Кнопку «избранного» переместить в конец топика, чтобы не приходилось прокручивать вверх после прочтения статьи. — vOFFka
  10. если вы вносите языковую переменную в свой шаблон то делайте это не на уровне шаблона а уровне языковых файлов. — Fanta
  11. прописывайте языковые переменные не в стандартном языковом файле движка (/templates/language/russian.php) (чтобы не иметь проблем с обновлениями), а в языковом файле шаблона (/templates/skin/new-jquery/config/language/russian.php) — PSNet
  12. И во имя безопасности, кидайте .htaccess в папки — Bo0oM , с правильным содержимым, например:
    
    Options -Indexes
    <Files ~ "\.tpl$">
        Order allow,deny
        Deny from all
    </Files>
    

    PSNet
    , Россыпь таких файлов замедляет работу веб-сервера, поскольку он вынужден читать их при каждом обращении к файлам. Желательно объявить эту директиву однократно, а ещё лучше — указать её в конфигурационном файле веб-сервера. В последнем случае она будет читаться только один раз, при старте Апача. onthefly
  13. не ставить h1...h6 где попало, если и ставить, то внутри должен быть голый текст — kpoxas
  14. не использовать инлайновые css и js — onthefly
  15. Везде в вызовах хуков проставить соответствующие для даного хука основные переменные, например чтобы хук:
    {hook run='menu_profile'}

    выглядел так:
    {hook run='menu_profile' oUserProfile=$oUserProfile}

    ведь эта переменная там очень нужна — PSNet
  16. Блоки в ЛС нуждаются в инфографике, ведь правда блок:

    так выглядит лучше:

    тоже самое касается пунктов в профиле («добавить в друзья» и т.п.)

    PSNet
  17. Сделать, чтобы если пользователь сейчас на сайте, то в профиле отображалось, что он «онлайн»Newman
  18. В комментариях к топику как-нибудь выделять комментарии топикстартера (цветом или рядос с аватаркой значек ставить).Newman


Предлагаю дополнять топик мелочами, которые помогу сделать ЛС более интуитивным.

P.S. Большинство мелочей, кстати, реализовал в этом шаблоне.

Livestreet: дао разработчика - 2

Первая часть цикла

Дао — это действие, процесс, поток. Чем чаще вы смотрите на код других плагинов, тем больше вы понимаете, как делать свой.
Накачайте плагинов под 0.4.2 и расматривайте, что у них внутри. Без этого вы не сможете начать писать свои плагины.

Я сделал типовой шаблон, из которого удобно делать свои собственные плагины. Располагается он тут:
http://github.com/medar/livestreetplugin
Чтобы скачать его, надо нажать в правом верхнем углу кнопку «Download Source». Желающие могут форкать и вносить изменения.

В файле находится «рыба» плагина с названием abcplugin.
Читать дальше →

Livestreet: дао разработчика - 1

Я сейчас работаю над одним проектов, в качестве платформы для которого я выбрал Livestreet. Так как с инфой для программистов у этого движка туго, я буду выкладывать те вещи, который я узнал о движке здесь. Надеюсь, это поможет остальным начинающим программистам на LS.

Я работаю с движком всего несколько дней, поэтому что-то в описании может быть неточно или неполно. Не стесняйтесь поправлять.

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

Итак.

Для начала стоит пробежаться по существующей документации для разработчика (http://trac.lsdev.ru/livestreet/wiki/DeveloperDoc), чтобы понимать термины.
Откройте в IDE движок, пробежитесь по папкам движка, по плагину page, который идет в комплекте с движком.

В движке Livestreet:
Экшены, содержащие Ивенты (action, events) — это, кто знаком с MVC — контроллеры.
Модули (module) — куски кода, которые осуществляют некий функционал (например, функционирование блогов, топиков, комментов). В процессе своей работы они обращаются к Мапперам (mapper) для того, чтобы пообщаться с базой данных. Все sql-запросы пишутся именно в мапперах. Мапперы в свою очередь используют Сущности (entity), которые переводят массивы, отданные mysql в объекты, с которыми потом работает движок.

Способ модификации кода Livestreet два.

1. Через переопределение существующих функций. Меняется целиком существующая функция в модуле/маппере/сущности, или добавляется своя. Подробно: livestreet.ru/blog/dev_documentation/4499.html

2. Через хуки. При этом вставляется код в указанное место движка.
Хуки можно вставить в места, определенные конструкцией $this->HookRun(...); в движке, а также на начало и конец любого модуля, зарегистрированного в системе (не важно, системный он, или установлен каким-то плагином). Подробно про хуки в моделях: livestreet.ru/blog/dev_documentation/3991.html.

Переопределения эти делаются в плагинах. Подробнее о плагинах и их устройстве: livestreet.ru/blog/dev_documentation/3531.html

Как делать эти самые плагины — подробно поговорим во второй части.

Вторая часть

Использование LiveStreet как фреймворка

LiveStreet — это не просто хабра-подобный движок. И даже не столько движок для
создания сообществ, сколько замечательный фреймворк, который подходит для создания самых разнообразных сайтов.
Получается, что от хостинга требуется только php, т.к. для простого сайта-визитки работать с БД совсем необязательно!
Разумеется сайт из пары страниц можно оставить на простом html, но этим постом я хочу показать, что LS можно использовать для создания сайтов абсолютно любого типа.
В общем, кому стало интересно — прошу под кат.
Читать дальше →

Новые возможности по переопределению/наследованию классов LiveStreet

В LS появилась новая возможность для разработчиков плагинов — наследование классов. Идея была высказана еще avadim'ом здесь.
Эта возможность позволит удобно переопределять различные методы одного класса (модуля, экшена, сущности, маппера) разными плагинами без конфликтов.
Главное отличие от делегирование — не происходит блокировки переопределения класса для других плагинов. Также есть возможность переопределения одного метода разными плагинами, но здесь разработчикам нужно быть очень осторожными и делать так, чтоб свести вероятность конфликта к минимуму.

Как использовать.
Например, нужно переопределить метод получения пути до аватара у сущности пользователя в плагине Test. В плагине необходимо объявить те классы, которые будут наследоваться. Объявление происходит в свойстве $aInherits:
<?php
class PluginTest extends Plugin {
    
    protected $aInherits=array(
       'entity'  =>array('ModuleUser_EntityUser'=>'_ModuleSide_EntityUser')
    );

    public function Activate() {        
        return true;
    }
    
    public function Init() {        
    }
}
?>

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

Переопределение методов модулей с помощью ...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];
	}
}
?>

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

Использование плагинов в v.0.4

Безболезненное расширение функционала — достаточно проблематичный вопрос (под «безболезненностью» я понимаю весь спектр удобства для пользователей движка).

Я думаю, вы еще не забыли, что для добавления новых возможностей в версиях до 0.3.1 включительно используются Хаки и Модули. При этом установка любого стороннего творения дело достаточно хитрое и небезопасное, часто требующее ориентирования в архитектуре и особенностях движка. Для преодоления этих проблем в ядро v.0.4 была введена система плагинов:


К чему мы стремились создавая систему плагинов?

а) расширения функционала (плагины) можно просто установить и также просто убрать (а вдруг не понравилось), сложность этого процесса не зависит от количества расширений, разветвленности структуры их каталогов и т.д.;
б) установка внешних расширений (плагинов) не усложняет обновление основного ядра;


Для тех, кого заинтересовали подробности