PEAR Klassenproblem

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PEAR Klassenproblem

    Guten Morgen,

    ich verwende die PEAR Klasse HTML_Menu. Dieserum verwendet die Nested Set Klasse. Es ist nun ein Beipiel gegeben, in dem ich nicht verstehe wo ich der Klasse mitteilen kann zu welchem Knoten welche datei gehört.

    Also folgende Zeile:


    // add links to each item
    foreach ($data as $id => $node) {
    $data[$id]['url'] = $_SERVER['PHP_SELF'].'?nodeID=' . $node['id'];
    }

    PHP-Code:
    <?php /** $Id: Menu_example.php,v 1.2 2004/01/18 02:55:08 datenpunk Exp $ */ ?>
    <html>
      <title>DB_NestedSet using PEAR::HTML_Menu Output class</title>
    <body>
    <div style="font-weight: bold;">DB_NestedSet using PEAR::HTML_Menu Output class</div>
    <div>
    <?php
    /**
     * Tests the DB_NestedSet class using the Menu renderer
     * Requires that you have HTML_Menu installed
     *
     * @author Daniel Khan <dk@webcluster.at>
     */
    // {{{ mysql dump

    /**
     * Dump of the example mysql table and data:
    #
    # Table structure for table `nested_set`
    #

    CREATE TABLE `nested_set` (
      `id` int(10) unsigned NOT NULL default '0',
      `parent_id` int(10) unsigned NOT NULL default '0',
      `order_num` tinyint(4) unsigned NOT NULL default '0',
      `level` int(10) unsigned NOT NULL default '0',
      `left_id` int(10) unsigned NOT NULL default '0',
      `right_id` int(10) unsigned NOT NULL default '0',
      `name` varchar(60) NOT NULL default '',
      PRIMARY KEY  (`id`),
      KEY `right` (`right_id`),
      KEY `left` (`left_id`),
      KEY `order` (`order_num`),
      KEY `level` (`level`),
      KEY `parent_id` (`parent_id`),
      KEY `right_left` (`id`,`parent_id`,`left_id`,`right_id`)
    ) TYPE=MyISAM;

    #
    # Dumping data for table `nested_set`
    #

    INSERT INTO `nested_set` VALUES (5, 5, 1, 1, 1, 10, 'Root A');
    INSERT INTO `nested_set` VALUES (7, 7, 1, 1, 1, 4, 'Root B');
    INSERT INTO `nested_set` VALUES (6, 5, 1, 2, 2, 5, 'Sub1 of A');
    INSERT INTO `nested_set` VALUES (1, 5, 2, 2, 6, 9, 'Sub2 of A');
    INSERT INTO `nested_set` VALUES (2, 5, 1, 3, 3, 4, 'Child of Sub1');
    INSERT INTO `nested_set` VALUES (3, 5, 1, 3, 7, 8, 'Child of Sub2');
    INSERT INTO `nested_set` VALUES (4, 7, 1, 2, 2, 3, 'Sub of B');
    # --------------------------------------------------------

    #
    # Table structure for table `nested_set_locks`
    #

    CREATE TABLE `nested_set_locks` (
      `lockID` char(32) NOT NULL default '',
      `lockTable` char(32) NOT NULL default '',
      `lockStamp` int(11) NOT NULL default '0',
      PRIMARY KEY  (`lockID`,`lockTable`)
    ) TYPE=MyISAM COMMENT='Table locks for comments';

    */

    // }}}
    // {{{ set up variables
    require_once('HTML/Menu.php');
    require_once(
    dirname(__FILE__).'/../NestedSet.php');
    require_once(
    dirname(__FILE__).'/../NestedSet/Output.php');
    $dsn 'mysql://user:password@localhost/test';
    $params = array(
        
    'id'        => 'id',
        
    'parent_id' => 'rootid',
        
    'left_id'   => 'l',
        
    'right_id'  => 'r',
        
    'order_num' => 'norder',
        
    'level'     => 'level',
        
    'id_trans'  => 'id_trans',                
        
    'url'       => 'url',
        
    'name'      => 'name'
    );

    $nestedSet =& DB_NestedSet::factory('DB'$dsn$params); 
    // we want the nodes to be displayed ordered by name, so we add the secondarySort attribute
    $nestedSet->setAttr(array(
            
    'node_table' => 'nested_set'
            
    'lock_table' => 'nested_set_locks'
            
    'secondarySort' => 'name',
        )
    );
    // get data (important to fetch it as an array, using the true flag)
    $data $nestedSet->getAllNodes(true);

    // }}}
    // {{{ manipulate data

    // add links to each item
    foreach ($data as $id => $node) {
         
    $data[$id]['url'] = $_SERVER['PHP_SELF'].'?nodeID=' $node['id'];
    }

    // }}}
    // {{{ render output
    $params = array(
        
    'structure' => $data,
        
    'titleField' => 'name',
        
    'urlField' => 'url');

    // Create the output driver object    
    $output =& DB_NestedSet_Output::factory($params'Menu');

    // Fetch the menu array
    $structure $output->returnStructure();


    // Instantiate the menu object, we presume that $data contains menu structure
    $currentUrl $_SERVER['PHP_SELF'].'?nodeID=' $_GET['nodeID'];

    echo 
    "Menu type 'sitemap'<br>";
    $menu = & new HTML_Menu($structure'sitemap');

    // Force menu to understand the nodeID passed with the request
    $menu->forceCurrentUrl($currentUrl);
    // Output the menu
    $menu->show();
    echo 
    "<hr>";

    echo 
    "Menu type 'tree'<br>";
    // Set another type
    $menu->setMenuType('tree');
    // Output the menu
    $menu->show();
    echo 
    "<hr>";

    echo 
    "Menu type 'rows'<br>";
    // Set another type
    $menu->setMenuType('rows');
    // Output the menu
    $menu->show();
    echo 
    "<hr>";

    echo 
    "Menu type 'urhere'<br>";
    // Set another type
    $menu->setMenuType('urhere');
    // Output the menu
    $menu->show();
    echo 
    "<hr>";

    echo 
    "Menu type 'prevnext'<br>";
    // Set another type
    $menu->setMenuType('prevnext');
    // Output the menu
    $menu->show();
    echo 
    "<hr>";

    // }}}
    ?>
    </div>
    </body>
    </html>

    Könnte mir mal jemand die INSERTS erklären ?
    Habe mir den Baum aufgezeichnet. Aber wie ist der durchnummeriert? Aus der Datenbank könnte ich ihn nicht rekonstruieren. Also mit der Info in der Datenbank bekomme ich einen ganz anderen Baum. Warum geht der right _id bis 10 ?

    Danke
    Zuletzt geändert von compuboy1010; 26.05.2004, 11:20.

  • #2
    Bitte nach Datenbanken verschieben.

    Hallo,

    Weiß wirklich niemand wieso die Klasse aus dieser Strukrur den Baum richtig hinbekommt ? Gibt es da eine Logik in dieser Tabelle? Kann keine erkennen.

    id parent_id order_num level left_id right_id name
    5 5 1 1 1 10 Root A
    7 7 1 1 1 4 Root B
    6 5 1 2 2 5 Sub1 of A
    1 5 2 2 6 9 Sub2 of A
    2 5 1 3 3 4 Child of Sub1
    3 5 1 3 7 8 Child of Sub2
    4 7 1 2 2 3 Sub of B


    Danke


    Compu
    Zuletzt geändert von compuboy1010; 24.05.2004, 16:26.

    Kommentar


    • #3
      Re: Bitte nach Datenbanken verschieben.

      Original geschrieben von compuboy1010
      ist es möglich dieses Posting nach "Datenbanken" zu verschieben?
      rechnung wird zugeschickt *g*
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        Wenn du da keine Struktur erkennst, dann gibt es zwei Möglichkeiten
        1. Du hast das Nested Set Modell verstanden
        2. Du hast das Nested Set Modell _nicht_ verstanden


        Sollte 2) zutreffen: Nochmal das Tutorial lesen

        Sollte 1) zutreffen, dann gibt es zwei Möglichkeiten
        1. Du hast dir die von dir gepostete Struktur genau angeschaut
        2. Du hast dir die von dir gepostete Struktur _nicht_ genau angeschaut


        Sollte 2) zutreffen: Nochmal die Struktur anschauen

        Sollte 1) zutreffen, gibt es ...





        eigentlich keine zwei Möglichkeiten, sondern nur die, dass du Nested Sets doch nicht so ganz verstanden hast
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          Also was ich konret nicht verstehe ist die Vergabe der IDs in der ersten Spalte ? Und die Parent-spalte.

          Könnte mir diese beiden Spalten mal jemand erläutern ?

          Danke
          Zuletzt geändert von compuboy1010; 25.05.2004, 11:27.

          Kommentar


          • #6
            Original geschrieben von compuboy1010

            Warum geht die right_id bis 10, obwohl des nur 7 Nodes gibt ?
            Steh' echt auf dem Schlauch.

            Danke
            Mach ein Durchlauf für Root A, dann wirst du verstehen warum! Du hast doch nicht kappierst

            Kommentar


            • #7
              Warum ist die Parent ID entweder 5 oder 7 ?

              Parent = Root ?

              Kommentar


              • #8
                ich weiss doch nicht wie du "dein NS" in Tabellen abgebildet hast

                Was soll also die Frage

                Kommentar


                • #9
                  So,

                  die Ausgane klappt nun, aber ich kann keine Knoten mit Links verknüpfen.

                  Wer kennt sich mit der Klasse aus?
                  Wie bekomme ich bloß die Links in die Knoten ?


                  Verstehe nicht so ganz was der Autor des Beispiels hiermit bezweckt hat:

                  // add links to each item
                  foreach ($data as $id => $node) {
                  $data[$id]['url'] = $_SERVER['PHP_SELF'].'?nodeID=' . $node['id'];
                  }

                  Tausche ich $_SERVER['PHP_SELF'] mit $data[$id]['url'] bekomme ich zwar richtige Links im Menu, dafür funzt das Menü aber nicht mehr.
                  Es zeigt dann die Untermenüs nicht mehr an.

                  Könnte jemand helfen ?


                  Danke

                  Kommentar

                  Lädt...
                  X