За последние 24 часа нас посетили 58059 программистов и 1848 роботов. Сейчас ищут 1073 программиста ...

Построение турнирной сетки

Тема в разделе "Прочие вопросы по PHP", создана пользователем Antistar, 16 мар 2015.

Статус темы:
Закрыта.
  1. Antistar

    Antistar Новичок

    С нами с:
    16 мар 2015
    Сообщения:
    7
    Симпатии:
    0
    Необходимо реализовать турнирную сетку. Делаю я её на основе бинарного дерева. Всё было отлично до того момента, пока я не начал его выводить. Дерево обхожу рекурсивно
    Код (Text):
    1.  
    2.     function showbracket($node,$ur){
    3.         echo '<div class="row"><div class="col-md-offset-'.$ur.' col-md-1"><div class="alert alert-success">'.$node[0]['tid1'].' VS '.$node[0]['tid2'].'</div></div></div>';
    4.         if($node[0]['left']!='' and $node[0]['right']!=''){
    5.             showbracket(findnode($node[0]['left']),$ur-1);
    6.             showbracket(findnode($node[0]['right']),$ur-1);
    7.         }
    8.     }
    в общем выводит так
    [​IMG]

    в первой колонке четвертьфиналы, во второй полу, и в третьей финал.
    По колонкам всё верно, но не верно по высоте каждого матча. Всё логично, ведь они отрисовываются так, как их обходит рекурсия. Вот и надо как-то придумать чтобы это выглядело как сетка.
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    У вас проблема в том, что по Y позиционирование не правильное? Просто смещение по Y на -1 домножьте.
     
  3. Antistar

    Antistar Новичок

    С нами с:
    16 мар 2015
    Сообщения:
    7
    Симпатии:
    0
    Код (Text):
    1. <div class="row">
    вот всё моё смещение, эта вся штука свёрстана на бутстрапе.
    в нём есть грид-система, которая имеет 12 колонок. А вот строчек сколько хочешь. И как мне задать что эта строка должна быть после вот той, до которой ещё не дошла рекурсия?
     
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Напишите свой CSS-класс, не? Надо дождаться кого-нибудь вроде igordata, кто на бутсе верстает.
     
  5. Antistar

    Antistar Новичок

    С нами с:
    16 мар 2015
    Сообщения:
    7
    Симпатии:
    0
    можно написать, но я как-то вяло представляю его структуру
     
  6. Antistar

    Antistar Новичок

    С нами с:
    16 мар 2015
    Сообщения:
    7
    Симпатии:
    0
    Кароч надо как-то пределять ещё и вертикальное смещение, но я вот что-то никак немогу придумать как это организовать.
     
  7. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Каждому элементу пропиши смещение в стайле прямо в теге. Смещение равно -(размер смещения)*глубину дерева. Как-то так.
     
  8. Antistar

    Antistar Новичок

    С нами с:
    16 мар 2015
    Сообщения:
    7
    Симпатии:
    0
    Хотя бы шаблончик, а то совсем под вечер туплю
    Код (Text):
    1. showbracket(findnode($node[0]['right']),$ur-1);
    в эту функцию нужно ещё передать смещение по игрику, если по вашем, то получится фигня.
    что-то вроде
    Код (Text):
    1. showbracket(findnode($node[0]['right']),$ur-1,100px * $ur);
    дерево то и вниз идёт, на нижнюю ветку другое смещение
     
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Тогда пусть каждый новый уровень наследует по половине координаты от родителей. Включайте фантазию.
     
  10. Antistar

    Antistar Новичок

    С нами с:
    16 мар 2015
    Сообщения:
    7
    Симпатии:
    0
    Беда-беда. Плакала моя адаптивность.
     
  11. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  12. Antistar

    Antistar Новичок

    С нами с:
    16 мар 2015
    Сообщения:
    7
    Симпатии:
    0
    Если хочешь сделать что-то хорошо - сделай это сам.
    Код (Text):
    1.     function showbracket($node,$ur){
    2.         if($node[0]['left']!=''){
    3.             showbracket(findnode($node[0]['left']),$ur-1);
    4.         }
    5.         echo '<div class="row"><div class="col-md-offset-'.$ur.' col-md-1"><div class="alert alert-success">'.$node[0]['tid1'].' VS '.$node[0]['tid2'].'</div></div></div>';
    6.         if($node[0]['right']!=''){
    7.             showbracket(findnode($node[0]['right']),$ur-1);
    8.         }
    9.  
    10.     }
    [​IMG]

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

    тему можно закрывать.
     
  13. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Мои поздравления.
     
Статус темы:
Закрыта.