Gå til innhold

Overgang til template-system (smarty)


Gjest Slettet+6132

Anbefalte innlegg

Gjest Slettet+6132

Sitter nå og klør høl i huet. Jeg prøver å finne ut den enkleste måten å gå over fra vanlig output med echo til å bruke et template-system som smarty. Har ikke satt med så forferdeligt mye inn i smarty, men jeg kan vise min nåværende kode så ser dere raskt hvorfor jeg gå over til template-system :p

 

Skjult tekst: (Marker innholdet i feltet for å se teksten):

function dvd_get($start = 0)
{
global $config, $lng;

$start = intval($start);
if($start == 0)
{
 $start = 1;
}
$maxrows = $config['dvd_count'];
$offset = ($start - 1) * $maxrows;

$query = mysql_query("SELECT d.*, c.title as col_title FROM dvd d LEFT JOIN collections c ON (d.collection = c.id) WHERE d.owner = '{$_SESSION['id']}' ORDER BY c.title ASC, d.colnum ASC, d.title ASC LIMIT {$offset}, {$maxrows}");
echo "  <table id=\"dvd\">\n";
echo "  	<tr class=\"dvd-top\">\n";
echo "    <td width=\"150\">{$lng['dvd']['dvd_c']}</td>\n";
echo "    <td width=\"580\">{$lng['dvd']['title']}</td>\n";
echo "    <td width=\"60\" align=\"center\">{$lng['dvd']['type']}</td>\n";
echo "    <td width=\"70\" align=\"center\">IMDb</td>\n";
echo "    <td width=\"80\" align=\"center\">{$lng['dvd']['cover']}</td>\n";
echo "    <td width=\"30\" align=\"center\">{$lng['dvd']['edit_short']}</td>\n";
echo "    <td width=\"30\" align=\"center\">{$lng['dvd']['delete_short']}</td>\n";
echo "  	</tr>\n";

if(mysql_num_rows($query) > 0)
{
 while($row = mysql_fetch_assoc($query))
 {
 	echo "  	<tr class=\"dvd\">\n";
 	echo "    <td class=\"dvd\">" . $row['col_title'] . "</td>\n";
 	if($row['colnum'] != 00 && !empty($row['colnum']))
 	{
   $colnum = $row['colnum'] . ": ";
 	}
 	else
 	{
   $colnum = "";
 	}
 	if($row['prodyear'] != "" && $row['prodyear'] != 0)
 	{
   $prodyear = " ({$row['prodyear']})";
 	}
 	else
 	{
   $prodyear = "";
 	}
 	if($config['mod_rewrite'] != true)
 	{
   echo "    <td class=\"dvd\">{$colnum}<a href=\"{$config['baseurl']}index.php?module=dvd&action=read&target=single&id={$row['id']}\" title=\"{$lng['dvd']['details']}\">" . htmlspecialchars(stripslashes($row['title'])) . "</a>{$prodyear}</td>\n";
 	}
 	else
 	{
   echo "    <td class=\"dvd\">{$colnum}<a href=\"{$config['baseurl']}dvd/single/{$row['id']}\" title=\"{$lng['dvd']['details']}\">" . htmlspecialchars(stripslashes($row['title'])) . "</a>{$prodyear}</td>\n";
 	}
 	echo "    <td class=\"dvd\" align=\"center\">{$row['type']}</td>\n";
 	echo "    <td class=\"dvd\" align=\"center\">";
 	if($row['imdb'])
 	{
   $imdb = htmlspecialchars($row['imdb']);
   echo "<a href=\"$imdb\" title=\"IMDb\" target=\"_blank\"><img height=\"13\" width=\"27\" alt=\"IMDb\" src=\"{$config['baseurl']}static/img/imdb.gif\" /></a>";
 	}
 	else
 	{
   echo "--";
 	}
 	echo "</td>\n";
 	echo "    <td class=\"dvd\" align=\"center\">";
 	if($row['cover'] != "no")
 	{
   echo "<a href=\"{$config['baseurl']}covers/{$row['cover']}\" title=\"{$lng['dvd']['cover']}\" target=\"_blank\"><img height=\"16\" width=\"16\" alt=\"Cover\" src=\"{$config['baseurl']}static/img/icons/download.gif\" /></a>";
   echo " <a href=\"{$config['baseurl']}index.php?module=dvd&action=cover_delete&target=showform&id={$row['id']}\" title=\"{$lng['dvd']['cover_del']}\"><img height=\"16\" width=\"16\" alt=\"{$lng['dvd']['delete_long']}\" src=\"{$config['baseurl']}static/img/delete.png\" /></a>";
 	}
 	else
 	{
   echo "<a href=\"{$config['baseurl']}index.php?module=dvd&action=cover_add&target=showform&id={$row['id']}\" title=\"{$lng['dvd']['cover_add_2']}\"><img height=\"16\" width=\"16\" alt=\"{$lng['dvd']['cover_add_1']}\" src=\"{$config['baseurl']}static/img/icons/new.gif\" /></a>";
 	}
 	echo "</td>\n";
 	echo "    <td class=\"dvd\" align=\"center\"><a href=\"{$config['baseurl']}index.php?module=dvd&action=edit&target=showform&id={$row['id']}\" title=\"{$lng['dvd']['edit_long']}\"><img height=\"16\" width=\"16\" alt=\"{$lng['dvd']['edit_long']}\" src=\"{$config['baseurl']}static/img/edit.png\" /></a></td>\n";
 	echo "    <td class=\"dvd\" align=\"center\"><a href=\"{$config['baseurl']}index.php?module=dvd&action=delete&target=showform&id={$row['id']}\" title=\"{$lng['dvd']['delete_long']}\"><img height=\"16\" width=\"16\" alt=\"{$lng['dvd']['delete_long']}\" src=\"{$config['baseurl']}static/img/delete.png\" /></a></td>\n";
 	echo "  	</tr>\n";
 }
}
else
{
 echo "  	<tr>\n";
 echo "    <td colspan=\"6\">{$lng['dvd']['nodvd']}</td>\n";
 echo "  	</tr>\n";
}
echo "  </table>\n\n";
echo "  <div class=\"text\">\n";
echo "  	<p style=\"margin-top: 10px;\">\n";

$query = mysql_query("SELECT COUNT(id) AS rows FROM dvd WHERE owner = '{$_SESSION['id']}'");
$row = mysql_fetch_assoc($query);
$rows = $row['rows'];
$maxpages = ceil($rows/$maxrows);

$paging = '';
for($page = 1; $page <= $maxpages; $page++)
{
 if($page == $start)
 {
 	$paging .= "     [ $page ] \n";
 }
 else
 {
 	if($config['mod_rewrite'] != true)
 	{
   $paging .= "    <a href=\"{$config['baseurl']}index.php?module=dvd&action=read&target=all&start={$page}\" title=\"{$lng['dvd']['paging_page']} {$page}\"> [ $page ] </a>\n";
 	}
 	else
 	{
   $paging .= "    <a href=\"{$config['baseurl']}dvd/all/{$page}\" title=\"{$lng['dvd']['paging_page']} {$page}\"> [ $page ] </a>\n";
 	}
 }
}
 
if($start > 1)
{
 $page = $start - 1;
 if($config['mod_rewrite'] != true)
 {
 	$prev = "    <a href=\"{$config['baseurl']}index.php?module=dvd&action=read&target=all&start={$page}\" title=\"{$lng['dvd']['paging_page']} {$page}\"> [ {$lng['dvd']['paging_prev']} ] </a>\n";
 	$first = "    <a href=\"{$config['baseurl']}index.php?module=dvd&action=read&target=all&start=1\" title=\"{$lng['dvd']['paging_page']} 1\"> [ {$lng['dvd']['paging_first']} ] </a>\n";
 }
 else
 {
 	$prev = "    <a href=\"{$config['baseurl']}dvd/all/{$page}\" title=\"{$lng['dvd']['paging_page']} {$page}\"> [ {$lng['dvd']['paging_prev']} ] </a>\n";
 	$first = "    <a href=\"{$config['baseurl']}dvd/all/1\" title=\"{$lng['dvd']['paging_page']} 1\"> [ {$lng['dvd']['paging_first']} ] </a>\n";
 }
}
else
{
 $prev = "     [ {$lng['dvd']['paging_prev']} ] \n";
 $first = "     [ {$lng['dvd']['paging_first']} ] \n";
}

if($start < $maxpages)
{
 $page = $start + 1;
 if($config['mod_rewrite'] != true)
 {
 	$next = "    <a href=\"{$config['baseurl']}index.php?module=dvd&action=read&target=all&start={$page}\" title=\"{$lng['dvd']['paging_page']} {$page}\"> [ {$lng['dvd']['paging_next']} ] </a>\n";
 	$last = "    <a href=\"{$config['baseurl']}index.php?module=dvd&action=read&target=all&start={$maxpages}\" title=\"{$lng['dvd']['paging_page']} {$maxpages}\"> [ {$lng['dvd']['paging_last']} ] </a>\n";
 }
 else
 {
 	$next = "    <a href=\"{$config['baseurl']}dvd/all/{$page}\" title=\"{$lng['dvd']['paging_page']} {$page}\"> [ {$lng['dvd']['paging_next']} ] </a>\n";
 	$last = "    <a href=\"{$config['baseurl']}dvd/all/{$maxpages}\" title=\"{$lng['dvd']['paging_page']} {$maxpages}\"> [ {$lng['dvd']['paging_last']} ] </a>\n";
 }
}
else
{
 $next = "     [ {$lng['dvd']['paging_next']} ] \n";
 $last = "     [ {$lng['dvd']['paging_last']} ] \n";
}
 
echo $first . $prev . $paging . $next . $last;

echo "  	</p>\n";
echo "  </div>\n";
}

 

