Tutorial gesucht: HTML und PHP sauber trennen?

Cyperfriend

Der ohne Avatar
Registriert
14 Juli 2013
Beiträge
1.123
Ich suche ein Tutorial, gerne auch als Videotraining, wo man lernt, wie man HTML und PHP wirklich sauber voneinander trennt. Bislang geschieht das bei mir eher solala, aber nicht wirklich konsequent. Wichtig wäre deutsche Sprache.
 
Ich konnte mich bisher mit noch keinem Framework anfreunden.
Das war mir immer irgendwie zu globig. Der Zwang alles und jeden in ein Objekt pressen zu müssen missfällt mir da irgendwie.
Zum Spielen hab ich mir deshalb mal eine eigene Boilerplate zusammen gebastelt
 
  • Thread Starter Thread Starter
  • #5
Gibts da keine "einfache(re)" Möglichkeit? Ich bin gerne möglich unabhängig und tue mich schwer da mit was vorgegebenen zu arbeiten, dass ich darüber hinaus auch nicht verstehe.
 
Smarty ist extrem einfach und kann ausreichend, solltest Du mal eine Chance geben.
 
Könnte man z.B. mit einer Template-Engine wie Smarty machen:

hab mich heute mal an diesem Tutroial gewagt... doch ab dem Kapitel Layouts quittiert alles den Dienst...

sobald man die smtemplate.php bearbeitet und die $this->addTemplateDir...-Zeile hinzufügt und die gibt es einen Parse error, den ich partou nicht finde...
[src=php]
<?php

/* Smarty-Dateien laden */
require_once('smarty/Smarty.class.php');
require_once('smtemplate_config.php');


/* An dieser Stelle können Applikations spezifische Bibliotheken geladen werden
* Bsp: require(bib.lib.php);
* */

class SMTemplate extends Smarty {
/**
* Konstruktor.
* Erzeugt eine neue Smarty-Instanz und konfiguriert die Smarty-Pfade
*/

function __construct(){
parent::__construct();

global $smtemplate_config;
$this->template_dir = $smtemplate_config['template_dir'];
$this->addTemplateDir($smtemplate_config['layouts_dir']);
$this->compile_dir = $smtemplate_config['compile_dir'];
$this->cache_dir = $smtemplate_config['cache_dir'];
$this->config_dir = $smtemplate_config['config_dir'];
}

function render($template, $data = array(), $layout = 'page') {
foreach($data as $key => $value){
$this->assign($key, $value);
}

$content = $this->fetch($template . '.tpl');
$this->assign('__content', $content);

$this->display($layout . '.tpl');
}

}


?>
[/src]

index.php
[src=php]<?php

require_once('lib/smtemplate.php');

$data = array(
'user' => 'Coding Pioneers',
'date' => time()
);

$tpl = new SMTemplate();
$tpl->render('start');

?>[/src]

Error:
Fatal error: Uncaught Error: [] operator not supported for strings in F:\_MyWebServer\htdocs\www\smarty_test\lib\smarty\Smarty.class.php:791 Stack trace: #0 F:\_MyWebServer\htdocs\www\smarty_test\lib\smtemplate.php(23): Smarty->addTemplateDir('layouts') #1 F:\_MyWebServer\htdocs\www\smarty_test\index.php(10): SMTemplate->__construct() #2 {main} thrown in F:\_MyWebServer\htdocs\www\smarty_test\lib\smarty\Smarty.class.php on line 791

Versteh ich das aktuell richtig das er ein Problem mit der zeile "$this->addTemplateDir($smtemplate_config['layouts_dir']);" hat?
 
Klingt als wäre deine Config kaputt. Kannst du die smtemplate_config.php mal posten?
 
Die entspricht copy paste dem verlinkten Tutorial

[src=php]
<?php

$smtemplate_config =
array(
'layouts_dir' => 'layouts',
'template_dir' => 'views/',
'compile_dir' => 'lib/smarty/templates_c/',
'cache_dir' => 'lib/smarty/cache/',
'config_dir' => 'lib/smarty/config/',
);
?>
[/src]

Ich habe immer einen step gemacht und dann im browser die seite aktuallisiert. Die Fehler traten erst auf nachdem ich die Zeile

"$this->addTemplateDir($smtemplate_config['layouts_dir']);"

hinzugefügt habe und dann laut tutorial die renderfunktion angepasst habe.

