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

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

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 30 декабря 2008 в 20:11

Добрый день!

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

Имеется тип содержимого «матч» и тип содержимого «футболист».
Нужно дать возможность при создании/редактировании «матча» добавлять 11-18 футболистов, причём каждому из футболистов назначать номер и указывать минуту (минуты?), на которой он забивал гол (голы?). Я никак не могу понять, каким образом мне организовать хранение таких данных и их представление в форме. Возможно, стоит использовать для хранения id ноды каждого футболиста и информации о его номере, минутах с забитыми мячами, карточками ассоциативный массив? Насколько было бы правильным такое решение? Как правильно с точки зрения Друпал его реализовать? (Я встречал в книге по Друпал упоминание какой-то функции, которая разбирает массив на строчку для удобства хранения, и парной ей функции для сборки массива обратно, но не могу вспомнить, как эти функции назывались и как именно они работают).

Помогите, пожалуйста, советом.

Комментарии

Аватар пользователя gor gor 30 декабря 2008 в 21:05

Сделать "Футболист" отдельным типом. Номер можно через CCK поле или сделать отдельную таблицу в которой связывать id футболиста с номером.

Для "Матч" создать таблицу отдельную (см документацию как) в ней сделать привязку соответствий id матча и id футболиста.
При создании матча - сделайте форму для вбивания ID футболистов, оптимально через AHAH с автодополнением .
Про минуты - так же дополнительная таблица с ID матча ID футболиста и временем когда был забит гол. и также дополнительная форма.

Это в общем все расписано, искать как писать определение автодополняемых полей как туда засовывать данные , как делать AHAH таблицу наподобии как в upload форме - вам прийдется поискать самостоятельно.

В целом тут работы (если через написание модуля назовем его football) часа на 4ре. При наличии опыта конечно и знания что надо писать.

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 30 декабря 2008 в 21:12

"gor" wrote:
Сделать "Футболист" отдельным типом. Номер можно через CCK поле или сделать отдельную таблицу в которой связывать id футболиста с номером.

Сорри. Ввёл я Вас в заблуждение, опечатавшись... Тип содержимого и для матча, и для футболистов уже есть.

Спасибо. Буду думать -)

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 30 декабря 2008 в 22:13

gor
Спасибо. Значит всё-таки таблицы, как я и рассчитывал...
1. Если я правильно понимаю, структура этих новых таблиц (при условии, что уже есть типы содержимого для матчей и игроков) должна быть следующей:
match_players: mid (match id) INT, pid (player id) INT, pnum (player number) TINYINT, in (player in) TINYINT, out (player out) TINYINT
match_goals: mid (match id) INT, pid (player id) INT, min (minute) TINYINT, og (own goal) TINYINT
match_cards: mid (match id) INT, pid (player id) INT, min (minute) TINYINT, red (red card) TINYINT

2. А этот AHAH позволяет связывать с только что выбранным из выпадающего списка игроком минуту, на которой он вышел/ушёл? А то я не в курсе возможностей этой технологии, а перегружать страницу после указания имён, чтобы добавлять замены/голы как-то не хочется.

Опыта в Друпал у меня пока нет, знаний, что надо писать, тоже маловато, но я думаю, что научусь -)

Аватар пользователя gor gor 31 декабря 2008 в 0:49

в целом да, приблизительно похоже, но player number я бы вынес в таблицу игрока, так как обычно игроки выступают под одним и тем же номером.
Еще стоит учесть что игрок на поле может быть выпущен 2 раза.
поповоду AHAH - он позволяет загружать контент на страницу в определеный div по определеным событиям. Что касается как связать обработать - это уже ваше личное решение (и соответсвенно ваш код).

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 31 декабря 2008 в 1:28

1. Номер игрока может меняться год от года, поэтому нужно прописывать, под каким он играл в этом матче и, соответственно, году.
2. Игрок не может выйти на поле два раза в одном матче. Он может выйти на замену, а потом уйти.
3. Спасибо. Придётся напрячься и почитать, кто как решает похожие вопросы -)

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 3 января 2009 в 15:47

gor
А не знаете ли Вы примеров в Сети, которые можно посмотреть, чтобы научиться использовать AHAH в Drupal? Я пошукал с помощью поиска, но как-то всё не то -\

Аватар пользователя penexe penexe 3 января 2009 в 17:18

"<a href="mailto:ingumsky@drupal.org">ingumsky@drupal.org</a>" wrote:
А не знаете ли Вы примеров в Сети, которые можно посмотреть, чтобы научиться использовать AHAH в Drupal? Я пошукал с помощью поиска, но как-то всё не то -\

http://api.drupal.org/api/file/developer/topics/forms_api_reference.html...
http://drupalsn.com/learn-drupal/drupal-tutorials/getting-going-ahah-and... (там внизу еще ссылки)

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 3 января 2009 в 17:52

penexe
Большое спасибо. Буду разбираться, хотя после новогодних праздников пока не соображает голова — сегодня еле-еле исправил элементарную ошибку в своём первом модуле для Друпал -)