On March 26, 2019 we launched new MODX Forums. Please join us at the new MODX Community Forums.
Subscribe: RSS
  • Всем привет!
    На днях запустил бетброкерский сайт http://betbroker.ru/.

    Довольно интересный проект, тк это уже не обычный сайт-визитка, а почти полноценное веб-приложение.
    Совершенно не хочу рекламировать сайт, тк к ставкам отношусь ровно, а хочу поделиться историей разработки и опытом, который приобрел пока разрабатывал этот проект

    Не знаю, с чего начать рассказ. Поэтому картинка для затравки))



    Сразу скажу дальше идет много текста. Все картинки - в самом низу.

    Для начала кратко поясню, что такое «бетброкерская система».
    Это такая система, где посетитель может получать(бесплатно или за плату) прогнозы на различные спортивные (и не только спортивные) события. И основываясь на этих прогнозах делать ставки в букмекерских конторах.
    Чем чаще прогнозист (бетброкер) угадывает с прогнозом, тем выше его рейтинг и больше доверия к нему. То есть: если поставить ставку на спорт по прогнозу бетброкера с рейтингом 90%, то есть большая вероятность того, что ставка сыграет.

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

    Когда встал вопрос как реализовывать менеджерскую часть, пришлось решить проблему с работой с ресурсами не из-под админки MODx’а, а как-нибудь из фронтенда.
    Для этого решено было использовать связку Eform и docmanager (так сейчас все и работает). И кстати разобрался с загрузкой файлов через эту связку.
    Сразу скажу — хотел сделать работу с ресурсами на AJAX’e, но во-первых: к моменту разработки не смог привязать Eform к AJAX’у. А во-вторых: не смог разобраться с аяксом))))
    Теперь я могу точно сказать, как сделать аяксовое добавление данных из формы:
    1. Делаем обычную форму. Причем делаем ее не в чанке, а в ресурсе.
    2. Аяксом вызываем форму из ресурса (это проще, чем кажется))))
    Для этого делаем отдельный сниппет. Причем желательно такой, чтобы он мог выдавать формы из любых ресурсв. Попросту говоря — универсальный
    3. После заполнения формы отправляем ее аяксом в другой сниппет — принимающий, который с помощью docmanager’a записывает данные из нее куда нам надо.

    Кстати, насчет аякса. Почти все сниппеты (кроме тех, в которых используются формы — типа EForm и WebLoginPE) работают на ура через runSnippet в сниппетах -бэкенда для аякса. И сама реализация довольно простая. Но сначала надо разобраться немного))
    Еще очень хорошая вещь — JSon — отправляем данные аяксом с сервера в виде массива (простым языком). Советую разобраться со связкой JQuery-AJAX-JSON-PHP.

    С аяксом пришлось очень серьезно разобраться, когда пришло время работать с селектами в формах. Например — в селете выбирается вид спорта, а во второй селект должны загрузиться все чемпионаты по этому виду спорта.
    В инете есть хорошая статья на эту тему, не касательно MODx’а, но разобраться можно на раз. Ссылку сейчас не найду уже, но смысл такой:
    1. Отслеживаем яваскриптом (JQuery — это вообще палка-выручалка) выбранный опшн:
    у меня в аттрибуте «value» опшнов хранятся ID соотв. ресурсов (стран, видов спорта и тд.)
    2. Далее аяксом отправляем это значение в сниппет, там ищем все ресурсы с этим родителем и тут два варианта возможны — сразу же на сервере формируем набор опшнов и отправляем обратно, либо же загоняем в массив пару «id-pagetitle» и отправляем(естественно упаковав JSon’ом) клиенту. И уже у клиента с помощью JQuery формируем и вставляем опшны куда надо.
    У меня и тот и тот вариант реализованы.

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

    Еще аякс + JQuery — таймеры прогнозов. Обходим каждый прогноз, меняем значения таймеров(с этим я намучался вообще) и если матч уже начался — аяксом отправляем запрос на сервер и получаем прогноз. Дополнительно реализовал защиту от подмены времени — если подсунуть скрипту время отличное от времени начала матча — будет сообщение о несанкционированном доступе, тк на сервере проверяем полученную от клиента дату с датой начала матча, взятую из базы.

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

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

    Как я реализовал филтры:
    1. Сделал сниппет создания формы. Он нужен для того, чтобы создавать и отдавать клиенту форму с селектами в которых отмечены нужные поля.
    Поясню — например я выбрал какой-либо спорт, в соответствии этому спорту в селекте чемпионатов загрузились чемпионаты по этому спорту. При отправке формы на сервер я бы хотел получить ее обратно с теми же выбранными селектами (это вот как раз второй вариант создания опшнов)
    В сниппете я делаю выборку нужных данных при формировании набора опшнов и если очередное значение равно текущему, полученому из формы — меняю плэйсхолдер в опшене. А плэйсхолдеры такие: пустой: "" и «selected=selected»
    Таким образом получаю набор опшнов в котором текуший вбран.
    2. Делаю сниппет фильтрации:
    Исходя из того, какие значения пришли от клиента — формирую строку «WHERE» для SQL запроса. Далее подставляю эту строку в запрос и получаю выборку ID прогнозов соответственно критериям фильтра.
    3. Далей из этой выборки формирую строку и подставляю ее в парметр ’documents’ при вызове Дитто из сниппета филтра и получаю все документы.
    Можно конечно обойтись и без Дитто, но самому было очень лень писать замену плэйсхолдеров. А тут и дитто делает сам)

    Также не хотелось заморачиваться с Tv. Так как приходилось бы делать запросы в запросах. А так у меня все необходимые значения ресурсов хранятся в неиспользуемых полях))) Схитрил

    Пока пожалуй все, но рассказать можно еще очень много.
    Если есть вопросы — задавайте, с удовольствием отвечу.
    Коды и примеры не выкладываю специально. Если есть конкретный вопрос по исходникам и реализации тех или иных моментов - спрашивайте.

    Все вопросы об экономической целесообразности проекта — не ко мне.

    Все упреки по поводу незавершенности сайта (отсутствие описания, разделов «О нас», контактов и тд) тоже не ко мне. В рамках соглашений я свою работу сделал

    Время разработки — 1,5 месяца. Стоимость… кстати хотел бы вас спросить — сколько может стоить такой проект?)))

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

    Дизайн мой, все иконки кроме иконок спорта и флагов — мои.



































    • Quote from: sergeiforward at May 25, 2011, 06:41 AM

      Время разработки — 1,5 месяца. Стоимость… кстати хотел бы вас спросить — сколько может стоить такой проект?
      Важнее не общее время, а количество потраченных человеко-часов. Если считать нормальную офисную работу с выходными и отпусками, то в среднем в месяц получается 150 часов, но в действительности возможны значительные отклонения в обе стороны. Согласно вакансиям на JOB.RU PHP-программисту предлагается от 15 до 100 тысяч рублей в месяц, берем где-то среднее – 50000 (это самый спорный момент всех рассуждений), то есть около 1750 долларов, а за полтора месяца 2625 долларов, причем работать при этом надо было 225 часов, примерно по 11-12 долларов в час. Если трудозатраты в часах другие, соответственно и оплата другая.

      Все это теория, и совсем не значит, что, например, лично я оцениваю данную работу именно в такую сумму. Просто написал о том, как можно оценивать стоимость работ.
        Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
        Статьи о MODx, регулярно новые публикации
      • Все это теория, и совсем не значит, что, например, лично я оцениваю данную работу именно в такую сумму. Просто написал о том, как можно оценивать стоимость работ.
        В целом все правильно.
        Тогда другой вопрос - за какое время разработчик среднего уровня должен делать такие проекты?