Для разработчиков
Уже больше месяца плотно занимаюсь подгонкой движка до необходимых моему проекту возможностей. Написал около 15 плагинов (все очень индивидуальные, потому поделится с сообществом нечем). За это время получил как и море позитивных эмоций при разработке под LiveStreet, так и столкнулся с рядом не очень радостных моментов.
Решил поделится с сообществом своим видение необходимых улучшений, которые очень сильно облегчат жизнь разработчикам.
Пожалуй самым необходимым, по моему мнение, есть предложение создать отдельную таблицу в базе данных для настроек разных плагинов и объект для работы с этой таблице. Без этой таблицы очень тяжело делать нормальную админку для плагина прямо в CMS. Настройки в файлах это конечно быстро, но очень не удобно, особенно для пользователей, потому я принципиально ничего не храню в конфигурационных файлах, кроме имен таблиц и правил роутинга.
Для своих целей я создал плагин с аналогичным функционалом, в принципе меня этот вариант полностью устраивает, но минус в том, что если я создам какой-то полезный сообществу плагин с его использованием, то мне нужно будет объяснить пользователю, что нужно установить еще один плагин для его работы, а это как минимум не правильно.
Второй момент, который очень сильно не нравится, это то, что нельзя добавлять стили и ява-скрипты так, чтобы при включенных настройках объединения файлов они не добавлялись в общую группу и не создавали еще один, немного расширенный вариант скрипта/стиля.
Для лучшего понимая объясню когда это бывает нужно: делается админка для плагина, нужно добавить ява-скрипт для управления этим плагин, хотя бы тот же аякс. При использовании AppendScript этот скрипт добавляется в общий список и CMS создаёт новый вариант объединенного файла скриптов. В итоге имеем один вариант на 300 Кб без этого срипта и на 301 Кб с ним. Зачем мне перекачивать еще раз те 300 Кб, которые мы уже имели ради одной страницы. Можно конечно вызывать файл с шаблона, но это во-первых не удобно, а во-вторых CMS не обработает и не сожмет файл.
Варианты решения которые я вижу:
1. Отдельная функция, которая добавляет файл в список сжатия, но не объединения скриптов/стилей
2. Позволить создавать группы сжатых стилей и скриптов. Допустим для бэкенда это одни файлы, для фронтэнда это другие файлы.
Третье, что не нравится (а может не нашел) — это невозможность брать языковые константы из ява скриптов. Точнее есть какое-то ls.lang.get, но оно не берет ни з языковых файлов плагина, ни с файлов шаблона, а это значит что нормально диалог подтверждения не сделать. Этот момент на самом деле не критичный, так, мелкое неудобство, но всё равно решил написать.
Четвертое: сейчас как раз разбираюсь с кроном. В том виде, в котором оно реализовано сейчас не очень удобно работать. Опять таки нужно обьяснять каждому пользователю, который хочет установить ваш плагин, как добавить задание плагина в крон. Более гуманные вариант решения:
1. Псевдокрон: при открытии пользователем страницы LS проверяет нету ли висящих заданний в данный момент, которые нужно выполнить и если такие есть, то выполняет. Вариант так себе, минусов много, но от пользователя при установке CMS и плагинов вообще ничего не требуется
2. Центральный крон: в LS есть один центральный крон, который выполняется (допустим раз в 15 минут, но это в любом случае можно настроить). В момент выполнения этого крона, LS проверяет нет ли у плагинов заданий, которые нужно выполнить в данный момент и если есть, то она вызывает нужные функции. Плюсы: адекватный крон, разработчикам вообще сказка под такое добавлять задания, а от пользователей требуется только добавить запуск центрального крона в кронтаб. И всё, будь у него хоть 15 плагинов с функциями крон разных интервалов, ему всё равно не нужно ничего больше делать.
Так же это более секьюрно, чем оставлять файлы, которые запускает кронтаб, которые по сути можно и через браузер запускать. Если выполнение крона будет контролировать CMS, тогда в плагинах не нужно делать дополнительную проверку на «а не чаще ли нас запускают, чем нужно».
Пока что это всё что вспомнил. Если еще что-то вспомню — дополню статью. На самом деле пожеланий больше, но первые 2, по моему мнению, критические.
UPD: добавил 4 пункт.
UPD 2: дополнил 4 пункт.
Решил поделится с сообществом своим видение необходимых улучшений, которые очень сильно облегчат жизнь разработчикам.
Пожалуй самым необходимым, по моему мнение, есть предложение создать отдельную таблицу в базе данных для настроек разных плагинов и объект для работы с этой таблице. Без этой таблицы очень тяжело делать нормальную админку для плагина прямо в CMS. Настройки в файлах это конечно быстро, но очень не удобно, особенно для пользователей, потому я принципиально ничего не храню в конфигурационных файлах, кроме имен таблиц и правил роутинга.
Для своих целей я создал плагин с аналогичным функционалом, в принципе меня этот вариант полностью устраивает, но минус в том, что если я создам какой-то полезный сообществу плагин с его использованием, то мне нужно будет объяснить пользователю, что нужно установить еще один плагин для его работы, а это как минимум не правильно.
Второй момент, который очень сильно не нравится, это то, что нельзя добавлять стили и ява-скрипты так, чтобы при включенных настройках объединения файлов они не добавлялись в общую группу и не создавали еще один, немного расширенный вариант скрипта/стиля.
Для лучшего понимая объясню когда это бывает нужно: делается админка для плагина, нужно добавить ява-скрипт для управления этим плагин, хотя бы тот же аякс. При использовании AppendScript этот скрипт добавляется в общий список и CMS создаёт новый вариант объединенного файла скриптов. В итоге имеем один вариант на 300 Кб без этого срипта и на 301 Кб с ним. Зачем мне перекачивать еще раз те 300 Кб, которые мы уже имели ради одной страницы. Можно конечно вызывать файл с шаблона, но это во-первых не удобно, а во-вторых CMS не обработает и не сожмет файл.
Варианты решения которые я вижу:
1. Отдельная функция, которая добавляет файл в список сжатия, но не объединения скриптов/стилей
2. Позволить создавать группы сжатых стилей и скриптов. Допустим для бэкенда это одни файлы, для фронтэнда это другие файлы.
Третье, что не нравится (а может не нашел) — это невозможность брать языковые константы из ява скриптов. Точнее есть какое-то ls.lang.get, но оно не берет ни з языковых файлов плагина, ни с файлов шаблона, а это значит что нормально диалог подтверждения не сделать. Этот момент на самом деле не критичный, так, мелкое неудобство, но всё равно решил написать.
Четвертое: сейчас как раз разбираюсь с кроном. В том виде, в котором оно реализовано сейчас не очень удобно работать. Опять таки нужно обьяснять каждому пользователю, который хочет установить ваш плагин, как добавить задание плагина в крон. Более гуманные вариант решения:
1. Псевдокрон: при открытии пользователем страницы LS проверяет нету ли висящих заданний в данный момент, которые нужно выполнить и если такие есть, то выполняет. Вариант так себе, минусов много, но от пользователя при установке CMS и плагинов вообще ничего не требуется
2. Центральный крон: в LS есть один центральный крон, который выполняется (допустим раз в 15 минут, но это в любом случае можно настроить). В момент выполнения этого крона, LS проверяет нет ли у плагинов заданий, которые нужно выполнить в данный момент и если есть, то она вызывает нужные функции. Плюсы: адекватный крон, разработчикам вообще сказка под такое добавлять задания, а от пользователей требуется только добавить запуск центрального крона в кронтаб. И всё, будь у него хоть 15 плагинов с функциями крон разных интервалов, ему всё равно не нужно ничего больше делать.
Так же это более секьюрно, чем оставлять файлы, которые запускает кронтаб, которые по сути можно и через браузер запускать. Если выполнение крона будет контролировать CMS, тогда в плагинах не нужно делать дополнительную проверку на «а не чаще ли нас запускают, чем нужно».
Пока что это всё что вспомнил. Если еще что-то вспомню — дополню статью. На самом деле пожеланий больше, но первые 2, по моему мнению, критические.
UPD: добавил 4 пункт.
UPD 2: дополнил 4 пункт.
Предлагаем новый инструмент продвижения — лендинг пейдж. Данный подход позволяет существенно увеличить продажи при низких затратах.
21 комментарий
см $config['head']['default']['js'] в конфиге, а конкретно последнюю строчку:
«yandex.st/share/share.js» => array('merge'=>false),
Можно. Нужно добавить второй параметр-массив в метод добавления ЖС или КСС с «merge» => false
Снова неверно. Все это уже реализовано. Чтобы получить текстовку из ls.lang.get нужно её сначала туда поместить:
в шаблоне:
из пхп:
потом такие текстовки доступны через ls.lang.get.
Важно: следует помнить про префиксы для текстовок плагина.
З.Ы.
ВсеМногое уже реализовано, вопрос только в том нашил ли вы это или нет)Такое решение, имхо, должно быть из коробки, опять таки потому что это нужный функционал и это облегчает установку вашего плагина пользователем.
Ну тогда значит самый большой минус для разработчиков — это сложность поиска ответов на интересующие вопросы, потому что вкладка с документацией у меня не закрывается, а ответов от неё часто не добиться.
Документация по ЛС — больная тема, некому её писать. В свободное время пишу — http://livestreetguide.com
Проблему ведения документации, я как разработчик, прекрасно понимаю. Но очень сложно расширять сообщество, когда разработчики должны методом тыка искать решения своих проблем, так что в любом случае, это не менее важный момент, чем развитие самой CMS.
предложенное вами решение вроде как у ВП релизовано.
Тоже что-то такое припоминаю, может этот вариант я оттуда и почерпнул.
Кстати только что понял, что вариант псевдокрона легко реализовывается и внутри плагина, ведь всё что нужно уже есть. Но минусы этого подхода остаются: всё таки не очень хорошо, при загрузке каждой страницы проверять «а не нужно ли нам что-то сделать», особенно это будет проектах с большой посещалкой. Да и чем больше плагинов используют этот подход, тем больше мы нагружаем сервер, так что моё мнение не изменилось — этим должно заниматься ядро CMS и желательно в виде варианта с центральным кроном.
А вариант с центральным кроном всем хорош, но да — надо как-то объяснять пользователям, что это дело требуется настроить на их хостинге, а для некоторых это просто беда.
Что касается нагрузки, то я не специалист в этой области, возможно вы и правы, спорить не буду. Мои высказывания базируются всего лишь на догадках.
В моём вариант клиент качает те же 300 Кб при открытии страниц сайта и еще 1 Кб при открытии страницы с дополнительным файлом. В результате те же 2 запроса, но трафика ушло почти в раза меньше.
Теперь объясните мне преимущество вашего варианта.