Hayer Skrevet 11. april 2008 Del Skrevet 11. april 2008 (endret) Hei! Her er template-classen class Template { /********************************************************************* VARIABLES Setting our variables *********************************************************************/ var $template; //The template name var $template_string; //The template string will be stored here var $prefix = "{"; //The variable prefix character. var $suffix = "}"; //The variable suffix character. var $var_array = array(); //The values of your variables will be stored here var $root; function selectTemplate($filename) { $this->template = "template/" . $filename . ".htm"; } function addVar($name, $value) { //storing our variable and its value into an array $this->var_array[$name] = $value; } function loadFile() { //saving its contents into a string / $this->template_string = file_get_contents("../" . ($this -> template)); } function replaceVars() { //The foreach loop is very useful when we want to loop through //associative arrays. foreach($this->var_array as $assoc => $value) { //appending the variable prefixes to match. ex: {VAR_NAME} $var_name = $this->prefix.$assoc.$this->suffix; //replacing every instance of the variable with it's corresponding value. //so {VAR_NAME} becomes "this is my variable" $this->template_string = str_replace($var_name, $value, $this->template_string); } } function Parse() { //loading the file $this->loadFile(); //setting the variables $this->replaceVars(); //outputting the newly parsed template :) // ** return $this->template_string; print $this->template_string; } }//end of class ?> (Husker ikke hvor jeg lastet den ned, uansett cred til h*n som har skrevet den) Og her er en del av nyhets-scriptet mitt som kaller template-funksjonen $max = 5; $current = 0; while($Rad=mysql_fetch_array($result) and $current < $max+1) { $Template[$current] = new Template; $Template[$current] -> selectTemplate("news"); $Template[$current] -> addVar("Id",$Rad['id']); $Template[$current] -> addVar("Overskrift",$Rad['overskrift']); $Template[$current] -> addVar("Nyhet",$Rad['nyhet']); // Henter brukerinfo om brukeren som har skrevet nyheten. $brukerID = $Rad['bruker']; $SQL = "SELECT * FROM brukere WHERE id='$brukerID'"; $result = mysql_query($SQL); $BrukerRad = mysql_fetch_row($result); $Template[$current] -> addVar("BrukerId",$BrukerRad[0]); $Template[$current] -> addVar("BrukerNick",$BrukerRad[6]); // nr 6 pga den peker til kolonnen "nick" $Template[$current] -> Parse(); $current++; } Problemet er at databasen / tbl'n som innholder 10nyheter, skal 5 skrives ut.. men denne skriver bare ut 1.. Noen som vet hvorfor? Ser ut til at template-funksjonen Parse() ikke liker å bli kalt i while loop for meg. SQL-spørringen til tbl'n er SELECT * FROM nyheter ORDER BY timestamp DESC edit : $Template[current] ble bare lagt til for debugging, glemte å fjerne den. Før brukte jeg bare $Template . Endret 11. april 2008 av Hayer Lenke til kommentar
Gjest Slettet+1298342134 Skrevet 12. april 2008 Del Skrevet 12. april 2008 Jeg ser ikke hvorfor denne koden ikke skal fungere, har du satt på error_reporting og sjekket at SQLen din gjør det den skal? Og jeg ser du bruker litt php og en ekstra spørring for å hente brukernavnet på den som skrev nyheten, du kan få alt i en spørring: SELECT nyheter.id, nyheter.overskrift, nyheter.nyhet, brukere.nick FROM nyheter INNER JOIN brukere ON brukere.id = nyheter.bruker ORDER BY timestamp DESC Lenke til kommentar
Hayer Skrevet 12. april 2008 Forfatter Del Skrevet 12. april 2008 Takker, men må få den til å funke først. btw; hvordan skriver jeg f.eks $Rad['id'] med den selecten der? Lenke til kommentar
Hayer Skrevet 12. april 2008 Forfatter Del Skrevet 12. april 2008 *bump* *bump* Help? Lenke til kommentar
Gjest Slettet+1298342134 Skrevet 12. april 2008 Del Skrevet 12. april 2008 (endret) Her ligger feilen din: // Henter brukerinfo om brukeren som har skrevet nyheten. $brukerID = $Rad['bruker']; $SQL = "SELECT * FROM brukere WHERE id='$brukerID'"; $result = mysql_query($SQL); $BrukerRad = mysql_fetch_row($result); Du setter $result variabelen til å peke til et nytt datasett istedenfor det som holder alle nyhetene dine, derfor får du bare første nyheten. Her har jeg skrevet litt om koden din: $sql = "SELECT nyheter.id, nyheter.overskrift, nyheter.nyhet, brukere.nick, brukere.id AS brukerid FROM nyheter INNER JOIN brukere ON brukere.id = nyheter.bruker ORDER BY timestamp DESC LIMIT 0,10"; $result = mysql_query($sql); while($Rad = mysql_fetch_array($result)) { $Template = new Template; $Template -> selectTemplate("news"); $Template -> addVar("Id", $Rad['id']); $Template -> addVar("Overskrift", $Rad['overskrift']); $Template -> addVar("Nyhet", $Rad['nyhet']); $Template -> addVar("BrukerNick",$Rad['nick']); $Template -> addVar("BrukerId", $Rad['brukerid']); $Template -> Parse(); } Dette henter bare ut de 10 første nyhetene. Endret 12. april 2008 av Slettet+1298342134 Lenke til kommentar
Hayer Skrevet 13. april 2008 Forfatter Del Skrevet 13. april 2008 Takker gjorde det om til $result1. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå