Navigation auf Smarty umstellen?!

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

  • Navigation auf Smarty umstellen?!

    hi,

    ich bin vor kurzem auf Smarty gestoßen und bin gerade dabei mein CMS darauf umzustellen...Bis jetzt klappt auch alles ganz gut...Aber bei der Navigation habe ich ein problem

    Mein bisheriger Code sag wie folgt aus:

    PHP-Code:
    $mvNavDb=$mcDB->mfQuery("SELECT * FROM ".mTblNavCat." WHERE navcat_status='1' 
    ORDER by navcat_order ASC"
    );
    while(
    $mvNav=$mcDB->mfFetchArray($mvNavDb)){
        if(
    $mvNav['navcat_align']==1){
            
    $mvSiteNavClassBody 'navLeftBody';
            
    $mvSiteNavClassTable 'navLeftTable';
            unset(
    $mvSiteNavLeftHead);
            unset(
    $mvSiteNavLeftBody);
            if(
    $mvNav['navcat_box']!=""){
                include(
    "navigation/".$mvNav['navcat_box']);
                
    $mvSiteNavLeftHead=$mvNav['navcat_title'];
                eval (
    "\$mvSiteNavLeftBody .= \"".mfGetTemplate($mvNavTemplate)."\";");
                eval (
    "\$mvSiteNavLeftBox .= \"".mfGetTemplate("navigation_left_box")."\";");
            }
            else{
                
    $mvNavLinkDb=$mcDB->mfQuery("SELECT * FROM ".mTblNav.
    WHERE nav_cat='"
    .$mvNav['navcat_id']."' 
    ORDER by nav_order ASC"
    );
                while(
    $mvNavLink=$mcDB->mfFetchArray($mvNavLinkDb)){
                    
    $mvSiteNavClassBody "navLeftBody";
                    
    $mvSiteNavClassTable 'navLeftTable';
                    eval (
    "\$mvSiteNavLeftBody .= \"".mfGetTemplate("navigation_link")."\";");
                }
                
    $mvSiteNavLeftHead=$mvNav['navcat_title'];
                eval (
    "\$mvSiteNavLeftBox .= \"".mfGetTemplate("navigation_left_link_box")."\";");
            }
        }
        elseif(
    $mvNav['navcat_align']==2){
            ...
        }
        elseif(
    $mvNav['navcat_align']==3){
            ...
        }
        elseif(
    $mvNav['navcat_align']==4){
            ...    
        }
    }
    eval (
    "\$mvSiteNavBottom .= \"".mfGetTemplate("navigation_bottom")."\";");
    eval (
    "\$mvSiteNavTop .= \"".mfGetTemplate("navigation_top")."\";");
    eval (
    "\$mvSiteNavRight .= \"".mfGetTemplate("navigation_right")."\";");
    eval (
    "\$mvSiteNavLeft .= \"".mfGetTemplate("navigation_left")."\";"); 
    Die Templates dazu (nur für navigation_left, da sich die anderen ziemlich gleichen):

    navigation_left.tpl
    Code:
    $mvSiteNavLeftBox
    navigation_left_box.tpl
    Code:
    <table width="100%" class="navLeftTable" border="0" cellspacing="1" cellpadding="2">
    	<tr>
    		<td class="navLeftHead" align="center">
    			$mvSiteNavLeftHead
    		</td>
    	</tr>
    	<tr>
    		<td class="navLeftBody">
    			$mvSiteNavLeftBody  
    		</td>
    	</tr>
    </table>
    <img src="images/blank.gif" height="5" />
    navigation_left_link_box.tpl
    Code:
    <table width="100%" class="navLeftTable" border="0" cellspacing="1" cellpadding="2">
    	<tr>
    		<td class="navLeftHead" align="center">
    			$mvSiteNavLeftHead
    		</td>
    	</tr>
    			$mvSiteNavLeftBody  
    </table>
    <img src="images/blank.gif" height="5" />
    navigation_lin.tpl
    Code:
    	<tr>
    		<td class="$mvSiteNavClassBody">
    			<a href="$mvNavLink[nav_link]">$mvNavLink[nav_title]</a>
    		</td>
    	</tr>

    Als ich es umgestellt habe, habe ich die ganzen eval Funktionen durch Smarty Funktionen ersetzt

    PHP-Code:
    // z.B.

    eval ("\$mvSiteNavLeft .= \"".mfGetTemplate("navigation_left")."\";");

    // in

    $mcTpl->assign("mSiteNavLeft"$mcTpl->fetch('navigation_left.tpl')); 
    und die Variablen in den Templates in {} eingeschlossen. Aber es funktioniert nicht.

    Kann mir vielleicht jemand sagen wie ich das machen muss, damit es klappt?

    Smarty ist ziemlich genial...jedoch auch ziemlich schwer sich einzuarbeiten, weils doch sehr umfangreich ist

    Würde mich über jede Antwort freue, die mir helfen könnte das Problem zu lösen.

    Danke...=)
    Zuletzt geändert von napsio; 06.01.2006, 19:23.

  • #2
    zuerst einmal brichst du deinen code so um, dass man nicht mehr scrollen muss.

    und dann wäre ein url nicht schlecht, wo man sehen kann, was du eigentlich machen willst.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      lol.. ich muss nicht scrollen!!!
      2 meiner pages:

      Kommentar


      • #4
        was meinst du mit code umbrechen?...hab den jetzt einwenig gekürzt...also die wiederholenden teile rausgenommen

        kann leider keinen link posten, da ich es auf nem heimrechner mache...und der rechner ist nicht im netz

        was ich machen will:

        ich möchte eine dynamische navigtion erstellen, die anhand von datenbank einträgen erstellt wird.

        da gibt es 2 optionen

        1. navigationsbox
        bei einer navigationsbox soll eine datei includet werden...z.b. bei einem counter wird z.b. die datei navigation/counter.php includet, die dann in diesem fall die counter daten aus der datenbank holt und ein template ausgibt

        2. linkbox
        bei einer linkbox soll eine neue mysql abfrage gestartet werden, die die links aus der datenbank zieht und anschließend untereinander auflistet

        und das soll dann jeweils für links, rechts, oben und unten geschehen.

        es soll ungefähr so ablaufen wie z.b. beim PHPKIT

        ich hoffe, dass ich es einigermaßen klar erklären konnte

        Kommentar


        • #5
          Original geschrieben von chrpun
          lol.. ich muss nicht scrollen!!!
          ich mache mein fenster NICHT auf fullscreen!
          Original geschrieben von napsio
          was meinst du mit code umbrechen?...hab den jetzt einwenig gekürzt...also die wiederholenden teile rausgenommen
          du musst nur die langen zeilen kürzen. im moment ist es nur (noch) eine.

          zum thema .....

          Original geschrieben von napsio
          ich möchte eine dynamische navigtion erstellen, die anhand von datenbank einträgen erstellt wird.
          soweit konnte ich dir schon folgen.

          Original geschrieben von napsio
          bei einer navigationsbox soll eine datei includet werden
          include? ich denke wir sind bei smarty? musst du da wirklich includen? nein!

          Original geschrieben von napsio
          die die links aus der datenbank zieht und anschließend untereinander auflistet
          im prinzip willst du nur untereinander irgendwelchen content schreiben ....

          Original geschrieben von napsio
          und das soll dann jeweils für links, rechts, oben und unten geschehen.
          das ist auch erst einmal egal. du brauchst ja nur den smarty-block im template mehrfach schreiben.

          Original geschrieben von napsio
          es soll ungefähr so ablaufen wie z.b. beim PHPKIT
          wer oder was ist PHPKIT? bestimmt so ein clicki-bunti-mausschubser-cms.

          Original geschrieben von napsio
          ich hoffe, dass ich es einigermaßen klar erklären konnte
          geht so ... und wo ist nun dein problem?


          erstelle dir für navi + links + usw jeweils ein eigenes template. für jeden teilbereich initialisierst du dir smarty neu und parst das template nicht mit show() sondern mit fetch() und übergibst diese daten an dein haupttemplate der ersten smarty-instanz.
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar


          • #6
            Original geschrieben von Abraxax
            include? ich denke wir sind bei smarty? musst du da wirklich includen? nein!
            ich muss nicht includen, ich will aber, damit ich es modularer halten kann und navigationsboxen erweitern kann ohne großartig am code rumzufummeln

            Original geschrieben von Abraxax
            geht so ... und wo ist nun dein problem?


            erstelle dir für navi + links + usw jeweils ein eigenes template. für jeden teilbereich initialisierst du dir smarty neu und parst das template nicht mit show() sondern mit fetch() und übergibst diese daten an dein haupttemplate der ersten smarty-instanz.
            da du den ersten beitrag bestimmt gelesen hast, hast du bestimmt gesehen, dass ich es so ähnlich bereits versucht habe, es jedoch nicht geklappt hat...

            er zeigt mir bloß die erste box an obwohl in der datenbank mehrere enthalten sind...dabei wird aber der titel ( $mvSiteNavLeftHead=$mvNav['navcat_title']; ) nicht übernommen

            Kommentar


            • #7
              Original geschrieben von napsio
              da du den ersten beitrag bestimmt gelesen hast,
              klar aber nur überflogen ... du erinnerst dich evtl noch an die umbrüche, die nicht ausreichend vorhanden sind?


              und eval() brauchst du überhaupt nicht.

              einfach z.b.

              PHP-Code:
              $smarty->append('content'$smarty2->fetch('subtemplate'));
              $smarty->display() 
              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


              Kommentar


              • #8
                Original geschrieben von Abraxax
                und eval() brauchst du überhaupt nicht.
                darauf will ich doch hinaus...das ist ja das was ich will...ich will von eval weg...eval zu smarty...eval durch smarty ersetzen

                Kommentar


                • #9
                  schaue dir mal mein bsp an.
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar


                  • #10
                    kommt das gleiche bei rum wie bei meinem versuch, den ich oben gepostet habe

                    PHP-Code:
                    $mcTpl->assign("mSiteNavLeft"$mcTpl->fetch('navigation_left.tpl')); 
                    keine änderung...hmm

                    Kommentar


                    • #11
                      kurze frage ... die {} um die variablen hast du aber nur beim posten hier rausgelassen und bei dir sind die drin?
                      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                      Kommentar


                      • #12
                        der code im ersten beitrag ist mein alter code, den ich auf smarty umstellen will...an dem geposteten code ist nichts in richtung smarty geändert

                        ich habe aber eine andere version, die ich wie oben gepostet abgehänder habe...also eval durch smarty ersetzt und {} um die variablen drum

                        Kommentar


                        • #13
                          spiele erst einmal so mit smarty rum, ohne den oben so aufgeblähten code. mache das mit dem fetch() / display() mal an einem einfachen beispiel.

                          so kommen wir hier jedenfalls nicht weiter ....
                          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                          Kommentar


                          • #14
                            okay werde ich machen

                            Kommentar


                            • #15
                              habs das ganze jetzt mal gekürzt und versucht schritt für schritt dran zu gehen...klappt aber immer noch nicht so ganz wies sein soll

                              hier mal der code

                              PHP-Code:
                              $mvNavDb $mcDb->query(
                                  
                              "SELECT * 
                                   FROM "
                              .mTblNavCat.
                                   WHERE navcat_status='1' 
                                       AND navcat_portalid='"
                              .mPortalId."' 

                                   ORDER by navcat_order ASC"
                              );

                              while(
                              $mvNav $mcDb->fetch_array($mvNavDb)){
                                      
                              $mvNavOut[] = $mvNav;
                                      
                                  
                              $mcTpl->assign("mSiteNavLeftVar"$mvNavOut);
                                  if(
                              $mvNav['navcat_align']==1){
                                      if(
                              $mvNav['navcat_box']!=""){
                                          include(
                              "navigation/".$mvNav['navcat_box']);

                                          
                              $mcTpl->assign("mSiteNavLeftBody"$mcTpl->fetch($mvNavTemplate));
                                          
                              $mcTpl->assign("mSiteNavLeftBox"$mcTpl->fetch('navigation_left_box.tpl'));
                                      }
                                  }
                              }

                              $mcTpl->assign("mSiteNavLeft"$mcTpl->fetch('navigation_left.tpl')); 
                              navigation_left.tpl
                              Code:
                              {foreach from=$mSiteNavLeftVar item=aktuelle_id}
                              	{$mSiteNavLeftBox}
                              {/foreach}
                              navigation_left_box.tpl
                              Code:
                              {$mSiteNavLeftBody}
                              navigation/navbox.counter.php
                              PHP-Code:
                              unset($mvNavTemplate);
                              $mvNavTemplate "navigation/counter.tpl"
                              navigation/counter.tpl
                              Code:
                              <b>counter test</b>
                              dann gibts noch ne navbox.login.php...die macht jedoch das gleiche wie die counter, bloß, dass die halt die navigation/login.tpl aufruft in der der text "login test" drin steht.

                              soviel zum code...nun zum problem

                              in der datenbank sind 7 einträge

                              davon haben 3 navcat_align=1 und davon 2 etwas in navcat_box stehen (navbox.counter.php & navbox.login.php)

                              also müssten eigentlich 2 sachen ausgegeben werden (<b>counter test</b> und <b>login test</b>)...das passiert aber nicht...es wird 7 mal "<b>counter test</b>" ausgegeben...es ist auch nicht der erste wert in der datenbank sondern der 3.

                              datenbank tabelle sieht ungefähr so aus:
                              Code:
                              navcat_id | navcat_status | navcat_title | navcat_align | navcat_portalid
                              ------------------------------------------------------------------------
                              1         | 1             | login        | 1            | 1
                              2         | 1             | test1        | 2            | 1
                              3         | 1             | counter      | 1            | 1
                              4         | 1             | test2        | 2            | 1
                              5         | 1             | test3        | 2            | 1
                              6         | 1             | test4        | 1            | 1
                              7         | 1             | test5        | 1            | 1
                              
                              
                              navcat_box         | navcat_order
                              --------------------------------------------
                              navbox.login.php   | 1
                                                 | 1
                              navbox.counter.php | 2
                                                 | 2
                                                 | 3
                                                 | 2
                                                 | 3
                              hoffe, dass mir jetzt n bisschen besser geholfen werden kann....bin total am veverzweifeln...=(

                              Kommentar

                              Lädt...
                              X