Fælt, ikke sant?

 

Så jeg vil nå prøve å gjøre denne koden litt mer leselig og brukbar ved å bruke et template-system istedenfor. Problemet er bare hvor jeg skal starte, har ingen anelse!

 

Er dette et sted å begynne?

test.php

<?php

require '../libs/Smarty.class.php';

$smarty = new Smarty;

$smarty->assign("dvd_titles", array("dvd1", "dvd2", "dvd3"));
$smarty->assign("dvd_imdbs", array("http://lol/", "http://lol/", "http://lol/"));

$smarty->display("test.tpl");
?>

 

test.tpl

{section name=test loop=$dvd_titles}
   {$dvd_titles[test]}    {$dvd_imdbs[test]}
{/section}

 

For å angi alle tittlene, må jeg da hente dem ut fra databasen og gjøre noe ala dette?

$dvd_titles = array();
while(solen skinner)
{
 $dvd_titles[] = $row['title'];
}
$smarty->assign("dvd_titles", $dvd_titles);

...eller blir det feil? Og hva med paging-systemet, vil ikke det bli noe av det samme?

 

På forhånd takk for alle svar, jeg har virkelig kjørt meg i grøfta her ;)

Lenke til kommentar
Videoannonse
Annonse
Gjest Slettet+6132

