Опыт использования и допиливания модуля спортивной статистики (футбольной)

Главные вкладки

Аватар пользователя real_stranger real_stranger 29 сентября 2010 в 9:30

Здравствуйте!

Хочу представить вам статью, которую я написал после опыта использования модуля LeagueSite модуль. Это относительно новый модуль спортивной статистики. Идея о написании родилась по ходу работы над проектом, захотелось донести до Drupal общественности полезную инфу о выборе подобного модуля. В статье я попытался описать все стороны прикручивания этого модуля к проекту, а также описал основные возможности и средства, которыми всё было осуществлено. Сейчас статья в песочнице Хабра потому как аккаунта нет. Если будет интересно и нужно, то сделаю перепост сюда, если конечно не получу инвайт на хабре))

http://habrahabr.ru/sandbox/18967/

UPD, в общем решил сюда перенести, плюс дополню на днях по просьбам

Здравствуйте! Из всего многообразия модулей созданных для Drupal есть не более десяти, посвящённых спортивным соревнованиям. Это странно, потому что сайтов, посвящённых разным видам спорта, довольно много. Мне самому пришлось столкнуться с дефицитом подобных модулей. Последним проектом, над котором я работал, был eurofootball.ru.



В ТЗ заказчик запросил модули новостной ленты, блогов, статей из ежемесячного журнала и еженедельной газеты, ну, и, самое главное, статистику по основным европейским чемпионатам. Всё, кроме последнего, было легко реализовано функционалом самой сms. Также я использовал несколько довольно известных модулей, таких как Advertisement для блока с рандомно-сменяющимися обложками журнала и газеты, Advanced Poll для возможности анонимного голосования с одного ip раз в 24 часа. Ну и стандартный набор Views, ImageCache, Panels, Content Construction Kit (CCK).



Для самой главной задачи — футбольной статистики — я долго искал подходящий модуль, пробовал clubindex, Results, Sports Club Management. Они не подошли либо из-за недостаточной функциональности, либо нужно было ставить столько зависимых модулей Sports Club Management), что опускались руки. В итоге выбор пал на LeagueSite модуль. Версия модуля была alpha 1 или 2, честно говоря, уже не помню, но было понятно, что, во-первых, предстоит покопаться в коде, а во-вторых, ждать развития модуля. Повезло, что автор модуля, Alun, шёл на контакт с энтузиазмом.



В первые пару недель я настроил модуль, перевёл всё необходимое на русский. На тот момент была возможность создания нескольких лиг, возможность занесения новых результатов, жутко тормозная админка матчей (мне нужно было одновременно админить с десяток лиг, а это порядка 600 команд, и матчи каждой из них выводились сразу, а уж потом можно было отфильтровать). Составов и, соответственно, статистики игроков не было, а заказчику нужен был реузльтат. Также не было некоторых других мелочей, вроде логотипов команд, информации о командах (вроде тренера и города из которого была команда), нормальной таблицы. Мелочи быстро сделал, страница команды стала выглядеть так:







Ну, а страница лиги так:







Здесь можно увидеть лого команды (кликабельно), родной город команды, название (кликабельно).

Я решил реализовать всё это стандартным набором модулей. Создал тип материала «Игрок». Связал его по node reference с «Командой». Наполнил игроками все основные команды.



После этого нужно было вывести текущие матчи, анонс и таблицы по каждой из лиг в блоки в правой части сайта. Всё сделал с помощью Views, единственное, пришлось немного пошаманить над видом вывода матча, в оригинале модуля было так "Команда 1 — Команда 0", это не очень здорово. Сделал так:







После этого принялся за Календарь. Здесь опять же использовал Views плюс Panels, но эта часть получилась очень «тяжёлой» (очень много запросов к БД).