ich habe in der config auch schon ausprobiert, anstelle von von "'layouts_dir' => 'layouts'," >> "'layouts_dir' => 'layouts/'," zu schreiben
 
Ohne je Smarty benutzt zu haben: Ersetz mal diese Zeile [src=php]$this->template_dir = $smtemplate_config['template_dir'];[/src] durch eine von den beiden: [src=php]$this->addTemplateDir($smtemplate_config['template_dir']);
$this->addTemplateDir($smtemplate_config['template_dir'], 'one');[/src]
Die gibt an, dass [kw]$teplate_dir[/kw] nicht mehr verwendet werden sollte (und ab 3.1 unsichtbar ist).
 
Es gibt viele template engines. Smarty, Blade, Twig, etc.
Smarty ist eine der bekanntesten und beliebtesten. Ohne Englisch Kenntnisse wirst du aber mit keiner der engines weit kommen. Die Dokus sind alle Englisch, auf die bist du ja angewiesen.

"Alles und jeden in eine Class zu packen" hält aber Ordnung, und strukturiert deinen Code, wenn du es denn zulässt. Wenn du den View Ansatz willst, also eine renderengine. Kommst du um einen Controller kaum drum herum. Das einzige was dann noch fehlt wäre ein Model und zack hast du eine MVC Struktur die normalerweise auf Klassen basiert.
Würde hier erstmal auch ein Framework empfehlen, dann hast du eine saubere MVC Trennung und meist auch eine Render engine.
 
Läuft denn das?
index.php:
[src=php]
<?php

require_once( 'Smarty.class.php');

$smarty = new Smarty();

$smarty->setTemplateDir('./templates/');
$smarty->setCompileDir('./templates_c/');
$smarty->setConfigDir('./configs/');
$smarty->setCacheDir('./cache/');

$smarty->assign('name','Ned');

//** un-comment the following line to show the debug console
//$smarty->debugging = true;

$smarty->display('index.tpl');

?>
[/src]

index.tpl
Code:
Expand Collapse Copy
Hello {$name}
 
Läuft denn das?
index.php:
[src=php]
<?php

require_once( 'Smarty.class.php');

$smarty = new Smarty();

$smarty->setTemplateDir('./templates/');
$smarty->setCompileDir('./templates_c/');
$smarty->setConfigDir('./configs/');
$smarty->setCacheDir('./cache/');

$smarty->assign('name','Ned');

//** un-comment the following line to show the debug console
//$smarty->debugging = true;

$smarty->display('index.tpl');

?>
[/src]

index.tpl
Code:
Expand Collapse Copy
Hello {$name}

funktioniert leider nicht, dafür müsste das komplette drum herum umstrukturiert werden. auf basis der jetzigen struktur aus dem tutorial brachte diese lösung keinen erfolg

Edit: Nun funktioniert es, in der

page.tpl

[src=html5]
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<title>Home</title>
</head>

<body>
<header>
<h2>Header Content</h2>
<hr />
</header>

<div>
{$__content|minimize}
</div>

<footer>
<hr />
<h2>Footer Content</h2>
</footer>
</body>
</html>

[/src]

gibt es wohl ein Problem mit der zeile "{$__content|minimize}", somit ein Problem mit dem im Tutorial erstellten minimizer: "smarty_modifier_minimize.php" müssen irgendwo "selbstgeschriebene" Variablenmodifier eingebunden werden? denn das ging im Tutorial nicht hervor.

Ich habe nun erstmal die Zeile "{$__content|minimize}" entfernt, dann funktionierte auch @Raktorium-M ansatz beide Templateordner via addTemplateDir() einzubinden. VIELEN DANK!

EDIT2:
Nun muss ich herausfinden wie das mit Minimizer genau funktioniert, denn dieser soll ja den content in das page element einbauen

Fatal error: Uncaught --> Smarty Compiler: Syntax error in template "file:F:\_MyWebServer\htdocs\www\smarty_test\layouts\page.tpl" on line 14 "{$__content|minimize}" unknown modifier 'minimize' <-- thrown in F:\_MyWebServer\htdocs\www\smarty_test\lib\smarty\sysplugins\smarty_internal_templatecompilerbase.php on line 14

bekomme ich nun angezeigt, wenn "{$__content|minimize}" in der page.tpl eingefügt wird

EDIT3: wenn ich "{$__content|minimize}" mit "{$__content}" lädt er den content
 
Zuletzt bearbeitet:
Zurück
Oben