03-10-2025, 10:48 AM
|
|
Confirmed User
Industry Role:
Join Date: Oct 2018
Location: New Orleans, Louisiana. / Newcastle, England.
Posts: 1,123
|
Quote:
Originally Posted by fris
cleaned it up a bit
Code:
<?php
// Database connection settings
$host = "localhost";
$username = "Username";
$password = "Password";
$dbname = "DB";
// Create connection
$conn = new mysqli($host, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// Fetch categories from the BISAC table, ordered alphabetically
$sql = "SELECT ID, Code, Category, Comments FROM BISAC ORDER BY Category";
$result = $conn->query($sql);
if (!$result) {
die("Query failed: " . $conn->error);
}
$categories = $result->fetch_all(MYSQLI_ASSOC);
// Close connection
$conn->close();
// Define the six main sections
$mainSections = [
"Fiction",
"NonFiction",
"Juvenile Fiction",
"Juvenile NonFiction",
"Young Adult Fiction",
"Young Adult NonFiction"
];
// Function to determine the section (Fiction, NonFiction, etc.)
function getMainSection(string $category): string {
global $mainSections;
foreach ($mainSections as $section) {
if (stripos($category, $section . " >") === 0) {
return $section;
}
}
return "NonFiction"; // Default to NonFiction if not categorized
}
// Function to build category tree
function buildCategoryTree(array $categories): array {
global $mainSections;
$trees = array_fill_keys($mainSections, []);
foreach ($categories as $item) {
$mainSection = getMainSection($item['Category']);
$categoryPath = explode(' > ', $item['Category']);
$firstCategory = array_shift($categoryPath);
// Ensure only top-level categories are stored correctly
if (!isset($trees[$mainSection][$firstCategory])) {
$trees[$mainSection][$firstCategory] = [
'subcategories' => [],
'id' => md5($mainSection . ' > ' . $firstCategory)
];
}
// Process only immediate subcategories and prevent recursion
if (!empty($categoryPath)) {
$subCategory = array_shift($categoryPath);
if ($subCategory !== $mainSection && $subCategory !== $firstCategory) {
if (!isset($trees[$mainSection][$firstCategory]['subcategories'][$subCategory])) {
$trees[$mainSection][$firstCategory]['subcategories'][$subCategory] = [
'subcategories' => [],
'id' => md5($mainSection . ' > ' . $firstCategory . ' > ' . $subCategory)
];
}
}
}
}
return $trees;
}
// Generate categorized trees
$categoryTree = buildCategoryTree($categories);
// Function to render categories
function renderCategories(array $tree): void {
if (!empty($tree)) {
echo '<ul>';
foreach ($tree as $category => $data) {
$hasSubcategories = !empty($data['subcategories']);
$uniqueId = $data['id'];
echo '<li>';
if ($hasSubcategories) {
echo '<input type="checkbox" id="toggle-' . $uniqueId . '" class="toggle">';
echo '<label for="toggle-' . $uniqueId . '" class="category-label">' . htmlspecialchars($category) . ' <span class="expand-icon"></span></label>';
echo '<ul class="subcategories">';
foreach ($data['subcategories'] as $sub => $subData) {
echo '<li>' . htmlspecialchars($sub) . '</li>';
}
echo '</ul>';
} else {
echo htmlspecialchars($category);
}
echo '</li>';
}
echo '</ul>';
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<base href="https://gfy.com/" /><!--[if IE]></base><![endif]-->
<base href="https://gfy.com/" /><!--[if IE]></base><![endif]-->
<base href="https://gfy.com/" /><!--[if IE]></base><![endif]-->
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Categorized BISAC Dropdown</title>
<style>
.dropdown-container {
width: 400px;
border: 1px solid #ccc;
padding: 10px;
max-height: 500px;
overflow-y: auto;
}
ul {
list-style: none;
padding-left: 0;
}
li {
margin: 5px 0;
position: relative;
}
.category-label {
font-weight: bold;
cursor: pointer;
display: flex;
justify-content: space-between;
width: 100%;
}
.expand-icon {
font-weight: bold;
cursor: pointer;
margin-left: 10px;
}
.toggle {
display: none;
}
.toggle + .category-label + .subcategories {
display: none;
}
.toggle:checked + .category-label + .subcategories {
display: block;
}
.toggle + .category-label .expand-icon::before {
content: " (+)";
}
.toggle:checked + .category-label .expand-icon::before {
content: " (-)";
}
</style>
</head>
<body>
<div class="dropdown-container">
<ul>
<?php foreach ($mainSections as $mainSection): ?>
<li>
<input type="checkbox" id="toggle-<?php echo md5($mainSection); ?>" class="toggle">
<label for="toggle-<?php echo md5($mainSection); ?>" class="category-label"><?php echo htmlspecialchars($mainSection); ?> <span class="expand-icon"></span></label>
<?php if (!empty($categoryTree[$mainSection])): ?>
<ul class="subcategories">
<?php renderCategories($categoryTree[$mainSection]); ?>
</ul>
<?php endif; ?>
</li>
<?php endforeach; ?>
</ul>
</div>
</body>
</html>
|
Haha thanks but wasnt needed, that code above was the result of my throwing it through GPT to try and find the issue, I had my original code. It is quite shocking how much GPT messes with code sometimes
Appreciate the assistance though 
__________________
SOMETHING EXTREME IS COMING SOON!
|
|
|