Связь между нодами

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

Аватар пользователя molp molp 15 января 2016 в 14:08

Задача на первый взгляд кажется довольно простой, но я так и не смог найти решения. Очень прошу подсказать.

  1. Пользователь создает ноду - команда
  2. Автор ноды может запросить у автора другой ноды, установить связь между их нодами - вызвать другую команду на поединок
  3. После принятия запроса, между нодами устанавливается связь - соревнования

p.s.: В качестве команды обязательно должна быть нода. Нода в данном случае - это группа, созданная при помощи модуля OG. В группы могут вступать пользователи - игроки

Комментарии

Аватар пользователя molp molp 31 января 2016 в 14:19

Lotar wrote:

А ноде референс не катит?Если дать права на выбор референса юзеру?


Тут важно сохранить простой интерфейс аля выслал приглашение, его приняли или отклонили.
С References не совсем понимаю как такое сделать.

Аватар пользователя molp molp 31 января 2016 в 14:20

Director cemetery wrote:

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


Я уже понял что ошибка на стадии проектирования, но вроде условие описано подробно. Почему бы не подсказать?

Аватар пользователя Studio VIZA Studio VIZA 31 января 2016 в 14:54

molp wrote:

Почему бы не подсказать?

В теле поста, за короткий промежуток, слово "нода" упомянуто 7 раз. Заметил, когда я пытаюсь у людей узнать, что они понимают под этим словом, начинается невразумительное мычание.

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

Аватар пользователя molp molp 31 января 2016 в 23:48

Director cemetery wrote:

Заметил, когда я пытаюсь у людей узнать, что они понимают под этим словом, начинается невразумительное мычание.
Само понятие нода в Друпале несколько эфемерно, нечто может быть нодой, а нечто может ей стать.


Ну меня то никто не спрашивал что я понимаю под нодой. А если бы спросили, я бы "промычал", что это базовый тип от которого порождены все другие типы контента. В моем случае - это запись типа содержимого team, создаваемая тут node/add/team, имеющая поля title и body.

Почему нода? Потому что так работает Organic groups

ТЗ можно описать парой предложений.

  1. Я создаю команду, набираю игроков, затем предлагаю другой команде соревноваться.
  2. Соревнование должно содержать информацию о командах и их игроках.

Команды успешно создаются при помощи Organic groups, а вот соревнования даже не знаю. Может устанавливать при помощи User Relationships между администраторами групп?

Аватар пользователя molp molp 1 февраля 2016 в 1:14

Director cemetery wrote:

Вьюха с таблицей, поля, сортировку и критерии по ходу дела.
Вроде футбольной статистики.


Можно чуть подробнее, как одна команда вызовет другую на соревнование и какой сущностью будет их связь?
Как связать две группы с функционалом "вызвать на соревнование"/"отклонить предложение"/"принять предложение"?

Аватар пользователя molp molp 1 февраля 2016 в 14:08

molp wrote:

Команды успешно создаются при помощи  Organic groups, а вот соревнования даже не знаю. Может устанавливать при помощи  User Relationships между администраторами групп?

Связь между администраторами групп при помощи User Relationships не годиться, так как групп у пользователя может быть много. Нужно объединить конкретные группы в соревнование.

Аватар пользователя ASomeoneD ASomeoneD 1 февраля 2016 в 8:16

Тебе необходима еще одна "нода" типа соревнование. Где будет 2 поля node reference(с типом комнда): вызывающая команда и соперник- поле флаг (для отработки принятия вызова) либо поле список (состояние соревнования), или комбинацию списка и флага, также можно добавить поля дата соревнования результаты, фотоотчет, голосования, рейтинг, комментарии, чат, да что угодно: хоть видео трансляцию. Далее дело за UI и GUI. Нужно написать модуль где необходимо либо реализовать свою форму вызова на соревнования (например форма в блок, блок на странице команды), либо дополнить форму добавления это самой "ноды" типа соревнования, где первое поле будет заполнятся в зависимости от юзера (логику строить нужно самому, я не знаю как организованны группы, может вызвать может только админ, а у админа только одна группа тогда только передать, а может несколько групп тогда нужно список передать), а поле соперника взять из аргументов (get post все равно) например из views команд. Далее добавить rules на добавление "ноды" типа соревнования оповещение соперника (личные сообщения по почте все равно). Далее добавить rules на флаг или список. (оповещение вызывающего). Далее нужно настроить view команд и view соревнований (несколько дисплеев мои соревнования все соревнования, сыгранные, грядущие) Организовать в данном view вывод команд, кучу других приятностей (чаты комменты голосования ).
Ведь все просто? не так ли? Логика и структура должна исходить из целей проекта. если цель проекта было организовывать команды и чатиьтся между собой то изначально было все задумано правильно.

Аватар пользователя molp molp 1 февраля 2016 в 14:08

ASomeoneD wrote:

Тебе необходима еще одна "нода" типа соревнование. Где будет 2 поля node reference(с типом комнда): вызывающая команда и соперник- поле флаг (для отработки принятия вызова) либо поле список (состояние соревнования), или комбинацию списка и флага...


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

p.s.: Хочу заранее поинтересоваться сколько будет стоить написание такого модуля? Потому что чувствую, что пока буду сам писать, уже придет время на drupal8 переходить.

Аватар пользователя ASomeoneD ASomeoneD 2 февраля 2016 в 7:23

Кто сказал что нужно писать свой модуль? Это же Drupal. Тут либо готовая сборка целиком (наверняка есть платные сборки турниров, реализация и команд и соревнований), либо построение своей логики: задач, которые можно решить своими модулями или уже готовыми. Так как у тебя уже есть часть проекта то готовая сборка отменяется. Потому нужно строить логику целиком и смотреть задачи. Например я писал выше про node reference, у него есть готовые виджеты и форматеры, нужно понято что и как ты хочешь. Например виджет Node Reference URL Widget (модулем не пользовался, написал в пример можно поискать и альтернативы). Во вьевс списка команд на вызов добавляем нужную ссылку и готово - вызов соперника есть. Первое поле(вызывающий) можно заполнить в настройке виджета из коробки (можно настроить вьевс для этого поля с фильтром по юзеру и выбрать его для организации списка виджета) и готово - вызывающий тоже реализован. Rules тоже имеет много модулей для работы с флагами, надо гуглить по задачам, а не по цели. Оповещение о вызове там кода мининмум для Rules (событие добавление материала, письмо на почту юзеру создавшему ноду указанную в соперниках, тело письма вариации токенов)

Аватар пользователя Studio VIZA Studio VIZA 2 февраля 2016 в 9:34

ASomeoneD wrote:

Тут либо готовая сборка целиком

+

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

Аватар пользователя molp molp 2 февраля 2016 в 13:18

Думаю должно получиться, тем более что задача сильно упростилась:

  • Одновременно можно либо создать свою группу либо вступить в существующую
  • Создавать можно только одну группу и вступать соответственно тоже только в одну

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