allereerst bedankt voor het gaan lezen van mijn vraag ;)
ik ben bezig met een documenten systeem en heb nu 2 tabellen:
- document
- content
je moet `document` zien als zeg maar een soort kaft.. hier staat alleen het kenmerk nummer, de titel, de taal en wat kleine info die op de kaft komt van het hele document die dadelijk wordt gegenereerd met de content items. de content tabel slaat elk hoofdstuk, paragraaf/titel, subtitel etc. op! hierin staan de velden:
- content_id
- parent_id
- content
- order_number
al het toevoegen/bewerken/verwijderen van content items en documenten werkt! ik ben nu alleen bezig met een geheel overzicht van het document welke `drag & drop` is, zodat je elke content item kun draggen en droppen en zodat de order nummers worden geupdate! hier gebruik ik Prototype voor.
het idee is dat elke content item zonder parent_id zeg maar een hoofdstuk is dus die wordt zo gestructereerd in het overzicht:
1. - Models (content_id:10)
als er nu een content item is met een parent_id "10" wordt dit zo gestructureert:
1. - Models (content_id:10)
1.1 - Technical information (content_id:12)
als er nu NOG een content item is met een parent_id "12" wordt dit weer zo gestructureert:
1. - Models (content_id:10)
1.1 - Technical information (content_id:12)
1.1.1 - Model XS100 (content_id: maakt niet uit)
zo moet dit eigenlyk onbeperkt verder! ik zal hieronder laten zien wat ik nu heb in code:
functions.php
function getContents($document_id){
global $db;
$query = "SELECT content_id, document_id, order_number, title, parent_id FROM contents WHERE document_id = '$document_id' AND parent_id = '0' ORDER BY order_number ASC";
$result = $db->query($query);
$contents = array();
$i=0;
while($row = $db->fetchObject($result)){
$contents[$i] = array("content_id" => $row->content_id, "title" => $row->title, "parent_id" => $row->parent_id, "order_number" => $row->order_number);
$i++;
}
return $contents;
}
function getChilds($document_id){
global $db;
$query = "SELECT content_id, document_id, order, title, parent_id FROM contents WHERE document_id` = '$document_id' AND parent_id != '0' ORDER BY order ASC";
$result = $db->query($query);
$childs = array();
$i=0;
while($row = $db->fetchObject($result)){
$childs[$row->parent_id][$i] = array("content_id" => $row->content_id, "title" => $row->title, "order_number" => $row->order_number);
$i++;
}
return $childs;
}
structure.php
$document_id = $_GET['document'];
$contents = getContents($document_id);
$childs = getChilds($document_id);
echo "<ul id=\"list_contents\" class=\"sortable-list\">\n";
// nummer defineren voor het nummer van de hoofdstukken
$i=1;
foreach($contents as $content){
echo " <li id=\"content_".$content['content_id']."\">\n <p><strong>$i - ".$content['title']."</strong> <a href=\"content.php?page=edit&document=$document_id&content=".$content['content_id']."\" title=\"".structure_action_edit_title."\"><img src=\"images/icons/12x12/edit.gif\" width=\"12\" height=\"12\" /></a> <a href=\"javascript:confirm_anything('content.php?page=delete&document=$document_id&content=".$content['content_id']."');\" title=\"".structure_action_delete_title."\"><img src=\"images/icons/12x12/delete.gif\" width=\"12\" height=\"12\" /></a></p>\n </li>\n";
foreach($childs as $parent_id => $child){
$x = 1;
$total_childs = count($child);
if($parent_id == $content['content_id']){
foreach($child as $child_from_parent){
echo " <li id=\"content_".$child_from_parent['content_id']."\" style=\"margin-left:50px;\">\n <p><strong>$i.$x - ".$child_from_parent['title']."</strong> <a href=\"content.php?page=edit&document=$document_id&content=".$child_from_parent['content_id']."\" title=\"".structure_action_edit_title."\"><img src=\"images/icons/12x12/edit.gif\" width=\"12\" height=\"12\" /></a> <a href=\"javascript:confirm_anything('content.php?page=delete&document=$document_id&content=".$child_from_parent['content_id']."');\" title=\"".structure_action_delete_title."\"><img src=\"images/icons/12x12/delete.gif\" width=\"12\" height=\"12\" /></a></p>\n </li>\n";
$x++;
}
}
else {
continue;
}
}
$i++;
}
echo "</ul>\n";
nu heb ik denk ik veel te omslachtige code gebruikt en bovendien geeft hij maar 1 child weer. dus:
1. - Models (content_id:10)
1.1 - Technical information (content_id:12)
maar het moet oneindig door gechild kunnen worden.. zoals de voorbeelden boven in mijn uitleg.
kan iemand mij alsjeblieft helpen? ik kan eventueel een kleine vergoeding bijdrage, maar ben ook maar een arme student dus dat zal niet veel zijn :P
afbeelding: