Avatar billede clansite.dk Nybegynder
14. august 2008 - 13:03 Der er 17 kommentarer og
1 løsning

Underligt Array

Hej folkens,

Jeg har disse array (Kan ses på http://cms.situsinternet.dk/cms/test.php) som jeg gerne vil have lagt sammen, og lavet så de kommer til at fungere som det script der ligger under første HR (Javascript code).

Jeg har bøvlet og bøvlet, og kan simpelthen bare ikke finde ud af det mere.
Så nu smider jeg 100 point til den der kan løse problemet.
(Code: http://cms.situsinternet.dk/cms/test.txt)

Jeg har lavet det sådan at arrMenu[ejeren][id] - dvs. at hvis ejeren = 0, så er det hovedpunktet.

Håber virkelig at der er en der kan hjælpe :)
Avatar billede janpolsen Nybegynder
14. august 2008 - 13:48 #1
Skal du ikke have ændret linjen:
    $arrMenu[$data["owner"]][$data['id']] = $data["title"];
til
    $arrMenu[$data["owner"]][$data['id']] = $title;
?


Ellers... Hvordan virker det med:
foreach ($arrMenu AS $owner => $ids) {
    foreach ($ids AS $id => $title) {
        echo "d.add({$owner},{$id},'{$title}','example01.html');\n"; // jeg mangler værdier for url, title-attribute når du laver hover samt icon
    }
}

Du har to entries hvor ejeren er 0, hvordan vil du have det til at virke i praksis?
Avatar billede clansite.dk Nybegynder
14. august 2008 - 13:58 #2
Hej Jan,

Så er begge filer opdateret, uden held desværre  :/

Jah, altså det fungerer så 0 er rodpunkter :)
Avatar billede janpolsen Nybegynder
14. august 2008 - 14:11 #3
Er du sikker på, at scriptet kan klare flere rodpunkter? Eksemplet indeholder jo kun et.

Jeg kan dog kun se to entries i arrayet nu. Gider du indsætte følgende linje igen?:
    print_r($arrMenu);
Avatar billede janpolsen Nybegynder
14. august 2008 - 14:18 #4
Hhmm.. Faktisk tror jeg at scriptet fungerer på en helt anden måde... Første tal ligner mere en counter som er unik.

Du skal bruge en tæller og en "parent_id" og så have:
echo "d.add(0,-1,'My example tree');\n";
foreach ($arrMenu AS $owner => $ids) {
    foreach ($ids AS $id => $title) {
        echo "d.add({$id},{$parent_id},'{$title}','example01.html');\n"; // jeg mangler værdier for url, title-attribute når du laver hover samt icon
    }
}

$id skal være unik i tabellen og $parent_id skal pege på det $id, som den skal ligge under.
Avatar billede clansite.dk Nybegynder
14. august 2008 - 14:18 #5
Hej Jan,

Hvis jeg erstatter linie 28 (return $arrMenu;) med (print_r($arrMenu);) så skriver den arrayet korrekt, men skriver jeg den som return fungerer det ikke - så vises dette her.

Det med flere 0 punkter skal jeg nok løse, vil bare have den til at skrive det ordentligt ud.

I.e.

d.add(0,-1,'My example tree');
d.add(1,0,'Opdateringer','example01.html');
d.add(2,1,'(Punkt med Opdateringer som owner)','example01.html');
d.add(3,1,'(Punkt med Opdateringer som owner)','example01.html');
d.add(4,1,'(Punkt med Opdateringer som owner)','example01.html');
d.add(5,0,'Priser','example01.html');
d.add(6,5,'(Punkt med Priser som owner)','example01.html');
Avatar billede janpolsen Nybegynder
14. august 2008 - 14:20 #6
Du kan sætte linjen ind således:
    $arrMenu = ListDB(0, $_GET["lang"]);
    print_r($arrMenu);
Avatar billede clansite.dk Nybegynder
14. august 2008 - 14:25 #7
http://cms.situsinternet.dk/cms/test.php

Opdateret (Og det samme er .txt)
Avatar billede clansite.dk Nybegynder
14. august 2008 - 14:42 #8
Jeg har opdateret arrayed lidt, ved ikke om det vil kunne hjælpe på det?
Avatar billede janpolsen Nybegynder
14. august 2008 - 15:04 #9
Der mangler stadig en reference ($parent_id) fra de forskellige punkter til punktets "parent".
Hvordan ser strukturen ud på din tabel?
Avatar billede clansite.dk Nybegynder
14. august 2008 - 15:29 #10
$data["owner"] er jo netop den parent_id :)

