Smarty und verschachtelte array

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

  • Smarty und verschachtelte array

    Seid Tagen versuch ich mein fehler zu finden,aber ich seh einfach nicht was ich falsch mache. Wenn ich es ohne templat mache funktioniert das einwandfrei,aber mit templat nicht. Das problem ist ich habe 2 Datenbanksätze ,also zB. Links Kategorien und Links. In der Links db werden alle links gespeichert und bei den Kategorien halt die. Nun soll zu jeder Kategorie der passend Link ausgeben werden. Ohne Smarty geht das auch ohne probleme, aber bei smarty werden alle Links bei jeder Kategorie angeziegt. Hier mal ein Beispiel link wie ich es genau meine.

    Test Seite

    Und hier der code von der index.php
    PHP-Code:
    $query "SELECT * FROM koosai_linkskategorien   ORDER BY userid ";
    $ergebn2 mysql_query($query); 

    while (
    $row mysql_fetch_array($ergebn2)) {
    $cate $row ;
    $catid $row['cate'];
    $smarty->append('tiel'$cate);
    $link=array();
    $query1 "SELECT * FROM koosai_links WHERE kat=$catid' ORDER BY userid ";
    $ergebn mysql_query($query1); 

    while (
    $dat mysql_fetch_array($ergebn)) {
    $link[] = $dat ;

    $smarty->assign('tietel2'$link);
    }



    Und hier die tpl:
    PHP-Code:
    {foreach from=$tiel  item=tietel}
    {
    $tietel.cate}
    {foreach 
    from=$tietel2 item=name2}
    {
    $name2.besch}
    {/foreach}
    {/foreach} 

  • #2
    Wie wär's erst einmal damit:

    Code:
     SELECT
      kc.*, kl.*
     FROM
      koosai_linkskategorien kc
     LEFT JOIN
      koosai_links kl ON kc.cate = kl.kat
     ORDER BY
      kc.userid, kl.userid
    ?

    Lies: http://www.php-resource.de/forum/sho...threadid=28292

    Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
    sondern mit den Augen das Manual zu lesen.

    Kommentar


    • #3
      Erstmal danke für die Hilfe ,aber das bringt überhaupt nix genau das selbe problem wie vorher nur das er jetzt alle Kategorien x mal darstellt.
      Ich verzweifel langsam dran, ich weiss nun langsam nichts mehr habe alles versucht, was ich so gefunden habe und mein eigne wiesen, aber nix hat mich zur lösung gebracht. So sieht mein code nun aus.

      PHP-Code:

      $query 
      " SELECT
        kc.*, kl.*
       FROM
        koosai_linkskategorien kc
       INNER JOIN
        koosai_links kl ON kc.cate = kl.kat
      ORDER BY
        kc.userid, kl.userid "
      ;

      $ergebn2 mysql_query($query); 

      while (
      $row mysql_fetch_assoc($ergebn2)) 
      {
      $cate $row ;

      $smarty->append('tiel'$cate);


      $link $row ;
      $smarty->append('tietel2'$link);

        } 

      Kommentar


      • #4
        Was soll denn das in der Schleife, du füllst da zwei verschiedene Template-Variablen mit dem selben Inhalt ($row)?

        Versuchs mal hiermit, schau dir die Ausgabe von print_r() an und dann bastel dein Template (dabei kann ich nicht helfen, da ich nicht kapiere, was und wie du da anzeigen willst).
        PHP-Code:
        $query "SELECT
            kc.*, kl.*
          FROM
            koosai_linkskategorien kc
          INNER JOIN
            koosai_links kl ON kc.cate = kl.kat
          ORDER BY
            kc.userid, kl.userid"
        ;

        $ergebn2 mysql_query($query); 

        while (
        $data[] = mysql_fetch_assoc($ergebn2)) {}

        echo 
        '<pre>'print_r($data); echo '</pre>';

        $smarty->assign('data'$data); 

        Kommentar


        • #5
          du könntest bspw. im array ein flag einbauen und "kennzeichnen" ob es sich um eine "neue kategorie" handelt, sofern du sie nach kateogrie geordnet darstellst

          Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
          sondern mit den Augen das Manual zu lesen.

          Kommentar


          • #6
            Code:
            {foreach from=$tiel  item=tietel}
            {$tietel.cate}
            {foreach from=$tietel2 item=name2}
            {$name2.besch}
            {/foreach}
            {/foreach}
            Du durchläufst dein Kategorie Array $tiel (what ever das sein mag)
            Dann durchläufst du deine Links. Kannst ja mal folgendes versuchen

            {if $name2.kat eq $tietel.cate}{$name2.besch}{/if}

            Also nur dann den Link ausgeben wenn die Kategorien beider Arrays übereinstimmen.
            gruss Chris

            [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

            Kommentar


            • #7
              Vielen dank hhcm nun hat es geklappt endlich. Hätte ich auch selber drauf kommen können ich depp.

              Kommentar

              Lädt...
              X