К тому времени автор модуля продвинулся ещё и сам сделал добавление игрков, однако, прикрутить обновление себе я уже не мог, слишком много было сделано. Объеденить наши усилия возможности тоже не было. Прошла новая волна переговоров с автором модуля. За это время сделал более приятный вывод статистики матча (посмотрите здесь на матч 10 тур, 10 мая 2010 г., Амкар — Зенит). Добавил вывод статистики по каждому игроку, время на поле, забитые мячи, красные и жёлтые карточки.

Ну, и осталась последняя часть, это вывод статистики по отдельным игрокам, рейтинг бомбардиров и т.п. Вот здесь я застопорился… Пытался опять же по node reference завязать, но так и не понял каким должен быть правильный запрос к бд, чтобы собиралась и складывалась статистика по игроку, например общее количество мячей.

К сожалению, возникли непредвиденные проблемы и заказчик принял решение прекратить развитие проекта. Сейчас, как видите, идёт только обновление новостной ленты...

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



Выводы:

-Действительно подходящего и готового модуля нет, всегда нужно «допиливать», само собой это не касается стандартных модулей

-На стадии переговоров необходимо обсудить все грани работы, постараться дать чёткие сроки, либо объяснить от чего они зависят

-Важно изначально правильно оценить свои возможности, в процессе «подучиться» не получится

 

Если тема окажется интересной, буду рад ответить на все ваши вопросы)

Спасибо за внимание.

С уважением,
Сергей

Комментарии

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 29 сентября 2010 в 14:23

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

В настоящее время у нас на Liverbird.ru есть результаты всех матчей клуба за всю историю и профили всех игроков, но некоторые вещи мы так и не реализовали. Например, и по сей день у нас нет таблицы текущего первенства, что регулярно вызывает недоумение пользователей. Но так как сайт является совершенно некоммерческим и делается на голом энтузиазме мной, я всегда имею возможность ответить пользователям, что это будет сделано тогда, когда будет время Smile

Аватар пользователя staryi@drupal.org staryi@drupal.org 1 октября 2010 в 17:08

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

Аватар пользователя real_stranger real_stranger 22 октября 2010 в 11:22

Почему же нет, он рабочий, вопрос в необходимом функционале...Если нужна ПОЛНАЯ статистика то да, не работает, но если нужны составы, статистика матчей, всё это есть, нет статистики по отдельным игрокам.

Аватар пользователя staryi@drupal.org staryi@drupal.org 26 октября 2010 в 14:08

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

Аватар пользователя Zidan Zidan 6 ноября 2010 в 21:22

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

Аватар пользователя msmart msmart 17 января 2011 в 17:51

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

Аватар пользователя msmart msmart 17 января 2011 в 19:56

я так понимаю, что победы-ничьи-поражения берутся из leaguesite?
и соответственно затем данные с помощью views в табличной форме выводятся?
просто у меня задача следующая:
чемпионат состоит из туров (тип контента), в каждом туре определенные игроки (тип контента) занимают определенные места (поля тура).
подобная схема чем-то напоминает соревнования в Формуле-1.
задача - определить сколько раз каждый игрок занимал определенные места (дабы потом посчитать кол-во очков в чемпионате). ковыряясь в модуле leaguesite, пришел к выводу, что наверно этот модуль не для моей задачи и проще оперировать с ComputedField (определяя через db_query например количество первых, вторых и тд. мест). Тогда встает вопрос о том, как хранить эти данные - делать таблицу в базе или создавать поля у игроков на каждый сезон...
К сожалению, мои знания пока не идеальны, и надеялся путем понимания сходного материала (вашей статьи) открыть для себя новые подходы для решения своей задачи.

Аватар пользователя daggerak daggerak 11 марта 2011 в 15:10

Ув. Сергей!
Я в друпал новичок и хотел бы попросить Вас расписать более подробно,
как сделать турнирную таблицу и блоки типа следующий и предыдущий матч.
Если Вас, конечно это не затруднит.
Заранее благодарен!

Аватар пользователя staryi staryi 26 декабря 2011 в 10:44

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