Jeg forstår bare ikke hvorfor at alle underpunkterne ikke vises.
Der må være en fejl i looped, eller i det med return..
Avatar billede tmi Nybegynder
14. august 2008 - 15:33 #11
Din rekursive funktion ser ud til at være i stykker..
Jeg ville nok gøre noget ala det her: (den skulle gerne printe det hele korrekt for dig)

$count = 0;
function ListDB($owner, $lang, $parent = 0) {
    global $count;
    if ($lang == '') { $lang = 1; }
   
    $q = mysql_query("select * from cms_subsites where owner=" . $owner . " AND lang = " . $lang . " order by menu_sort");
    while ($data = mysql_fetch_array($q)) {

        $title = (empty($data['title'])? "(Intet navn)" : $data["title"]);
        $title = (empty($data['popup'])? $title : "(popup) " .$title);
        echo "d.add(".($count++).",".$parent.",'$title','example01.html');\n";
        ListDB($data['id'], $lang, $parent+1);
    }
}
ListDB(0, $_GET["lang"]);
Avatar billede clansite.dk Nybegynder
14. august 2008 - 15:39 #12
tmi, du er en skat for at sige det mildt :-)

janpolsen jeg håber at det er okay at tmi får point, eftersom at det var ham der kom med det korrekte svar ?
Avatar billede clansite.dk Nybegynder
14. august 2008 - 16:23 #13
Der er dog en fejl, den der hedder "Lig med penge" har "Google ?" som owner rigtigt, men den vises somom den har "Søgemaskine" som owner.

Hvordan kan man lige fikse det?
Avatar billede tmi Nybegynder
14. august 2008 - 16:28 #14
Øhh.. Hvor kan jeg se indholdet af din database? Er du sikker på at det er sådan? Prøv evt. at smide output fra funktionen
Avatar billede clansite.dk Nybegynder
14. august 2008 - 16:45 #15
tmi, jeg er 100% - Her har du output http://cms.situsinternet.dk/cms/test.php

--
-- Data dump for tabellen 'cms_subsites'
--

INSERT INTO cms_subsites (id, owner, title, meta_keywords, meta_webdesc, meta_title, content, menu_image, menu_active, menu_hover, mainsite, popup, hidden, lang, req_login, menu_sort, image_logo, sitename) VALUES
(1, 0, 'Opdateringer', '', '', '', 'meget tekst', '', '', '', 0, 0, 0, 1, 0, 0, '', 'opdateringer'),
(2, 1, 'Programmering', '', '', '', 'meget tekst', '', '', '', 0, 0, 0, 1, 0, 0, '', 'programmering'),
(3, 1, 'Priser', '', '', 'meget tekst', '', '', '', 0, 0, 0, 1, 0, 0, '', 'priser'),
(4, 1, 'Design', '', '', '', 'meget tekst', '', '', '', 0, 0, 0, 1, 0, 0, '', 'design'),
(5, 1, 'Bruger i fokus', '', '', '', '', '', '', '', 0, 0, 0, 1, 0, 0, '', 'bruger-i-fokus'),
(6, 2, 'Søgemaskine', '', '', '', '', '', '', '', 1, 0, 0, 1, 0, 0, '', 'soegemaskine'),
(7, 2, 'Google ?', '', '', '', '', '', '', '', 0, 0, 0, 1, 0, 0, '', 'google'),
(8, 7, 'Lig med penge', '', '', '', 'meget tekst', '', '', '', 0, 0, 0, 1, 0, 0, '', 'lig-med-penge');

Det er Data dump! Håber det er okay ? :)
Avatar billede tmi Nybegynder
14. august 2008 - 18:26 #16
Ups, min fejl ;-)
Prøv det her:

$count = 1;
function ListDB($owner, $lang, $parent = 0) {
    global $count;
    if ($lang == '') { $lang = 1; }
   
    $q = mysql_query("select * from cms_subsites where owner=" . $owner . " AND lang = " . $lang . " order by menu_sort");
    while ($data = mysql_fetch_array($q)) {

        $title = (empty($data['title'])? "(Intet navn)" : $data["title"]);
        $title = (empty($data['popup'])? $title : "(popup) " .$title);
        echo "d.add(".($count).",".$parent.",'$title','example01.html');\n";
        ListDB($data['id'], $lang, $count++);
    }
}
ListDB(0, $_GET["lang"]);
Avatar billede clansite.dk Nybegynder
14. august 2008 - 18:41 #17
Jamen så virker det jo ganske godt ;)

Jeg siger mange tak for hjælpen tmi - du har sgu været en stor hjælp!
Avatar billede tmi Nybegynder
15. august 2008 - 04:35 #18
Selv tak :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester