php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 27.06.2008, 16:21  
Erfahrener Benutzer
 
Registriert seit: 09.05.2005
Beiträge: 561
BartTheDevil89 kann nur auf Besserung hoffen
Standard Templatesystem mit Funktionen und Variablen drin?

Hallo,

also ich möchte ein Templatesystem umsetzen. Dabei hab ich Templates in dieser Art in einer .tpl-Datei gespeichert:

Code:
<table width="100%"><tr><td>Das ist ein $var und loadwort(wert) mit den Daten....</td></tr></table>
Das sind also ganz normale html-Dateien in denen folgendes vorkommen kann:

$var also ganz normale Variablen
loadwort(wert)-Funktion. (bzw. auch andere Funktionen)

Die Templates werden derzeit einfach durch implode ausgelesen und dann durch eval() durchgejagt.
Dadurch schaffe ich es ja, dass $var also die Variablen ($var wird natürlich vor dem auslesen definiert) in dem ausgelesenen Template ersetzt wird. Aber das Problem sind noch die Funktionen mit loadwort().

Und genau dafür brauche ich jetzt eine Idee, wie ich es noch schaffen kann, dass die Funktionen auch ausgeführt werden. (Funktionen geben natürlich dann nen Wert also einen Begriff zurück)

Danke für die Hilfe

EDIT: Die beste Variante wäre, wenn die Funktion irgendwie vor den Variablen geladen wird.
BartTheDevil89 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 27.06.2008, 18:30  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.253
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Und woher soll der Parser wissen,. ob das eine Funbktion oder ein Satz mit Klammer ist? Wozu überhaupt eval. Warum benutzt Du nicht einfach die normale PHP/HTML Syntax?
nikosch ist offline  
Alt 27.06.2008, 18:41  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo BartTheDevil89,

kann mir nur nikosch anschließen, diese Vorgehensweise ist nicht sauber. Templates - vor allem im Sinne von MVC-View-Templates - sollten weitesgehend von Logig befreit sein. Mit der eigentlichen Arbeit sollte ein Controller beauftragt sein, der dann an den entsprechenden Stellen die nötigen Informationen an das Template übergibt.

Für diese Problemstellung gibt es jedoch unzählige Lösungen. Manche sind besser, manche schlechter, ich würde mit daher einfach eines aussuchen und verwenden. Hier das Rad zum 1000sten Mal neu zu erfinden macht keinen Sinn.

Wenn du direkt im Template Funktionen adressieren willst, könntest du auf TagLibs zurückgreifen, die die Funktion kapseln. Hierfür bietet z.B. CakePHP (mit einigen Hacks) oder das APF (native) eine Lösung.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 28.06.2008, 08:34  
Erfahrener Benutzer
 
Registriert seit: 09.05.2005
Beiträge: 561
BartTheDevil89 kann nur auf Besserung hoffen
Standard

Zitat:
Zitat von nikosch77
Und woher soll der Parser wissen,. ob das eine Funbktion oder ein Satz mit Klammer ist? Wozu überhaupt eval. Warum benutzt Du nicht einfach die normale PHP/HTML Syntax?
Das Ziel ist die Templates einfach bearbeiten zu können ohne eben php-befehlen für die variablen, etc. mit drin zu haben. Kann man diese Funktionen vielleicht auch über Variabeln so in der Art {loadwort;wert} machen? Oder gibts da sonst irgendwie Ideen?
BartTheDevil89 ist offline  
Alt 28.06.2008, 10:02  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo BartTheDevil89,

Zitat:
Oder gibts da sonst irgendwie Ideen?
Schön, dass du meinen Post ignorierst. Ich hatte dazu bereits einen Ansatz erläutert:

Zitat:
Wenn du direkt im Template Funktionen adressieren willst, könntest du auf TagLibs zurückgreifen, die die Funktion kapseln. [..]
Wenn du einen definierten Wert innerhalb des Templates laden möchtest, kannst du eine TagLib implementieren, die genau dieses tut. Sprachabhängige Werte kann man dann z.B. so laden:

