Webasyst: открытый PHP-фреймворк для создания бизнес-приложений

    Хочу рассказать о проекте, который мы недавно выпустили.

    Это открытый PHP-фреймворк для разработки бизнес-приложений: приложений, у которых есть бекенд, закрытый авторизацией, и к которым одновременно подключаются много пользователей с разграниченными правами доступа.



    Фреймворк называется Webasyst, написан на PHP/MySQL/Smarty/jQuery, бесплатный, с открытым кодом (лицензия LGPL).

    Создавая фреймворк, мы не пытались изобретать новый Zend или Symfony. Мы сделали фреймворк для решения более узкой задачи, но возникающей в работе веб-студий и фрилансеров достаточно часто — сделать онлайн-систему с фронтендом и бекендом (админкой). Это позволило нам реализовать во фреймворке больше прикладных инструментов, которые ставят разработку приложения на хорошие «рельсы». Например (это наша отдельная гордость!), встренный CSS-инструментарий, который позволяет быстро нарезать ясные и выразительные интерфейсы. Можно попробовать в действии в нашей интерфейсной песочнице.



    Фреймворк написан, придерживаясь модели проектирования MVC. Есть инструменты для управления правами пользователя, роутинг, модель работы с базой данных, мобильная версия для Айфонов и Андроидов. Планируем сделать API, конструктор сайтов. Отдельная фича, которая, можно сказать, у нас уникальна — это установка новых приложений. Они устанавливаются одним кликом (серьезно!): приложение загружается с сервера приложений, распаковывается, разворачивает таблицы в базе данных. Все автоматически. Для веба установка приложений таким образом встречается нечасто.

    Возможно, вы уже слышали о приложениях WebAsyst.ru и Shop-Script. Это тоже продукты нашей компании, но новый фреймворк полностью независим от них. Написан с нуля, не страдает болезнью сложного неуправляемого кода. Технологически со временем новый фреймворк полностью заменит все существующие приложения и Shop-Script.

    В планах у нас написать много полезных приложений и открыть магазин приложений, который будет работать по той же модели, что Android Market и iTunes App Store. Для разработчиков мы придумаем интересные условия сотрудничества и продажи приложений через наш магазин приложений.

    Адрес сайта фреймворка: www.webasyst.com

    Спасибо за конструктивную критику, отзывы и предложения.

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 47

      0
      Как минимум, достойно внимания.
      Попробовал поставить на локалке и первое что бросилось в глаза, не работает в каталогах вне localhost.
      Я поставил Webasyst в каталог localhost/webasyst и после установки, все пути всё равно ведут на localhost.
      Скажите, где это менять? Бегло пробежался по конфигам и не нашёл.
        0
        Судя по вашему описанию, фреймворк должен открываться по адресу localhost/webasyst/
        Когда заходите по этому адресу, должен происходить редирект в бекенд или на форму авторизации. Вас же редиректит в корень localhost?
          +1
          В подпапки ставится. Проблема скорее в названии этой папки webasyst.
          Попробуйте переименовать папку либо поменяйте УРЛ админки с webasyst (по умолчанию) на что-нибудь другое (для этого в файле wa-config/config.php надо добавить, например, 'backend_url' => 'admin')
            0
            Да, вы правы. Помогло.
            Очень специфичная проблема надо заметить.
              0
              Спасибо что нашли. Уже исправили.
                0
                Правда там админ панель после вашего совета загружалась но другие страницы выдавали белый экран.
                Проблему решил переустановкой в другую папку. Можете сами попробовать воссоздать проблему установив webasyst в папку webasyst.
                  0
                  Уже воспроизвели и поправили в последнем билде 1.0.0.5422. У меня локально теперь работает и админка открывается по урлу: localhost/webasyst/webasyst/
          +13
          ещё один… что нового то? опять mvc, роутинг, установка приложений с сервера… и притянутый за уши опенсорс
            +3
            wa-config что-то мне это напоминает.
            wp-config или совпадения случайны?
              +1
              Ну а куда же без префикса :)
              0
              Порадовал маленький общий размер и установщик.
                +1
                Достойно внимания. Когда планируется то в магазине обещанный рефакторинг сделать?
                  0
                  Новый Shop-Script будет в 2012 году и, естественно, на новой платформе. Посмотрев код и организацию фреймворка, вы уже можете примерно увидеть подход к тому, как будет построен новый магазин.
                    +1
                    Посмотрел код.
                    Чем-то напомнил yii (модели)
                    Довольно приятно читать.
                    Понравилось, что есть кучка всяких фишечек для css и примеров для html
                    Только вот не нашел, есть ли какой-то хелпер для вывода урла к модели. Например,
                    {url:blog, 111}
                    чтобы получалось /path/to/blog/222 исходя из правил роутера.

                    PS. Что-то мне подсказывает пока накопятся все нужные приблуды фреймворк уже не будет так мало весить…
                      0
                      надеюсь инсталяция модулей станет удобнее, а то клиенты негодуют :)
                    0
                    Планируется ли публичный репозиторий и/или баг-трекер?
                      0
                      Да, планируем сначала сделать открытый SVN. В качестве баг-трекера и предложений у нас есть аккаунт на Реформале (webasyst.reformal.ru), но и его потом тоже перенесем на сайт. Когда напишем его в качестве отдельного приложения.
                        +4
                        сделайте git-репозиторий или зеркало
                        +2
                        В github;
                          +1
                          Там же и пользоваться встроенным issue трекером :) Глядишь и pull-реквесты будут принимать.
                      0
                      Выглядит неплохо.
                      Радует хорошая документация.
                      Правда, иногда там встречаются такие абзацы, которые сложны для понимания:

                      www.webasyst.com/ru/framework/docs/application-guide/localisation/
                      Рекомендуется использовать в качестве ключей локализации строки на английском языке. При таком подходе приложение сразу получает рабочий вариант интерфейса на английском языке. Если в приложении будет (частично или полностью) отсутствовать перевод, то вместо вариант интерфейса на английском языке. Если в приложении будет (частично или полностью) отсутствовать перевод, то вместо на английском языке. Если в приложении будет (частично или полностью) отсутствовать перевод, то вместо будет (частично или полностью) отсутствовать перевод, то вместо переведённых строк в интерфейсе приложения будут использоваться их ключи на английском языке.
                        +1
                        Спасибо, исправили.
                          +1
                          На той же странице
                          // вернёт значение запись, записи либо записей в зависимости от значения $n согласно формуле в .po-файл


                          Ну и проскакивает иногда подобные фразы.

                          По поводу работы с базой.
                          плейсхолдеры это здорово и очень удобно. Скажите, они во всех методах будут работать?
                          Например тут в любой метод можно подсунуть плейсхолдер?
                          $model->select('id, name, datetime')
                                ->where('contact_id = '.(int)$contact_id)
                                ->order('DESC datetime')
                                ->fetchAll('id');
                          


                          А есть такой плейсхолдер, который подставляет значение без кавычек?
                          Например надо вставить значение null в базу данных:
                          $model->query("INSERT INTO ".$this->table." SET rand = ?:r", array('r' => rand(0,1)?1:null));
                          


                          В целом все выглядит очень интересно.
                          С удовольствием попробую ваш фреймоврк на досуге.
                            0
                            $model->query(«INSERT INTO ».$this->table." SET rand = :r", array('r' => rand(0,1)?1:null));
                            Значение null заменяется в запросе на NULL без кавычек.
                              0
                              Плейсхолдеры в модели пока работают только в методах query и exec.
                              В конструкторе запросов пока не реализовано, но запланировано.
                              В ближайшее время модель будет еще улучшена и сделана более удобной.
                                +1
                                null меняется на NULL — это хорошо
                                А если подсовывается mysql функция, например DATE()?

                                И ещё вопрос:
                                $model->insert($data);
                                


                                Вот здесь было бы удобно, чтобы в массив $data можно было в качестве значений подсовывать mysql функции.
                                В Zend Framework это реализовано как-то так:
                                $data = array('date'=> new Zend_Db_Expr('DATE()'));
                                
                                  0
                                  Ну можно что-нибудь аналогичное сделать, конечно. Но что мешает делать так:
                                  $model->query(«INSERT INTO ».$this->table." SET date = DATE(s:date)", array('date' => $date));
                                  ?
                                    +1
                                    Не, это понятно. Написать можно по разному.
                                    Но, вся прелесть как раз в том, что можно собирать запрос по кускам.

                                    В данном случае не обязательно именно функция DATE().
                                    Например, в зависимости от условий, надо вставить либо CURRENT_DATE() либо CURRENT_TIMESTAMP() либо вызвать хранимую процедуру. Но, в случае метода query\exec, это решается вводом нового плейсхолдера, тут делов на 5 минут.

                                    А вот по части удобства пользования методами insert, replace, updateById, в который передается ассоциативный массив. И вот было супер, если в таком массиве можно будет передать, что-то типа
                                    $user = array(
                                     'name'=>'Василий',
                                     'password'=> new waModelExp('MD5('$password')'),
                                     'registerDate'=>new waModelExp('CURRENT_TIMESATMP()')
                                    )
                                    


                                    Это ведь очень удобно.
                                      0
                                      Согласен.
                                      Реализуем в ближайшее время.
                          0
                          WebAsyst? Без денег? Под LGPL, значит я могу продать то что сделаю? С нормальной документацией? Шикарно! Я в восторге. Один вопрос — совместимость SS на этом фрейворке и текущим будет? Как быстро будет обрабатываться информация о багах или вопросы (дополнения) если их отправить на framework-ru@webasyst.com, или лучше дождаться баг-трекера?
                            0
                            Необходимость баг-трекера уже обсудили, и сделаем для этого отдельное приложение.
                            Но ждать его не надо. Пишите по почте (все запросы проходят через службу поддержки и перенаправляются разработчиками напрямую) или в Реформале webasyst.reformal.ru.
                            Будем стараться реагировать оперативно на любые вопросы.

                            Новый SS будет работать на основе фреймворка. Код и структура будут новые, не как в текущей версии. Совместимость со старыми версиями сделаем максимальной, насколько это возможно. Импорт всех данных точно будет. Открыт пока вопрос совместимости шаблонов дизайна. Полную совместимость дизайна, боюсь, сделать будет нельзя, но постараемся что-нибудь придумать.
                            +1
                            Что-то он мне очень сильно ZF напоминает, сорцы не смотрел, но примеры как по зенду документацию смотрю.
                              +1
                              к сожалению почти все банально.

                              А то что есть интересного заслуживает быть примененным в любом другом уже опробованном фреймворке.

                              деньги — правят миром :(
                                +1
                                Новые разработки – это всегда хорошо, могут появляться новые хорошие идеи.
                                Тем не менее не очень понятно, почему в основе не используется какое-либо общепринятое решение типа Zend Framework?
                                  0
                                  ZF довольно тяжёлый и нам бы в любом случае пришлось бы его модифицировать «под себя», соответственно возникли бы проблемы с обновлением ZF. Такая же ситуация с другими фреймворками.
                                  Плюс ко всему свой код намного легче допиливать/оптимизировать/улучшать. Поэтому и решили написать свой легкий, простой и гибкий фреймворк.
                                  –1
                                  круто :)
                                  любимый движек и еще фреймворк выпустили :)
                                    0
                                    > Рекомендуется использовать в качестве ключей локализации строки на английском языке.

                                    А потом появляется распространенная проблема, когда разные на русском языке слова, одинаковы на английском. Пример — слово «oder» — в локализации будет один вариант «order — заказ», а по-русски нужны слова «оформить заказ», «заказ», «заказать». И начинаются пляски с бубном и костыли.
                                      +1
                                      @session_start();


                                      Как же так?
                                        –1
                                        Я так понимаю, вы про @.
                                        Дело в том, что session_start() на некоторых виртуальных хостингах иногда выдаёт warning, но при этом сессия на самом деле стартует и всё работает. Этот варнинг ломает json да и не только, поэтому и поставили эту собачку.
                                        Предложите решение лучше, если знаете.
                                          0
                                          А текст ошибки есть?
                                        0
                                        В инсталляторе неплохо бы добавить создание базы
                                        Мелочь а приятно
                                          0
                                          Может я плохо искал, но все же. Авторизацию пользователей вообще никак нельзя отключить? Как то не совсем хорошо.
                                            0
                                            В бекенде — нельзя. У каждого приложения может быть фронтенд, который работает без авторизации. Скоро сделаем приложение «Сайт» для объединения фронтендов нескольких приложений.
                                            0
                                            файл wa-installer/lib/classes/wainstallerapps.class.php
                                            метод waInstallerApps::getCurl
                                            строка 517
                                            $options = array();//SystemSettings::get($options_fields);
                                            

                                            и далее пустой(!) массив $options используется для настроек прокси
                                              0
                                              Здравствуйте!

                                              У меня один из интернет-магазинов на WA, я не без интереса прочитал эту новость потому что был ВЫНУЖДЕН для него написать вторую админку т.к. переписывать в WA бизнес-логику, в тех местах, где она шла в разрез с тем что предлагалось стандартными инструментами было невыносимо муторно, неудобно и вообще бессмысленно. Итого я написал: адванцед версию почтовой рассылки с градацией ежедневно/2 раза в неделю/раз в неделю/раз в месяц, сделал удобную смотрелку остатков товара из базы списком и т.д. Сейчас начал вставать вопрос о кроссайтинге ибо без него уже совсем плохо. Я знаю что есть «изкаробочные» модули интеграции платежных систем, но насколько я помню — не для всего. Тоесть в принципе на мой взгляд вы правильно усмотрели тенденцию сделать фрэймворк, я к примеру очень люблю opencart за это, не потому что он представляет готовое решение, а потому что использую его как фрэймворк.

                                              Теперь пару вопросов:

                                              1) Сколько примерно будет стоить апгрейд c WA?

                                              2) Интересует мультимагазинность. То есть phpshop-style лицензионный ключ и прочая муть вообще не рассматривается. Я приобрел лицензию и это мои трудности на какой домен разворачивать, на сколько доменов разворачивать и т.д. Т.е. я хочу сказать что в плане мультимагазинности, если встанет вопрос приобретения мультимагазинной лицензии я готов рассматривать предложение с органичением n-витрин, но ОДНА база, а не 2-3-4-5-10 витрин на ключ.

                                              3) А насколько фрэймворк готов чтобы я вот завтра его взял, поставил и начал делать на нем проект одной конторе, которой нужно просто прайс-лист в энторнетах с админкой. Тоесть корзины, заказы и прочее их не интересуют на данном этапе?

                                              Заранее спасибо!

                                              P.S. А вообще я очень хорошего мнения о продукте WA и Shop-Script потому что на самом деле это один из не многих продуктов, который шел в ногу со временем в плане цены/функционала/удобства. И мне кажется фрэймворк это именно то, что надо. Ну может вы чуть опоздали потому как в codeigniter есть cart в последних версиях, но как говорится вовремя поднятое не считается уроненым. Надеюсь ваш опыт создания продуктов именно для e-коммерции позволит сделать самый лучший фрэймворк именно для типовых задач магазиностроения.

                                              Only users with full accounts can post comments. Log in, please.