|
Smarty
WARNING: All discussion is moving to https://reddit.com/r/smarty, please go there! This forum will be closing soon. |
|
View previous topic :: View next topic |
Author |
Message |
Paykoman Smarty Rookie
Joined: 07 May 2011 Posts: 34
|
Posted: Fri May 24, 2013 8:27 pm Post subject: Tips zur richtigen Organisation und Umsetzung... |
|
|
Hallöchen,
hab den Titel mal geändert und diesen Beitrag gelöscht.
Zwei Beiträge weiter unten habe ich mal meinen Code gepostet wie ich gedenke mein erstes Templatesystem zu strukturieren.
Würde mich über Feedback freuen!
MFG: Paykoman
Last edited by Paykoman on Sat May 25, 2013 4:02 pm; edited 1 time in total |
|
Back to top |
|
U.Tews Administrator
Joined: 22 Nov 2006 Posts: 5068 Location: Hamburg / Germany
|
Posted: Sat May 25, 2013 6:48 am Post subject: |
|
|
Der Sinn des Template Systems ist die Logik vom Design zu trennen.
Also PHP Kode gehört nicht ins Template.
Um nicht den PHP Kode zu duplizieren, pack das was für header und footer benötigt wird sonst in eine PHP include Datei.
Falls Du doch mal PHP im Template benötigst, ist die saubere Lösung ein Plugin zu schreiben.
Siehe dazu http://www.smarty.net/docs/en/plugins.tpl |
|
Back to top |
|
Paykoman Smarty Rookie
Joined: 07 May 2011 Posts: 34
|
Posted: Sat May 25, 2013 8:29 am Post subject: |
|
|
hallo,
danke für die Antwort, aber da wurde ich etwas missverstanden.
Sei es drum, im Post unten drunter geht es weiter...
MFG: Pay
Last edited by Paykoman on Sat May 25, 2013 4:03 pm; edited 2 times in total |
|
Back to top |
|
Paykoman Smarty Rookie
Joined: 07 May 2011 Posts: 34
|
Posted: Sat May 25, 2013 9:10 am Post subject: |
|
|
So ich habe den Anfang wie mir scheint geschafft!
Wäre um Feedback sehr dankbar damit ich ggf. nicht weiterhin einen falschen Weg einschlage!
So hier mal mein Aufbau (Smarty Aufbau wurde nahezu übernommen und meine Ordner hinzugefügt):
source/config.php (Meine config)
Code: | define('cache_lifetime', 120);
define('force_compile', true);
define('debugging', false);
define('caching', false);
define('tpl_ext', '.tpl');
define('default_tpl', 'default');
// Start Session
session_start();
if( !isset($_SESSION['tpl']) ) { $_SESSION['tpl'] = default_tpl; }
include 'classes/header.class.php'; |
classes/header.class.php (um über all einen Header zu generieren)
Code: | class Header
{
private $site;
private $desc;
private $metadesc;
private $keywords;
private $cssfiles;
private $jsfiles;
public function getHeader($arr){
$this->site = $arr['site'];
$this->desc = $arr['desc'];
$this->metadesc = $arr['metadesc'];
$this->keywords = $arr['keywords'];
$this->cssfiles = $arr['cssfiles'];
$this->jsfiles = $arr['jsfiles'];
$smarty = new Smarty;
$smarty->force_compile = force_compile;
$smarty->cache_lifetime = cache_lifetime;
$smarty->debugging = debugging;
$smarty->caching = caching;
$smarty->assign("srv", $_SERVER['HTTP_HOST'],true);
$smarty->assign("site", $this->site,true);
$smarty->assign("desc", $this->desc,true);
$smarty->assign("metadesc", $this->metadesc,true);
$smarty->assign("keywords", $this->keywords,true);
$smarty->assign("cssfiles", $this->cssfiles,true);
$smarty->assign("jsfiles", $this->jsfiles,true);
$smarty->assign("tpl_dir", $_SESSION['tpl'],true);
include_once 'header.php';
}
} |
index.php
Code: | include_once 'source/config.php';
require('source/Smarty.class.php');
$thisheader = new Header;
$thisheader->getHeader(array(
'site' => 'Startseite',
'desc' => 'My Description :)',
'metadesc' => 'Meta Description',
'keywords' => 'Meta, Keywords, here',
'cssfiles' => array('jquery-ui-1.9.2', 'styles', 'fancybox', 'fw_bootstrap', 'fw'),
'jsfiles' => array('jquery-1.9.0', 'jquery.easing.1.3', 'jquery-ui-1.9.2', 'fancybox', 'fw')
));
$smarty = new Smarty;
$smarty->force_compile = force_compile;
$smarty->cache_lifetime = cache_lifetime;
$smarty->debugging = debugging;
$smarty->caching = caching;
$smarty->assign("name","Fred Irving Johnathan Bradley Peppergill",true);
$smarty->display($_SESSION['tpl'].'/'.'index'.tpl_ext); |
header.php
Code: | // Hier folgt dann das menu das je nach loginstatus variieren wird...
$smarty->assign("htest","menu1",true); // Menu Platzhalter Ausgabe
$smarty->display($_SESSION['tpl'].'/'.'header'.tpl_ext); |
nun templates/default/index.tpl und header.tpl
Code: |
{$name}<br>
my index page :)
|
Code: | <!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>{$srv} :: {$site} - {$desc}</title>
<link rel="shortcut icon" href="templates/{$tpl_dir}/favicon.ico" type="image/x-icon">
{section name=outer loop=$cssfiles}
<link rel="stylesheet" href="templates/{$tpl_dir}/css/{$cssfiles[outer]}.css" type="text/css" media='screen'>
{/section}{section name=outer loop=$jsfiles}
<script src="templates/{$tpl_dir}/js/{$jsfiles[outer]}.js" type="text/javascript"></script>
{/section}
<meta name="description" content="{$metadesc}"/>
<meta name="keywords" content="{$keywords}"/>
<meta name="robots" content="index, follow"/>
<meta name="robots" content="all"/>
<meta name="revisit-after" content="3 days"/>
<meta name="distribution" content="global"/>
<meta name="language" content="de"/>
</head>
<body>
{$htest}<br> |
Joa das wäre mein aktueller Stand
Als nächstes denke ich wird ne contentclass oder so angelgt um hier nicht auch jedes mal den gleichen coden duplizieren zu müssen.
Ist das für den Anfang ok oder gibt es grawierende Anfängerfehler?
MFG: Paykoman |
|
Back to top |
|
Paykoman Smarty Rookie
Joined: 07 May 2011 Posts: 34
|
Posted: Sat May 25, 2013 10:58 am Post subject: |
|
|
So da kommt dann auch schon der nächste Part:
source/classes/gettpl.class.php wurde erstellt:
Code: | class newTPL
{
public function getTPL($arr){
$smarty = new Smarty;
$smarty->force_compile = force_compile;
$smarty->cache_lifetime = cache_lifetime;
$smarty->debugging = debugging;
$smarty->caching = caching;
foreach ($arr as $key => $val) {
$smarty->assign($key, $val,true);
}
$smarty->display($_SESSION['tpl'].'/'.$arr['file'].tpl_ext);
}
} |
index.php wurde geändert auf:
Code: | include_once 'source/config.php';
require('source/Smarty.class.php');
$thisheader = new Header;
$thisheader->getHeader(array(
'site' => 'Startseite',
'desc' => 'My Description :)',
'metadesc' => 'Meta Description',
'keywords' => 'Meta, Keywords, here',
'cssfiles' => array('jquery-ui-1.9.2', 'styles', 'fancybox', 'fw_bootstrap', 'fw'),
'jsfiles' => array('jquery-1.9.0', 'jquery.easing.1.3', 'jquery-ui-1.9.2', 'fancybox', 'fw')
));
// Hier folgt php programm code der alles verarbeitet und die Variablen erstellt + füllt
$name = "new - Fred Irving Johnathan Bradley Peppergill"; // Beispiel
$thistpl = new newTPL;
$thistpl->getTPL(array(
'file' => 'index', // Dateiname zum finden des richtigen Templates
'name' => $name // eineVariable die oben erstellt wurde und nun ans template übergeben wird
// es müssen natürlich alle zu übergebenden Variablen manuell angelgt werden ist ja aber kein Aufwand...
)); |
So hmm ja ich denke das wäre ein Aufbau womit ich leben könnte und vor allem den ich verstehen kann xD
Bin jetzt mit Template Enginen und OOP ja nicht sonderlich gut vertraut und würde mich nach wie vor freuen wenn mir Jemand Fehler nennen würde. Denn ich weiß bis jetzt noch nicht ob es os wie es jetzt gemacht wird klug ist in der Praxis an zu wenden.
Mein jetziger nächster Schritt wird natürlich sein die Datenbank wieder zu integrieren und ein System schaffen das einmal bestimmt ob jemand eingeloggt ist oder nicht und ob eine Seite als Gast geöffnet werden darf oder nicht.
MFG: Paykoman |
|
Back to top |
|
Grizzly Smarty Pro
Joined: 15 Apr 2011 Posts: 172 Location: Germany
|
Posted: Mon May 27, 2013 8:42 am Post subject: |
|
|
Also ich persönlich würde eine "Basisklasse" schaffen (abstract), von der alle Erben, die eine Seite darstellen sollen. Diese Klasse enthält z. B. den Seitentitel, die Beschreibung usw. dann kann man von der erbenden Klasse diese Eigenschaften selbst belegen, wenn man will.
Das mit deinem Array ist so eine Sache, du "bestimmst" sozusagen die Keys, überprüfst aber nicht, ob diese im Array enthalten sind. Das könnte zu Fehlern führen, sollte mal jemand anderes als du entwicklen (oder sich mal vertippen).
Ich habe in meiner Basisklasse eine Eigenschaft die eine Klasse darstellt, die im Prinzip diese ganzen Eigenschaften einer Page hat wie z. B. Title, Description usw. |
|
Back to top |
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|
|