weergeven van childs en parents
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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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;
}
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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$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";
$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:
Gewijzigd op 01/01/1970 01:00:00 door Nick
bedankt voor je snelle reactie pgFrank.. ik neem het even door!
pgFrank schreef op 28.09.2007 12:03:
dit geeft voor mij vooralsnog geen oplossing. althans ik heb niets aan die query? iemand anders een oplossing?
Met backtics kan je de meest gruwelijke dingen overkomen, bv. een tabel die ineens al zijn data kwijt is....
Quote:
(met dank aan PgVincent)Stel dat je in je tabel een kolom 'delete' hebt genoemd en je wilt weten wat de waarde van die kolom is voor alle records, dan zou je doen SELECT `delete` FROM tabel;
Vergeet de backticks en er staat:
SELECT delete FROM tabel;
En dat wordt geinterpreteerd als:
SELECT (delete FROM tabel)
Dan selecteer je dus de uitkomst van een DELETE query die zojuist alle records uit je tabel heeft gegooid.
Vergeet de backticks en er staat:
SELECT delete FROM tabel;
En dat wordt geinterpreteerd als:
SELECT (delete FROM tabel)
Dan selecteer je dus de uitkomst van een DELETE query die zojuist alle records uit je tabel heeft gegooid.
Gebruik dus nooit backtics! Iedereen maakt fouten (niks bijzonders), die backtics ga je dus vroeg of laat een keertje vergeten.
ok ik heb alles veranderd.. ook het veldnaam van order in order_number ;) bedankt voor de tip
ik heb nog steeds geen oplossing? kan iemand mij nog steeds een oplossing bieden?