Tror faktisk jeg kan klare dette, har prøvd mye frem og tilbake nå og puslespillet begynner å sette seg sammen.

 

test.php

<?php

mysql_connect('localhost', 'root', '');
mysql_select_db('atreyu');

require '../libs/Smarty.class.php';
$smarty = new Smarty;

$collections = array();
$titles      = array();
$types       = array();
$imdbs       = array();
$covers      = array();
$prodyears   = array();

$query = mysql_query("SELECT d.*, c.title as col_title FROM dvd d LEFT JOIN collections c ON (d.collection = c.id) WHERE d.owner = '0001' ORDER BY c.title ASC, d.colnum ASC, d.title ASC LIMIT 0, 30");

while($row = mysql_fetch_assoc($query))
{
$collections[] = $row['col_title'];
$titles[]      = $row['title'];
$types[]       = $row['type'];
$imdbs[]       = $row['imdb'];
$covers[]      = $row['cover'];
$prodyears[]   = $row['prodyear'];
}
$smarty->assign("dvd_collections", $collections);
$smarty->assign("dvd_titles",      $titles);
$smarty->assign("dvd_types",       $types);
$smarty->assign("dvd_imdbs",       $imdbs);
$smarty->assign("dvd_covers",      $covers);
$smarty->assign("dvd_prodyears",   $prodyears);

$smarty->display("test.tpl");
?>

 

test.tpl

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

<head>
<title>Atreyu DVD Manager</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="content-language" content="en" />
<link rel="stylesheet" href="http://atreyu.dev.lan/themes/default/default.css" type="text/css" media="all" />
</head>

<body>
<table id="dvd">
<tr class="dvd-top">
 <td width="150">Collection</td>
 <td width="580">Title</td>
 <td width="60" align="center">Type</td>
 <td width="70" align="center">IMDb</td>
 <td width="80" align="center">Cover</td>
 <td width="30" align="center">E</td>
 <td width="30" align="center">D</td>
</tr>

{section name=test loop=$dvd_titles}
<tr class="dvd">
 <td class="dvd">{$dvd_collections[test]}</td>
 <td class="dvd">{$dvd_titles[test]} ({$dvd_prodyears[test]})</td>
 <td class="dvd" align="center">{$dvd_types[test]}</td>
 <td class="dvd" align="center">{if $dvd_imdbs[test]}<a href="{$dvd_imdbs[test]}" title="IMDb">IMDb</a>{else}-{/if}</td>
 <td class="dvd" align="center">{$dvd_covers[test]}</td>
 <td class="dvd" align="center">-</td>
 <td class="dvd" align="center">-</td>
</tr>

{/section}
</table>
</body>
</html>

 

Har jeg rett fremgangsmåte her? (Hvorfor brukte jeg ikke template-system helt fra starten av? Mye ryddigere! :roll: )

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...