Problem mit Auflistung

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Problem mit Auflistung

    Hallo,

    ich hab ein kleines Problem - ich wollte etwas testen für die navigation bzw. hatte ich vor es zuerst für ein kleines forum zu benutzen. aber nun gehts iwie net :(!

    naja also hier ist erstmal der code:

    Quellcode

    1. <?php
    2. include_once('config/config.php');
    3. include_once('config/function.php');
    4. $template = file_get_contents('templates/bla.tpl');
    5. $sql = "SELECT * FROM nnbb_categorie ORDER BY ID ASC";
    6. $result = mysql_query($sql) OR die(mysql_error());
    7. while($row = mysql_fetch_array($result)) {
    8. $catagory_data[] = array('{CATEGORYNAME}' => $row['title']);
    9. }
    10. $template = preg_replace("/<!--CategoryStart-->(.*)<!--CategoryEnd-->/sie", 'tplloop("$1", $catagory_data)', $template);
    11. $sql = "SELECT * FROM nnbb_boards WHERE categorie_id = '1' ORDER BY ID ASC";
    12. $result = mysql_query($sql) OR die(mysql_error());
    13. while($row2 = mysql_fetch_array($result)) {
    14. $board_data[] = array('{BOARDNAME}' => $row2['name']);
    15. }
    16. $template = preg_replace("/<!--BoardStart-->(.*)<!--BoardEnd-->/sie", 'tplloop("$1", $board_data)', $template);
    17. echo $template
    18. ?>
    Alles anzeigen


    In der nnbb_categories (ja ich weiß, man schreibts eigentlich mit y) gibt es 2 zeilen:

    ID 1 Titel Allgemein
    ID 2 Titel Off Topic

    in der nnbb_boards gibt es auch nur 2 zeilen:

    ID 1 categorie_id 1 name Test Forum 1
    ID 2 categorie_id 1 name Ankündigungen

    So erstmal das...

    das template sieht wie folgt aus:

    Quellcode

    1. <html>
    2. <head>
    3. <title></title>
    4. <meta name="author" content="Burak">
    5. </head>
    6. <body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">
    7. <!--CategoryStart-->
    8. <b>{CATEGORYNAME}</b>
    9. <br />
    10. <!--BoardStart-->
    11. - {BOARDNAME}
    12. <br />
    13. <!--BoardEnd-->
    14. <!--CategoryEnd-->
    15. </body>
    16. </html>
    Alles anzeigen



    Wenn ich das Teil nun aufrufe kommt folgendes:

    Allgemein
    - Test Forum 1
    Off Topic
    - Test Forum 1
    - Ankündigungen
    Off Topic
    - Ankündigungen

    So sieht es im Browser aus - mich wundert das aber irgendwie.

    Außerdem sollte ja auch hier:

    Quellcode

    1. $sql = "SELECT * FROM nnbb_boards WHERE categorie_id = '1' ORDER BY ID ASC";


    bei categorie_id = $row['ID'] sein aber das geht ja nicht weil es nicht mit in der while schleife ist...

    wie mach ich das ganze jetzt - ich weiß ncht mehr weiter =(

    hoffentlich kann mir da jemand helfen bzw hoffe ich das jemand mein problem verstanden hat ^^"

    danke

    mfg illidan
  • tja.. das eigene Template System hast du dir auferlegt. Da musst du jetzt eigentlich selbst schauen, wie du das wieder hinbekommst ;)

    aber ich bin mal nicht so ;) Du musst dein Konstrukt auf mehrere Templates aufteilen und es in die Schleife hängen. So ungefähr.

    $basis = load(tpl1)
    while($cat) {
    while($forum) {
    $boarddata;
    }
    $template = $basis;
    $template->assign(CATEGORYNAME, $cat);
    $template = preg_replace(<!--BoardStart-->, $boarddata);
    }
  • ich hab das iwie so erstellt - aber ist bestimmt falsch ich krieg sowieso das raus:

    Allgemein
    - Test Forum 1
    - Ankündigungen

    Allgemein
    - Test Forum 1
    - Ankündigungen


    Script ist:

    Quellcode

    1. <?php
    2. include_once('config/config.php');
    3. include_once('config/function.php');
    4. $template = file_get_contents('templates/bla.tpl');
    5. $sql = "SELECT * FROM nnbb_categorie ORDER BY ID ASC";
    6. $result = mysql_query($sql) OR die(mysql_error());
    7. while($row = mysql_fetch_assoc($result)) {
    8. $category_data[] = array('{CATEGORYNAME}' => $row['title']);
    9. $sql2 = "SELECT * FROM nnbb_boards WHERE categorie_id = '".$row['ID']."' ORDER BY ID ASC";
    10. $result2 = mysql_query($sql2) OR die(mysql_error());
    11. while($row2 = mysql_fetch_array($result2)) {
    12. $board_data[] = array('{BOARDNAME}' => $row2['name']);
    13. }
    14. $template = preg_replace("/<!--CategoryStart-->(.*)<!--CategoryEnd-->/sie", 'tplloop("$1", $category_data)', $template);
    15. $template = preg_replace("/<!--BoardStart-->(.*)<!--BoardEnd-->/sie", 'tplloop("$1", $board_data)', $template);
    16. echo $template;
    17. }
    18. ?>
    Alles anzeigen
  • ich habe das Template bewusst vor der Schleife geladen und verwende dann innerhalb der Schleife eine lokale Kopie.

    Quellcode

    1. $templateOriginal = file_get_contents('templates/bla.tpl');
    2. $sql = "SELECT `title`,`ID` FROM `nnbb_categorie` ORDER BY `ID` ASC";
    3. $result = mysql_query($sql) or die(mysql_error());
    4. while($row = mysql_fetch_assoc($result)) {
    5. $template = $templateOriginal;
    6. $template = str_replace('{CATEGORYNAME}', $row['title'], $template);
    7. $sql2 = "SELECT `name` FROM `nnbb_boards` WHERE `categorie_id` = '".$row['ID']."' ORDER BY `ID` ASC";
    8. $result2 = mysql_query($sql2) or die(mysql_error());
    9. while($row2 = mysql_fetch_array($result2)) {
    10. $board_data[] = array('{BOARDNAME}' => $row2['name']);
    11. }
    12. $template = preg_replace("/<!--BoardStart-->(.*)<!--BoardEnd-->/sie", 'tplloop("$1", $board_data)', $template);
    13. echo $template;
    14. }
    Alles anzeigen
  • So, da ich jetzt nach den vielen Monaten auf Smarty umgestiegen bin hab ich ein weiteres Problem mit der Auflistung der Navigations Elemente.

    Die Kategorien werden angezeigt aber die Links für die Kategorien nicht.

    Ich hab das jetzt mal so zusammen gebastelt allerdings will das nicht so wirklich klappen :(!

    Quellcode

    1. $smarty = new Smarty;
    2. $sql = "SELECT menu_cID, menu_ctitle FROM axtest_menu_category ORDER BY menu_cID ASC";
    3. $result = mysql_query($sql) or die(mysql_error());
    4. $menu_categorys = array();
    5. while($row = mysql_fetch_assoc($result))
    6. {
    7. $sql2 = "SELECT menu_lID, menu_lname, menu_llink, category_ID FROM axtest_menu_links WHERE category_ID = '".$row['menu_cID']."' ORDER BY menu_lID ASC";
    8. $result2 = mysql_query($sql2) or die(mysql_error());
    9. $menu_links = array();
    10. while($row2 = mysql_fetch_assoc($result2))
    11. {
    12. $menu_links[] = $row2;
    13. }
    14. $menu_categorys[] = $row;
    15. }
    16. $smarty->assign('menu_links', $menu_links);
    17. $smarty->assign('menu_categorys', $menu_categorys);
    18. $smarty->display('header.tpl');
    Alles anzeigen


    Im Template sieht das ganze so aus:

    Quellcode

    1. {foreach from=$menu_categorys item=menu_category}
    2. <div class="navi"><br /><div align="center"><div class="border_navi_box"><div class="navi_box_title">{$menu_category.menu_ctitle}</div></div>
    3. {foreach from=$menu_links item=menu_link}
    4. <div class="border_navi_box"><div class="navi_box_link"><img src="../images/icons/book.png" width="16" height="16" border="0" alt=""> {$menu_link.menu_lname}</div></div>
    5. {/foreach}
    6. {/foreach}


    Wobei ich allerdings denke das dies iwie falsch ist :S

    Hat da zufällig jemand ne Idee wie das richtig gemacht werden muss?

    Vielen Dank!
  • Und wo ist die Verbindung zwischen $menu_links und $menu_categorys? Nein, das ist kein Smarty Problem, das ist ein Implementierungsproblem.
    Das schreit nach einer Klasse oder zumindest einem mehrdimensionalen Array. Versuchs mal mit so einer Klasse.

    Quellcode

    1. class Category {
    2. public $title = '';
    3. public $links = array();
    4. public function __construct($title) {
    5. $this->title = $title;
    6. }
    7. public function add($row) {
    8. $this->links[] = $row;
    9. }
    10. }
  • das selbe Konstrukt kannst du auch auf Arrays übertragen. Ein Beispiel:

    Quellcode

    1. <?php
    2. $kategorien = array();
    3. $tmp = array(
    4. 'title' => 'test',
    5. 'links' => array()
    6. );
    7. $tmp['links'][] = 'link 1';
    8. $tmp['links'][] = 'link 2';
    9. ...
    10. $tmp['links'][] = $row;
    11. ...
    12. $tmp['links'][] = 'link 3';
    13. $tmp['links'][] = 'link 4';
    14. $kategorien[] = $tmp;
    15. print_r($kategorien);
    16. ?>
    Alles anzeigen