weergeven van childs en parents

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Nick

Nick

28/09/2007 11:31:00
Quote Anchor link
hey!

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)
PHP script in nieuw venster Selecteer het PHP script
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
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
    $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>&nbsp;&nbsp;<a href=\"content.php?page=edit&amp;document=$document_id&amp;content=".$content['content_id']."\" title=\"".structure_action_edit_title."\"><img src=\"images/icons/12x12/edit.gif\" width=\"12\" height=\"12\" /></a>&nbsp;<a href=\"javascript:confirm_anything('content.php?page=delete&amp;document=$document_id&amp;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>&nbsp;&nbsp;<a href=\"content.php?page=edit&amp;document=$document_id&amp;content=".$child_from_parent['content_id']."\" title=\"".structure_action_edit_title."\"><img src=\"images/icons/12x12/edit.gif\" width=\"12\" height=\"12\" /></a>&nbsp;<a href=\"javascript:confirm_anything('content.php?page=delete&amp;document=$document_id&amp;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:
Afbeelding
Gewijzigd op 01/01/1970 01:00:00 door Nick
 
PHP hulp

PHP hulp

22/12/2024 19:22:19
 
Frank -

Frank -

28/09/2007 12:03:00
Quote Anchor link
Bekijk dit topic eens, daar speelt een soortgelijke situatie. Wellicht heb je er wat aan.

Succes!
 
Nick

Nick

28/09/2007 12:05:00
Quote Anchor link
bedankt voor je snelle reactie pgFrank.. ik neem het even door!
 
Nick

Nick

28/09/2007 12:49:00
Quote Anchor link
pgFrank schreef op 28.09.2007 12:03:
Bekijk dit topic eens, daar speelt een soortgelijke situatie. Wellicht heb je er wat aan.

Succes!

dit geeft voor mij vooralsnog geen oplossing. althans ik heb niets aan die query? iemand anders een oplossing?
 
Frank -

Frank -

28/09/2007 13:39:00
Quote Anchor link
Offtopic: Gebruik geen backtics ` in je queries en kies geldige tabel- en kolomnamen. Een kolomnaam 'order' is dus niet geldig, zie de lijst met gereserveerde woorden, kies een betere naam.

Met backtics kan je de meest gruwelijke dingen overkomen, bv. een tabel die ineens al zijn data kwijt is....
Quote:
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.
(met dank aan PgVincent)

Gebruik dus nooit backtics! Iedereen maakt fouten (niks bijzonders), die backtics ga je dus vroeg of laat een keertje vergeten.
 
Nick

Nick

28/09/2007 14:13:00
Quote Anchor link
ok ik heb alles veranderd.. ook het veldnaam van order in order_number ;) bedankt voor de tip
 
Nick

Nick

29/09/2007 15:42:00
Quote Anchor link
ik heb nog steeds geen oplossing? kan iemand mij nog steeds een oplossing bieden?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.