Управляемый данными крошка, основанная на иерархических (родительско-дочерних) данных

0

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

Данные хранятся с помощью MariaDB и выглядят следующим образом:

parent_id | parent_name | child_id | child_name
———————————————————————————————————————————————
    1     |     AAA     |    101   |    aaa
    1     |     Aaa     |    102   |    bbb
    1     |     Aaa     |    103   |    ccc
   101    |     aaa     |   1001   |   aaaa
   101    |     aaa     |   1002   |   bbbb
   102    |     bbb     |   1004   |   cccc
   102    |     bbb     |   1005   |   dddd    
    2     |     Bbb     |    104   |    ddd 

Если я выберет let say record с id = '1005', я хочу, чтобы моя пачка выглядела как 1/102/1005
Эквивалентный HTML:

<div id="breadcrumb">
    <ul class="breadcrumb">
        <li><a href="#">1</a></li>
        <li><a href="#">102</a></li>
        <li>1005</li>
    </ul>
</div>

Альтернативно, выбирая

  • "1002" обновляет пачку до 1/101/1002
  • "104" обновляет пачку до 2/104
  • ...
  • 1
    пока все, что у нас есть, это заявление о намерениях, но нет кода, который пытается решить проблему. Пожалуйста, добавьте код, который вы пробовали, и объясните, что происходит / неправильно
Теги:
d3.js
mariadb

1 ответ

0
Лучший ответ

Я нашел решение для моего вопроса.

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

    id  |     name    |   lft    |   rgt
—————————————————————————————————————————————
     1  |     AAA     |     1    |    16
   101  |     aaa     |     2    |     7
  1001  |     aaaa    |     3    |     4
  1002  |     bbbb    |     5    |     6
   102  |     bbb     |     8    |    13
  1004  |     cccc    |     9    |    10
  1005  |     dddd    |    11    |    12
   103  |     ccc     |    14    |    15
     2  |     BBB     |    17    |    20
   104  |     ddd     |    18    |    19

Затем, используя php, я могу легко извлечь данные из таблицы почти в правильном формате с помощью следующего SQL-оператора (где "$ id" - это переменная и в зависимости от выбора пользователя, как упоминалось ранее):

SELECT parent.id, parent.name
FROM
  table AS node,
  table AS parent
WHERE
  node.lft BETWEEN parent.lft AND parent.rgt
AND
  node.id = '$id'
ORDER BY
  parent.lft;

Наконец, используя d3.js, я могу использовать следующий код для создания HTML:

d3.json('php/breadcrumb.php?id=' + id).get(function(error, d_breadcrumb) {

  var ul = d3.select('#breadcrumb').append('ul')
    .attr('class', 'breadcrumb');

  ul.selectAll('li')
    .data(d_breadcrumb)
    .enter()
    .append('li')
      .append('a')
        .attr('href', function(d) {
          return '?id=' + d.id;
        })
        .text(function(d) {
          return d.name;
        })
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню