Как построить дерево навигации?
Вложений: 3
Как построить дерево навигации?
Можно ли это решить в рамках node.js или нужно использовать что-то ещё? Логика. - запускается страница; - слева строится дерево; - если узел содержит дочерние элементы, то узел можно сворачивать, разворачивать; Источник данных меню - БД MySql. В будущем планируется: - пользователь кликает по меню; - справа появляется статья соответствующая узлу меню. Статья отображается без перезагрузки всей страницы. Т.е. после клика по меню, обновляется только фрагмент страницы, где располагается статья. Примечание. Node.js изучаю. Имею минимальный опыт C# ASP.NET, MVC. create_db-2.sql Код:
REATE DATABASE socka; home.controller.js const fs = require('fs'); exports.getHomePage = (req, res) => { let query = "SELECT * FROM `articles` ORDER BY id ASC"; // query database to get all the articles // execute query db.query(query, (err, result) => { if (err) { res.redirect('/'); } res.render('index.ejs', { title: "Welcome to DB", articles: result }); }); }; index.ejs <!doctype html> <html lang="ru"> <head> <!-- Кодировка веб-страницы --> <meta charset="utf-8"> <!-- Настройка viewport --> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>...</title> <!-- Bootstrap CSS (jsDelivr CDN) --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous"> <!-- Bootstrap Bundle JS (jsDelivr CDN) --> <!-- <script defer src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script> --> </head> <!-- <body> --> <body> <!-- class="container" --> <div class="container"> <!-- div --> <div class="border border-success border-3 p-2 vh-100 d-flex flex-column"> <!-- HEADER --- --- -- --- --- -- --- --- -- --- --- -- --- --- -- --- --- -- --- --- -- --- --- -- --- --- ----> <!-- <header class="py-4 text-center text-uppercase fs-4 bg-primary bg-gradient text-white"> Header </header> --> <!-- ROW --- --- --- -- --- --- -- --- --- -- --- --- -- --- --- -- --- --- -- --- --- -- --- --- --- --- --> <div class="row py-3 flex-grow-1"> <!-- LEFT MENU --- --- --- -- --- --- -- --- --- -- --- --- -- --- --- -- --- --- -- --- --- -- --- --- -- --> <div class="col-3 d-flex"> <aside class="bg-danger bg-gradient w-100 d-flex justify-content-left align-items-center text-dark fs-5"> <% if (articles.length > 0) { %> <ul> <% articles.forEach((article, index) => { %> <li> <input type="hidden" class="articles" name="articles[]" value="<%= article.id %>"> <span> <a style="font-weight: bold;" href="#"><%=article.title%></a> </span> <span> <a style="font-weight: bold;" href="#"><%=article.owner%></a> </span> <span> <a style="font-weight: bold;" href="#"><%=article.number%></a> </span> <span> <a style="font-weight: bold;" href="#"><%=article.pos%></a> </span> </li> <%})%> </ul> <%}%> </ul> </aside> </div> <!-- PLACEHOLDER --- --- --- -- --- --- -- --- --- -- --- --- -- --- --- -- --- --- -- --- --- -- --- --- -- --> <div class="col-9 d-flex"> <main class="bg-light bg-gradient w-100 d-flex justify-content-center align-items-center text-dark fs-5 border border-success border-3"> Placeholder </main> </div> <!-- RIGHTBAR --- --- --- -- --- --- -- --- --- -- --- --- -- --- --- -- --- --- -- --- --- -- --- --- -- --> <!-- <div class="col-3 d-flex"> <aside class="bg-danger bg-gradient w-100 d-flex justify-content-center align-items-center text-white fs-5"> Right Bar </aside> </div> --> </div> <!-- FOOTER --> <!-- <footer class="py-4 bg-info bg-gradient text-center text-uppercase fs-4 text-white"> Footer </footer> --> </div> </div> <!-- .container --> </body> </html> |
Цитата:
|
Цитата:
1. Нужна рекурсия? Где размещать функцию? в **index.ejs**? Типа так? <% articles.forEach((article, index) => { %> <li> <input type="hidden" class="articles" name="articles[]" value="<%= article.id %>"> <span> <a style="font-weight: bold;" href="#"><%=article.title%></a> </span> <span> <a style="font-weight: bold;" href="#"><%=article.owner%></a> </span> <span> <a style="font-weight: bold;" href="#"><%=article.number%></a> </span> <span> <a style="font-weight: bold;" href="#"><%=article.pos%></a> </span> </li> <%})%> Только как это сделать с рекурсией? 2. Или рекурсию размещать в index.ejs в тегах `<script></script>`? И далее через JS? 3. Или рекурсию размещать в **home.controller.js**? Там формировать html разметку `<ul>` и `<li>` и далее вставлять в **index.ejs**? 4. Или есть библиотеки, которым можно скормить список из БД, а библиотека далее сама всё сделает? 5. Что из этого брать? https://www.cssscript.com/best-tree-view/ 6. Что искать? Поиск: "js treeview main menu"? |
Цитата:
|
Часовой пояс GMT +3, время: 02:26. |