Gå til innhold

Feil i template-funksjon.


Anbefalte innlegg

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 av Hayer
Lenke til kommentar
Videoannonse
Annonse
Gjest Slettet+1298342134

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
Gjest Slettet+1298342134

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 av Slettet+1298342134
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...