Zu den Aufzeichnungen der tutorials.de-Live-Workshops
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
22
ZUGRIFFE
883
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    BG-Tomson BG-Tomson ist offline Mitglied
    Registriert seit
    Jun 2006
    Beiträge
    13
    Hallo Leute

    Ich habe ein JS-Menü, welches ich nun dynamisch über eine Datenbank füllen möchte.
    Leider bekomme ich die Übergabe der Daten von PHP zu JS nicht hin.

    Der ganze Quelltext

    Schritt für Schritt:
    Hier wird die Datenbank ausgelesen:

    Funktion der Datenbank
    PHP-Code:
    <?php

    if (!function_exists('get_sub_menu')){
        function 
    get_sub_menu($menu_id){
            global 
    $DB$db_tab;      
            
    $getsubmenu=$DB->query("
            SELECT menu_sub_id, menu_sub_order, menu_sub_text, menu_sub_url, menu_sub_target 
            FROM "
    .$db_tab['sub_menu']."
            WHERE menu_id="
    .$menu_id);
           while (
    $submenu=$DB->fetch_array($getsubmenu)){
           
    $sub_menu[]=$submenu;
            }
            return 
    $sub_menu;
        }
    }
    ?>
    Zum anzeigen der Seite werden die JS Datein im head eingefügt.
    /templates
    HTML-Code:
    <html>
     <head>
      ...
      <script src="menu/zeitbanner.js" language="javascript" type="text/javascript"></script>
      <script src="menuscript.js" language="javascript" type="text/javascript"></script>
     </head>
    Der Code in den Arrays soll aus der Datenbank kommen.
    /menu/zeitbanner.js
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    upSources = new Array("button1up.png","button2up.png");
     
    overSources = new Array("button1over.png","button2over.png");
     
    // SUB MENUS DECLARATION, YOU DONT NEED TO EDIT THIS
    subInfo = new Array();
    subInfo[1] = new Array();
    subInfo[2] = new Array();
     
     
    //*** SET SUB MENUS TEXT LINKS AND TARGETS HERE ***//
    subInfo[2][1] = new Array("Mix 1","http://www.f1-planet.de/new.php?path=zeitbanner/timebannerlist.php&id_nr=1","");
    subInfo[2][2] = new Array("Mix 2","http://www.f1-planet.de/new.php?path=zeitbanner/timebannerlist.php&id_nr=2","");
    subInfo[2][3] = new Array("Mix 3","http://www.f1-planet.de/new.php?path=zeitbanner/timebannerlist.php&id_nr=11","");

    Hier werden die Arrays verwendet.
    /menuscript.js
    Code :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    
    ...
    //*** NO MORE SETTINGS BEYOND THIS POINT ***//
    var overSub = false;
    var delay = 1000;
    totalButtons = upSources.length;
     
    // GENERATE SUB MENUS
    for ( x=0; x<totalButtons; x++) {
        // SET EMPTY DIV FOR BUTTONS WITHOUT SUBMENU
        if ( subInfo[x+1].length < 1 ) { 
            document.write('<div id="submenu' + (x+1) + '">');
        // SET DIV FOR BUTTONS WITH SUBMENU
        } else {
            document.write('<div id="submenu' + (x+1) + '" class="dropmenu" ');
            document.write('onMouseOver="overSub=true;');
            document.write('setOverImg(\'' + (x+1) + '\',\'\');"');
            document.write('onMouseOut="overSub=false;');
            document.write('setTimeout(\'hideSubMenu(\\\'submenu' + (x+1) + '\\\')\',delay);');
            document.write('setOutImg(\'' + (x+1) + '\',\'\');">');
     
     
            document.write('<ul>');
            for ( k=0; k<subInfo[x+1].length-1; k++ ) {
                document.write('<li>');
                document.write('<a href="' + subInfo[x+1][k+1][1] + '" ');
                document.write('target="' + subInfo[x+1][k+1][2] + '">');
                document.write(subInfo[x+1][k+1][0] + '</a>');
                document.write('</li>');
            }
            document.write('</ul>');
        }
        document.write('</div>');
    }
    ...


    Also nochmal:
    also die Funktion

    $menu = get_sub_menu(2);

    Soll in die Daten für das Menü aus der Datenbank holen.

    Ich habe dann

    $menu[0][menu_sub_id] = 2;
    $menu[0][menu_sub_order] = 1;
    $menu[0][menu_sub_text] = "Mix 1";
    $menu[0][menu_sub_url] ="http://www.f1-planet.de/new.php?path=zeitbanner/timebannerlist.php&id_nr=1";
    $menu[0][menu_sub_target] = "";

    $menu[1][menu_sub_id] = 2;
    $menu[1][menu_sub_order] = 2;
    $menu[1][menu_sub_text] = "Mix 2";
    $menu[1][menu_sub_url] ="http://www.f1-planet.de/new.php?path=zeitbanner/timebannerlist.php&id_nr=2";
    $menu[1][menu_sub_target] = "";

    Zur Verfügung

    Dieses soll nun vom Server (PHP) an den Clinet (JS) geschickt werden.

    In der HTML-Datei habe ich die JS-Datei "/menuscript.js" aufgerufen, die benötigten Daten bekomme ich aber dort nicht rein, so habe ich sie vorerst in einer anderen JS-Datei per Hand reingeschrieben. Das ist natürlich nicht im Sinne des Erfinders. Diese Datei, hier "/menu/zeitbanner.js" genannt müsste umgeschrieben werden. Die Frage ist nur wie ich das mache.

    Im Grunde müsste es in die Zeile:
    subInfo[2][1] = new Array($menu[0][menu_sub_text], $menu[0][menu_sub_url], $menu[0][menu_sub_target]);
    subInfo[2][2] = new Array($menu[1][menu_sub_text], $menu[1][menu_sub_url], $menu[1][menu_sub_target]);
    Geändert von BG-Tomson (18.11.09 um 21:55 Uhr)
     

  2. #2
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Moin,

    du kannst solche Datenstrukturen in PHP bequem per json_encode() in eine direkt von JS verwendbare Form umwandeln.
     

  3. #3
    BG-Tomson BG-Tomson ist offline Mitglied
    Registriert seit
    Jun 2006
    Beiträge
    13
    Könntest Du mir mal ein Beispiel schreiben, wie ich das mache? Kenn mich mit JS leider sogut wie gar nicht aus. Auch wenn das nun eine PHP-Fumkzion ist, weiß ich gerade nicht wie ich sie anwenden soll.

    Vielen Dank im Vorraus.
     

  4. #4
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Jo, ist halbsowild

    Code :
    1
    2
    3
    4
    5
    
    <script type="text/javascript">
    <!--
    var menu=<?php echo json_encode($menu);?>;
    //-->
    </script>
    ...das ist schon alles

    Du hast damit in JS eine Variable menu, welche quasi ein Clone des PHP-Arrays ist.
    Beachte dabei, dass es in JS keine assoziativen Arrays gibt.
    Du erhältst also ausgehend von deinem Beispiel mit
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    $menu[0][menu_sub_id] = 2;
    $menu[0][menu_sub_order] = 1;
    $menu[0][menu_sub_text] = "Mix 1";
    $menu[0][menu_sub_url] ="http://www.f1-planet.de/new.php?path=zeitbanner/timebannerlist.php&id_nr=1";
    $menu[0][menu_sub_target] = "";
     
    $menu[1][menu_sub_id] = 2;
    $menu[1][menu_sub_order] = 2;
    $menu[1][menu_sub_text] = "Mix 2";
    $menu[1][menu_sub_url] ="http://www.f1-planet.de/new.php?path=zeitbanner/timebannerlist.php&id_nr=2";
    $menu[1][menu_sub_target] = "";

    ...einen Array mit 2 Elementen, diese beiden Elemente selbst sind jedoch Objekte.
     

  5. #5
    BG-Tomson BG-Tomson ist offline Mitglied
    Registriert seit
    Jun 2006
    Beiträge
    13
    In welcher Datei kann ich denn die PHP-Funktion die die Datenbank ausließ aufrufen? Das müsste dann doch schon in der new.php (siehe Quelltextdatei) passieren?
     

  6. #6
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Du kannst das in der JS-Datei machen

    Gebe der JS-Datei einfach die Endung *.php , und sende dort eingangs einen js-header:

    Code :
    1
    
    <?php header('Content-Type:text/javascript');?>

    Durch die geänderte Dateiendung wird die Datei nun auch von PHP verarbeitet.
    Für den Clienten spielt die Dateiendung überhaupt keine Rolle, der bezieht seine Information darüber, was für eine Art Datei er geliefert bekommt, vom Server....und diese Information lieferst du über den header()

    (nicht vergessen, die neue Dateiendung auch in den Pfadangaben in der HTML-Datei anzupassen)
     

  7. #7
    BG-Tomson BG-Tomson ist offline Mitglied
    Registriert seit
    Jun 2006
    Beiträge
    13
    Erstmal vielen Dank.

    Ich habe die "menu/zeitbanner.js" umbenannt in "menu/zeitbanner.php"

    und dann folgendes probieren.
    PHP-Code:
    <?php 
    header
    ('Content-Type:text/javascript');
    $menu get_sub_menu(2);
    ?>

    <script type="text/javascript">
    <!--
    var subInfo=<?php echo json_encode($menu);?>;
    //-->
    </script>
    leider klappt das nicht
     

  8. #8
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    In einer externen JS-Datei darfst du keine HTML-Tags/Kommentare notieren.

    Also nur dies:
    Code :
    1
    2
    3
    4
    5
    
    <?php 
    header('Content-Type:text/javascript');
    $menu = get_sub_menu(2);
    ?>
    var subInfo=<?php echo json_encode($menu);?>;

    (die Funktion get_sub_menu() muss dort natürlich auch noch rein )
     

  9. #9
    BG-Tomson BG-Tomson ist offline Mitglied
    Registriert seit
    Jun 2006
    Beiträge
    13
    Wenn ich den Quelltext nun aufrufe, sehe ich das "Array" als objekt, nur wie könnten meine Funtionen in der "/menuskript.js" dort nun wieder drauf zugreifen?

    Nochmal der Überbrick, was ich geändert habe.

    Schritt für Schritt:
    Hier wird die Datenbank ausgelesen:

    Funktion der Datenbank
    PHP-Code:
    <?php

    if (!function_exists('get_sub_menu')){
        function 
    get_sub_menu($menu_id){
            global 
    $DB$db_tab;      
            
    $getsubmenu=$DB->query("
            SELECT menu_sub_id, menu_sub_order, menu_sub_text, menu_sub_url, menu_sub_target 
            FROM "
    .$db_tab['sub_menu']."
            WHERE menu_id="
    .$menu_id);
           while (
    $submenu=$DB->fetch_array($getsubmenu)){
           
    $sub_menu[]=$submenu;
            }
            return 
    $sub_menu;
        }
    }
    ?>
    Zum anzeigen der Seite werden die JS Datein im head eingefügt.
    /templates
    HTML-Code:
    <html>
     <head>
      ...
      <script src="menu/zeitbanner.php" language="javascript" type="text/javascript"></script>
      <script src="menuscript.js" language="javascript" type="text/javascript"></script>
     </head>
    Der Code in den Arrays soll aus der Datenbank kommen.
    /menu/zeitbanner.php
    PHP-Code:
    <?php 
    header
    ('Content-Type:text/javascript');
    $sub_info get_sub_menu(1);
    ?>
    var subInfo=<?php echo json_encode($sub_info);?>;

    upSources = new Array("button1up.png","button2up.png");

    overSources = new Array("button1over.png","button2over.png");
    Hier werden die Arrays verwendet.
    /menuscript.js
    Code :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    
    ...
    //*** NO MORE SETTINGS BEYOND THIS POINT ***//
    var overSub = false;
    var delay = 1000;
    totalButtons = upSources.length;
     
    // GENERATE SUB MENUS
    for ( x=0; x<totalButtons; x++) {
        // SET EMPTY DIV FOR BUTTONS WITHOUT SUBMENU
        if ( subInfo[x+1].length < 1 ) { 
            document.write('<div id="submenu' + (x+1) + '">');
        // SET DIV FOR BUTTONS WITH SUBMENU
        } else {
            document.write('<div id="submenu' + (x+1) + '" class="dropmenu" ');
            document.write('onMouseOver="overSub=true;');
            document.write('setOverImg(\'' + (x+1) + '\',\'\');"');
            document.write('onMouseOut="overSub=false;');
            document.write('setTimeout(\'hideSubMenu(\\\'submenu' + (x+1) + '\\\')\',delay);');
            document.write('setOutImg(\'' + (x+1) + '\',\'\');">');
     
     
            document.write('<ul>');
            for ( k=0; k<subInfo[x+1].length-1; k++ ) {
                document.write('<li>');
                document.write('<a href="' + subInfo[x+1][k+1][1] + '" ');
                document.write('target="' + subInfo[x+1][k+1][2] + '">');
                document.write(subInfo[x+1][k+1][0] + '</a>');
                document.write('</li>');
            }
            document.write('</ul>');
        }
        document.write('</div>');
    }
    ...
    Geändert von BG-Tomson (20.11.09 um 13:52 Uhr)
     

  10. #10
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Da wären ein paar Anpassungen notwendig, damit das mit dem json läuft, denn auf Objekte haben nicht die selben Eigenschaften wie Arrays(bspw. keine length, welche das Skript nutzt).

    1.zeitbanner.php

    Das müsste so aussehen, du benötigst ja 2 Submenues:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    <?php 
    header('Content-Type:text/javascript');
     
    $subInfo=array([B]get_sub_menu(1),get_sub_menu(2)[/B])
    ?>
    var subInfo=<?php echo json_encode($subInfo);?>;
    upSources = new Array("button1up.png","button2up.png");
     
    overSources = new Array("button1over.png","button2over.png");

    2. menuskript.js
    Code :
    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
    27
    28
    29
    30
    31
    32
    33
    
    //*** NO MORE SETTINGS BEYOND THIS POINT ***//
    var overSub = false;
    var delay = 1000;
    totalButtons = upSources.length;
     
     
    // GENERATE SUB MENUS
    for ( x=0; x<totalButtons; x++) {
        // SET EMPTY DIV FOR BUTTONS WITHOUT SUBMENU
        if ( subInfo[x].length < 1 ) { 
            document.write('<div id="submenu' + (x) + '">');
        // SET DIV FOR BUTTONS WITH SUBMENU
        } else {
            document.write('<div id="submenu' + (x) + '" class="dropmenu" ');
            document.write('onMouseOver="overSub=true;');
            document.write('setOverImg(\'' + (x) + '\',\'\');"');
            document.write('onMouseOut="overSub=false;');
            document.write('setTimeout(\'hideSubMenu(\\\'submenu' + (x) + '\\\')\',delay);');
            document.write('setOutImg(\'' + (x) + '\',\'\');">');
     
     
            document.write('<ul>');
            for ( k=0; k<subInfo[x].length; k++ ) {
                document.write('<li>');
                document.write('<a href="' + subInfo[x][k].[B]menu_sub_url [/B]+ '" ');
                document.write('target="' + subInfo[x][k].[B]menu_sub_target [/B]+ '">');
                document.write(subInfo[x][k].[B]menu_sub_text [/B]+ '</a>');
                document.write('</li>');
            }
            document.write('</ul>');
        }
        document.write('</div>');
    }

    Inwiefern da an den anderen beteiligten Funktionen etwas zu ändern ist, kann ich erst sagen, wenn ich sie kenne.
     

  11. #11
    BG-Tomson BG-Tomson ist offline Mitglied
    Registriert seit
    Jun 2006
    Beiträge
    13
    irgendwe habe ich das gefühl die funkton get_sub_menu() ist in der zeitbanner.php überhaupt nicht verfügbar. ich bekomme dort auch nix ausgegeben. hatte auch in der zeitbanner.php nochmal mit include(funktionen.php); die funktion an der stelle einzubinden, aber irgendwie ist das alles erfolglos.
     

  12. #12
    BG-Tomson BG-Tomson ist offline Mitglied
    Registriert seit
    Jun 2006
    Beiträge
    13
    Graube ich werde es morgennochmal versuchen und den ganzen js kram so gering wie möglich halten, also die zeitbanner.php ganz weg und die menuskript.js dann in menuskript.php umwandeln, so kmme ich nicht weiter, keine ahnung
     

  13. #13
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Da lässt sich irgendwie nur schwer helfen, ich weiss ja nicht mal, wo du die Funktion stehen hast.
     

  14. #14
    BG-Tomson BG-Tomson ist offline Mitglied
    Registriert seit
    Jun 2006
    Beiträge
    13
    Jetzt ist es irgendwie ne unschöne Vermischung von JS und PHP
    PHP-Code:
    <?php 

    $totalButtons 
    5;

    $subInfo get_sub_menu(1);


    /*** SET BUTTONS' FILENAMES HERE ***/

    for($i=0$i<$totalButtons;$i++){
    if (
    $i!=($zahl-1)) $f="r"; else $f="g";
    $upSources[$i] = $f."button".($i+1)."up.png";
    $overSources[$i] = $f."button".($i+1)."over.png";
    }

    // GENERATE SUB MENUS
    for ($x=1$x<=$totalButtons$x++) {
        
    // SET EMPTY DIV FOR BUTTONS WITHOUT SUBMENU
        
    if (sizeof($subInfo[$x]) < ) {
                    
    ?><script type="text/javascript"> 
            document.write('<?php echo'<div id="submenu'.$x.'">';?>');
                    </script><?php
        
    // SET DIV FOR BUTTONS WITH SUBMENU
        

            else 
            {
                    
    ?><script type="text/javascript"> 
            document.write('<?php echo'<div id="submenu'.$x.'" class="dropmenu"';?>');
            document.write('onMouseOver="overSub=true;');
            document.write('setOverImg(\'' + (<?php echo $x?>) + '\',\'\');"');
            document.write('onMouseOut="overSub=false;');
            document.write('setTimeout(\'hideSubMenu(\\\'submenu' + (<?php echo $x?>) + '\\\')\',delay);');
            document.write('setOutImg(\'' + (<?php echo $x?>) + '\',\'\');">');
            document.write('<ul>');
                    </script><?php


            
    for ($k=0$k<sizeof($subInfo[$x]); $k++ ) {
                    
    ?><script type="text/javascript"> 
                document.write('<li>');
            document.write('<?php echo '<a href="'.$subInfo[$x][$k][menu_sub_url].'"';?>');
            document.write('<?php echo 'target="'.$subInfo[$x][$k][menu_sub_target].'"';?>');
            document.write('<?php echo $subInfo[$x][$k][menu_sub_text].'</a>';?>');
            document.write('</li>'); 
                    </script><?php

           
    }    

                    
    ?><script type="text/javascript"> 
                  document.write('</ul>');
                    </script><?php
          

         
    ?><script type="text/javascript"> 
         document.write('</div>');
         </script><?php
    }
    ?>
    Dann wird die Funktion aufgerufen und auch der Aufbau der Arrays ist Korrekt.

    Nur Funktion ist weiter keine Vorhanden.

    Weiß auch nicht so recht.
     

  15. #15
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Schon vergessen?
    Zitat Zitat von Sven Mintel Beitrag anzeigen
    In einer externen JS-Datei darfst du keine HTML-Tags/Kommentare notieren.
    <script> ist ein HTML-Element.
     

Ähnliche Themen

  1. JTable mit Daten füllen
    Von ratze79 im Forum Java
    Antworten: 2
    Letzter Beitrag: 04.06.07, 20:33
  2. Antworten: 2
    Letzter Beitrag: 09.07.06, 12:18
  3. DataGrid mit Daten füllen
    Von christine82 im Forum .NET Archiv
    Antworten: 2
    Letzter Beitrag: 12.05.05, 14:59
  4. Kombinatiosfeld mit Daten füllen
    Von Digga im Forum Microsoft Windows
    Antworten: 0
    Letzter Beitrag: 05.12.03, 19:05
  5. Antworten: 1
    Letzter Beitrag: 19.10.02, 22:46