Code:
<table width="100%"><tr><td>Das ist ein <my:placeholder name="var" /> und <load:value name="wert" lang="de" /> mit den Daten....</td></tr></table>
Den Platzhalter (<mylaceholder name="var" />) kann man dann aus einem Controller heraus füllen.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 30.06.2008, 20:50  
¯\_(ツ)_/¯
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.814
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Schau dir doch einfach Smarty an. Die haben es so gelöst wie du es brauchen könntest. Entweder du verwendest ein schon funktionstüchtiges System (Smarty etc.) oder du erfindest das Rad eben neu und bastelst dir deine eigene Syntax die dann jeder wieder lernen muss ...
__________________
▇█▓▒░◕‿‿◕░▒▓█▇
Flor1an ist offline  
Alt 01.07.2008, 09:32  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Zitat:
Zitat von BartTheDevil89
Zitat:
Zitat von nikosch77
Und woher soll der Parser wissen,. ob das eine Funbktion oder ein Satz mit Klammer ist? Wozu überhaupt eval. Warum benutzt Du nicht einfach die normale PHP/HTML Syntax?
Das Ziel ist die Templates einfach bearbeiten zu können ohne eben php-befehlen für die variablen, etc. mit drin zu haben. Kann man diese Funktionen vielleicht auch über Variabeln so in der Art {loadwort;wert} machen? Oder gibts da sonst irgendwie Ideen?
Bitte geh doch auf Antworten ein, die man dir postet
1.) macht man das so weil es hoeflich ist
2.) koennte ja was sinnvolles drinstehen
3.) bekommst du sonst keine Antworten mehr (ich rede zumindest nur ungern mit jemandem der mich ignoriert)

dr.e. hat dir bereits vorgeschlagen die PHP-Syntax zu verwenden, ich habe schon bestimmt 5x in den letzten Monaten eine minimale Template-Engine vorgeschlagen, lies dich doch einfach mal in solche alten Threads ein?!

PHP-Code:
<?php
class Template extends stdClass // ok geraten ob die Ableitung klappt
  
public function Render($strFile) {
    require 
$strFile;
  }
?>
PHP-Code:
Ich heisse <?= $this->Name ?>, bin <?= $this->Groesse ?> und von Beruf <?= $this->Beruf ?>, ich habe in <?= $this->TageBisGeburtstag ?> Geburtstag.
PHP-Code:
<?php
$objTemplate 
= new Template();
$objTemplate->Name "Dirk";
$objTemplate->Groesse "1,93m";
$objTemplate->Beruf "Uhrmacher";
$objTemplate->TageBisGeburtstag GetTageBisGeburtstag("1979-07-28");
$objTemplate->Render("my-template.tpl");
?>
Nix mit selbsterfundener Template-Syntax, einfachstes PHP, ohne Einschraenkungen nutzbar (du wirst bei deiner Syntax schnell an ihre Grenzen kommen, siehe Schleifen etc.).
Zergling-new ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Klasse statt globaler Variablen ecomeback PHP-Fortgeschrittene 6 15.07.2008 16:30
Übergeben von Variablen an in PHP eingebundenes Perl-Script shredder01 PHP Tipps 2008 3 04.04.2008 09:25
Datei mit Variablen so includen, dass Variablen nutzbar? BartTheDevil89 PHP Tipps 2008 6 22.01.2008 20:57
Variablen von Funktionen außerhalb nutzen Wing PHP Tipps 2008 5 28.09.2007 17:05
Klassen und externe Funktionen ? ssm PHP-Fortgeschrittene 17 18.07.2007 11:59
unerklärliches Leeren von Variablen KuShi PHP Tipps 2007 2 08.07.2007 15:19
Teil einer Variablen mit einer Variablen ersetzen ? simsalabim PHP Tipps 2007 11 20.03.2007 20:36
komische arrays werden in funktionen nicht angenommen! mollitz PHP Tipps 2007 8 08.03.2007 18:50
grundlegendes zu funktionen LP PHP Tipps 2006 3 17.10.2006 12:08
Funktionen überprüfen und Grafik Funktionen hans.karl2 PHP Tipps 2006 10 31.07.2006 20:08
Variable aus Variablen zusammensetzen juhuwoorps PHP Tipps 2007 1 28.11.2005 21:50
Variablen übergeben bzw. auslesen? PHP Tipps 2005 4 30.01.2005 03:56
[Erledigt] register globals off bei variablen Variablen... PHP Tipps 2005 4 25.01.2005 17:50
Funktionen auslagern und auf variablen zugreifen Crypi PHP Tipps 2004 3 14.10.2004 13:43
Variablen per adresse übergeben rocco PHP Tipps 2004 7 24.07.2004 12:03

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
vbulletin rendering templates and registering variables, templatesystem mit html dateien und eval, uhrmachermeister nikosch, php template system, http://www.php.de/php-tipps-2008/46088-templatesystem-mit-funktionen-und-variablen-drin.html, nikosch uhrmacher, php file::add placeholder($this->objtemplate);, template variable eval, php send variable to template, vbulletin eigene variablen template

Alle Zeitangaben in WEZ +1. Es ist jetzt 18:42 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.