phptemplate.engine (drupal), ähnliches realisieren

versuch13

Erfahrenes Mitglied
Hallo, also mir geht es eigentlich nicht direkt um die template engine von Drupal,
sondern ich möchte etwas ähnliches realisieren. Ich habe einen Blick auf den Drupal
Code geworfen allerdings bringt mich das aufgrund von Verständnis Problemen leider
nicht weiter.

In Drupal hat man die Möglichkeit verschiedene Template Dateien anzulegen.
Zum Beispiel page-default.tpl.php als Template welches des eigentliche HTML
Dokument enthält.

also in etwa
HTML:
Doctype
head 
<body>
   /* Layout bestimmenden Elemente */
   <div id="menu"><?php echo $menu ?></div>
   <div id="content"><?php echo $content ?></div>
<body>

Dann gibt es die Möglichkeit zum Beispiel für Kommentare ein eigenes Template
anzulegen. Diese könnte dann ungefähr so aussehen.

HTML:
<h3><?php echo $title; ?></h3>
<p><?php echo $comment; ?></p>

So, und ähnliches habe ich nun auch vor nur das es nicht die Ausmaße des Templating
in Drupal annehmen soll.


Ok, hier mal ein Beispiel welches ich mir zurecht gemacht habe, es funktioniert auch
soweit. Allerdings möchte ich gerne wissen wie man es besser machen kann.


page.tpl.php

PHP:
<?php

    error_reporting(E_ALL);
    
    $page['title'] = 'Seiten Titel';
    $page['modul'] = 'blog';
    
    $blog['title'][0] = 'Überschrift 1';
    $blog['article'][0] =  'Artikel 1';
    $blog['title'][1] = 'Überschrift 2';
    $blog['article'][1] =  'Artikel 2';
    $blog['title'][2] = 'Überschrift 3';
    $blog['article'][2] =  'Artikel 3';
    
    $template = $page['modul']."-template.php";
    
    function createContent() {
        global $blog;
        global $template;
        $content = '';
        for($i = 0; $i <= count($blog); $i++) {
            $title = $blog['title'][$i];
            $article = $blog['article'][$i];
            $content .= include($template);
        }
    }    

?>
<!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=iso-8859-1" />
<title><?php echo $page['title']; ?></title>
</head>
<body>
<div id="blog">
    <?php createContent(); ?>
</div>
</body>
</html>


blog-template.php

PHP:
<?php if($title): ?>
<h2><?php echo $title ?></h2>
<?php endif; ?>
<?php if($title): ?>
<div class="article"><?php echo $article ?></div>
<?php endif; ?>

Das Array $blog enthält also die Inhalte. Dann wird für jedes Array Element einmal
das Blog Template inkludiert (und da frage ich mich ob es nicht besser geht).

Mir wäre lieber, das array $blog in einen String ($content) zu schreiben und diesen
anhand des blog-template.php zu formatieren.

Also in etwa so:

PHP:
<?php

    error_reporting(E_ALL);
    
    $page['title'] = 'Seiten Titel';
    $page['modul'] = 'blog';
    
    $blog['title'][0] = 'Überschrift 1';
    $blog['article'][0] =  'Artikel 1';
    $blog['title'][1] = 'Überschrift 2';
    $blog['article'][1] =  'Artikel 2';
    
    $template = $page['modul']."-template.php";
    
    /*        
        tue etwas um das array $blog formatiert anhand des blog-template.php 
        in einen String ($content) zu schreiben       
    */

?>
<!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=iso-8859-1" />
<title><?php echo $page['title']; ?></title>
</head>
<body>
<div id="blog">
    <?php echo $content ?>
</div>
</body>
</html>

PHP:
<?php if($title): ?>
<h2><?php echo $title ?></h2>
<?php endif; ?>
<?php if($title): ?>
<div class="article"><?php echo $article ?></div>
<?php endif; ?>

Wichtig ist mir, dass ich in den einzelnen Templates keine Loops haben
möchte. Man sollte also einfach nur eine Variable ausgeben können wie im
Beispiel.


Ja, eventuell kennt sich ja jemand mit Drupal sehr gut aus und weiß wie das dort
funktioniert oder hat trotzdem eine Idee oder Tipp wie man dies so umsetzen könnte.

Vielen Dank schon mal.
 
Zuletzt bearbeitet:
Danke. aber das ist nicht was ich möchte. Ich möchte eben keine HTML Dateien
mit Platzhaltern versehen. Ich finde es so einfach für mich optimal und sehr flexibel.
Aber trotzdem Danke.
 
Das lässt sich ja leicht umschreiben!

Ich finde der Code aus der Website sehr einfach & verständlich, daher kannst du da besser drauf aufbauen als auf den Drupal Code (zumindest aus meiner Sicht). Prinzipiell müsstest du nur die Variablen per "assign" laden, damit das Template die Variable kennt...

Erinnert mich sehr stark an die Template-Engine Savant. Vielleicht schaust du dir diese mal an. Da nutzt man auch HTML/PHP mixed Templates.
 
Naja, ein "foreach" kann schon sinnvoll sein. Ich habe meine Template-Engine um "foreach" erweitert, damit ich eine "news.tpl", welche einen Newsartikel darstellt, mehrfach in die "index.tpl" einbinden kann.

Schreib dir doch die Template-Klasse aus dem Forum da um, dann kannst du loslegen ;)
 
Natürlich ist es sinnvoll. Aber der Loop soll eben nicht erst im besagten Template stattfinden, sondern das Template soll wie in meinem Ausgangspost beschrieben
aussehen können.
 
Wie gesagt, dann schreib die Klasse doch um ;) Dafür ist sie ja da :)

Wenn das so einfach wäre. Vielleicht mißverstehe ich gerade auch etwas, aber die Klasse auf die du verweist funktioniert nunmal ganz anders, und eben nicht so wie ich das gerne hätte. Umschreiben wäre daher auch sinnlos, denn dann könnte ich gleich eine eigene schreiben wenn ich dazu in der Lage wäre. Es geht mir auch nicht um eine Klasse, ist natürlich schöner muss aber nicht sein. Vielleicht habe ich auch nicht deutlich erklärt was ich erreichen möchte? Aber ich denke es sollte zu verstehen sein, dazu verweise ich einfach nochmal auf meinen ersten Post. Trotzdem danke für die Vorschläge. Was vielleicht nicht deutlich wurde, es geht mir auch darum in den templates php code ausführen zu können.
 
Zuletzt bearbeitet:
Ich hole das Thema nochmal hoch da ich noch keine Lösung gefunden habe.

... dazu verweise ich einfach nochmal auf meinen ersten Post. Trotzdem danke für die Vorschläge. Was vielleicht nicht deutlich wurde, es geht mir auch darum in den templates php code ausführen zu können.

Einfach mal mein erstes Post lesen dort wird das Problem beschrieben. Ich hoffe
irgendwer versteht worauf ich hinaus will. Und nochmal ergänzend gefragt, ist es
möglich eine Datei per include einzubinden ohne dass diese sofort ausgegeben
wird? Denn das ist im Prinzip genau was ich möchte, muss ja nicht über include()
laufen soll nur eben ähnlich sein, so dass der Inhalt einer PHP Datei ausführbar
in eine Variable geschrieben werden kann.


Vielen vielen Dank im schon mal.
Grüße
 
Zurück