Smarty Forum Index Smarty
WARNING: All discussion is moving to https://reddit.com/r/smarty, please go there! This forum will be closing soon.

Tips zur richtigen Organisation und Umsetzung...

 
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    Smarty Forum Index -> Language: German
View previous topic :: View next topic  
Author Message
Paykoman
Smarty Rookie


Joined: 07 May 2011
Posts: 34

PostPosted: Fri May 24, 2013 8:27 pm    Post subject: Tips zur richtigen Organisation und Umsetzung... Reply with quote

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
View user's profile Send private message
U.Tews
Administrator


Joined: 22 Nov 2006
Posts: 5068
Location: Hamburg / Germany

PostPosted: Sat May 25, 2013 6:48 am    Post subject: Reply with quote

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
View user's profile Send private message
Paykoman
Smarty Rookie


Joined: 07 May 2011
Posts: 34

PostPosted: Sat May 25, 2013 8:29 am    Post subject: Reply with quote

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
View user's profile Send private message
Paykoman
Smarty Rookie


Joined: 07 May 2011
Posts: 34

PostPosted: Sat May 25, 2013 9:10 am    Post subject: Reply with quote

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 Smile
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
View user's profile Send private message
Paykoman
Smarty Rookie


Joined: 07 May 2011
Posts: 34

PostPosted: Sat May 25, 2013 10:58 am    Post subject: Reply with quote

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
View user's profile Send private message
Grizzly
Smarty Pro


Joined: 15 Apr 2011
Posts: 172
Location: Germany

PostPosted: Mon May 27, 2013 8:42 am    Post subject: Reply with quote

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
View user's profile Send private message Visit poster's website
Display posts from previous:   
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    Smarty Forum Index -> Language: German All times are GMT
Page 1 of 1

 
Jump to:  
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
Protected by Anti-Spam ACP