Torsten: Navigation mit Smarty

Hallo Leute,

ich versuche jetzt seid zwei Tagen eine vernünftige Navigation(natürlich ohne Frames) mit Smarty hinzubekommen.
Mit reinem PHP hab ich das früher immer so gemacht:
[HTML]
<head>
<?php
  if ($page == "") $page = "start.htm";
?>
</head>
<body>
<div class="nav">
  <a href="index.php?page=seite1.htm">Home</a><br>
  ...
</div>
<div class="content><?php include($page); ?></div>
</body>
[/HTML]
eine wunderbare Sache!

Nun, dass jetzt in Smarty zu realisieren ist etwas umständlicher als ich dachte.
Bisher habe ich es so gemacht:
[PHP]
// index.php:
<?php
  require 'smarty/MySmarty.class.php';
  define ('TEMPLATE_DIR', 'smarty/templates');

if ($page == "") $page = TEMPLATE_DIR."/start.tpl";

$handle = fopen($page, "r");
  $contents = fread($handle, filesize($page));
  fclose($handle);

$smarty = new MySmarty;
  $smarty->assign('contents',$contents);
  $smarty->display("index.tpl");
?>
[/PHP]
[HTML]
<!-- index.tpl -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<body>
  <div class="top"></div>
  <div class="nav">
    <a href="index.php?page=smarty/templates/seite1.tpl">seite1</a><br>
    ......
  </div>
  <div class="content">{$contents}</div>
</body>
[/HTML]

funktioniert zwar soweit, ist aber keine wunderbare Sache.
Weil meine Navigation hier nur auf Template-Dateien verlinkt werden kann, d.h. also, ich kann nur auf HTML verlinken, was ist aber wenn ich auf PHP-Dateien verlinken will?

Angenommen in meiner Navigation gibt es einen Button "Kontakt", dieser Link verweist mich auf ein Kontakt-Formular, dieses Kontakt-Formular braucht aber PHP-Code!

Ich könnte zwar den kompletten PHP-Code der auf der kompette Website benötigt wird in die index.php hauen und es dann wenn es gebraucht wird mittels  $smarty->assign() an die jeweiligen Templates übergeben. Das würde allerdings eine sehr lange Ladezeit in Ansrpuch nehmen.
Versteht Ihr meine Problematik?

Ich bin gerade dabei mich in die CMS und Smarty Welt einzuarbeiten, habe also überhaupt noch keine Erfahrung diesbezüglich.

Vielleicht ist mein Ansatz auch falsch!?
Kann mir jemand zeigen wie ich meine gute alte Navigationstechnik in Smarty verwenden kann?

Gruß
Torsten

  1. hallo torsten,

    ich erlaube mir den ersten teil zu überspringen, da das ein recht unüberschaubares gebilde ist, für das es zu entwursten jetzt zu spät ist.

    werden kann, d.h. also, ich kann nur auf HTML verlinken, was ist aber wenn ich auf PHP-Dateien verlinken will?
    das musst du natürlich vorher einplanen. i.d.r. hast du (oder solltest du) zu jeder anzuzeigenden php-seite eine korrespondierende html-seite haben. ausgenommen, es gibt oft die gleiche struktur für mehrere seiten (zb. newsmeldungen), dann hast du für alle newsmeldungen nur ein template (html datei).

    dieser Link verweist mich auf ein Kontakt-Formular, dieses Kontakt-Formular braucht aber PHP-Code!

    wie eben gesagt.
    ich glaube, man kann es als üblich bezeichnen, dass einfach das ganze menu mit einem array gefüllt wird. damit hast du (bei der erstellung des array) die möglichkeit, alle links passend auszugeben. der array wiederum kann einfach in einer datei gespeichert sein, oder aus der db kommen, oder xml - was das herz begehrt.

    wichtig ist dabei, dass die auslagerung der menupunkte deshalb erfolgt, damit sie dynamisch anpassbar sind. wenn du eine seite mit 5 menupunkten hast, dann brauchst du die nicht in einem array übergeben. in dem fall kannst du die links auch einfach in dem template 'hart vercoden'. wenn du allerdings eben erwähnte newsmeldungen intergrierst, ist ein dynamisches menu äusserst angebracht, da du in dem fall das menu aus der datenbankabfrage der newsmaldungen erzeugst.

    Ich könnte zwar den kompletten PHP-Code der auf der kompette Website benötigt wird in die index.php hauen und es dann wenn es gebraucht wird mittels  $smarty->assign() an die jeweiligen Templates übergeben. Das würde allerdings eine sehr lange Ladezeit in Ansrpuch nehmen.

    das hier erscheint mir schleierhaft. definitiv ist es aber eine schlechte idee.

    Vielleicht ist mein Ansatz auch falsch!?

    das ist er. versuch mal die herangehensweise (auf dem papier):
    * jede seite bekommt eine html datei
    * gemeinsamkeiten zwischen den einzelnen html seiten erkennen und mit möglichst null html-code in eine php-logik verpacken
    * ähnliche html seiten zusammenfassen zu einem gemeinsamen template. dabei entsteht oft ein logikanteil in den templates, was nicht ausarten darf. besonders bei smarty besteht die gefahr, dass zu viel anwendungslogik im template landet.

    andere leute schreiben da bücher drüber, reicht also erstmal. es gibt nämlich abendbrot ;)

    andreas

    1. Hi,

      viel Text -> wenig geholfen!
      ich will doch nur ne stink normale Navigation wie diese hier:

      <head>
      <?php
        if ($page == "") $page = "start.htm";
      ?>
      </head>
      <body>
      <div class="nav">
        <a href="index.php?page=seite1.htm">Home</a><br>
        ...
      </div>
      <div class="content><?php include($page); ?></div>
      </body>
      Wie man navigiert in HTML ist mir bekannt, aber nicht wie ich es in Smarty realisieren soll.
      Hab ich ja auch schon soweit getan, siehe erstes Posting von mir. Problem ist, ich weiß einfach nicht wie ich auf PHP-Dateien verlinken soll, mein Beispiel verlinkt auf tlp-Dateien.
      Das ergibt aber Probleme für mich, ich muss auf PHP-Dateien verlinken, weiß aber nicht wie.

      wie war das nochmal? Bilder sagen mehr als Texte, in diesem Fall, sagt Code mehr als Text. Sorry aber dein getexte hat mehr echt kein Meter geholfen. Boar bin ich genervt, ich glaub ich verschieb Smarty in den Paperikorb...

      Ich würde mir wünschen meine Posting vielleicht etwas genauer durchzulesen...

      einen schönen abend noch.
      Torsten

      1. Ich würde mir wünschen meine Posting vielleicht etwas genauer durchzulesen...

        bleib mal aufm boden junge. offensichtlich fehlen dir ein paar grundlagen, die man auch mit der süssesten engelsgeduld nicht in 5 minuten abdeckt.

        ich habe deine frage verstanden und auch darauf geantwortet:
        wenn deine links auf die templates laufen, musst du sie
        a) manuell auf deine php seiten setzen
        b) dynamisch auf deine php seiten setzen

        für b) benutzt man üblicherweise arrays, welche dann im template mit einem foreach durchlaufern werden können. beispiele dafür findest du z.b. auf der smarty seite. wenn du die gelesen hast, kommst du weiter.

        ich will doch nur ne stink normale Navigation wie diese hier:

        <head>
        <?php
          if ($page == "") $page = "start.htm";
        ?>
        </head>
        <body>
        <div class="nav">
          <a href="index.php?page=seite1.htm">Home</a><br>
          ...
        </div>
        <div class="content><?php include($page); ?></div>
        </body>

        da ist keine navigation zu erkennen. nur ein link.

        einen schönen abend noch.

        hab ich

        1. da ist keine navigation zu erkennen. nur ein link.

          ok, du hast mich nicht verstanden. Macht nix, hab Smarty gerade in den Papierkorb geschoben.

          Gruß
          Torsten

          1. Hallo Torsten,

            ok, du hast mich nicht verstanden. Macht nix, hab Smarty gerade in den Papierkorb geschoben.

            dann wäre es auch langsam an der Zeit nicht noch weitere Postings aufzumachen, sondern auf Fragen (vgl.:https://forum.selfhtml.org/?t=103371&m=636978), die als Grundlage diesen Enschluß schon vorweggenommen haben, mit einer Antwort zu reagieren...

            Gruß aus Berlin!
            eddi

            1. Hallo,

              dann wäre es auch langsam an der Zeit nicht noch weitere Postings

              ....
              siehe Datum! verstehe! und alles wird gut!

              Gruß
              Torsten

  2. Hallo Torsten,

    ich versuche jetzt seid zwei Tagen eine vernünftige Navigation(natürlich ohne Frames) mit Smarty hinzubekommen.

    richtig - das hast du aber bereits in https://forum.selfhtml.org/?t=103421&m=636979 versucht - warum bleibst du also nicht in deinem Thread?

    Grüße aus Nürnberg
    Tobias

    1. Hi Tobias,

      richtig - das hast du aber bereits in https://forum.selfhtml.org/?t=103421&m=636979 versucht - warum bleibst du also nicht in deinem Thread?

      ähm, wenn ich ehrlich sein soll, weiß ich dass jetzt auch nicht mehr. Ich habe mich aber mittlerweile entschieden die Finger von Smarty zu lassen. Mein Ziel war es eigentlich gewesen PHP-Code von HTML-Code, so gut wie es geht zu trennen. Smarty ist dafür zu komplex. Bin jetzt dabei eine eigene Art Template-Engine in PHP zu entwerfen, und bis jetzt bin ich davon mehr begeistert als ich es von Smarty war.

      Gruß
      Torsten

      1. echo $begrueszung;

        Smarty ist dafür zu komplex. Bin jetzt dabei eine eigene Art Template-Engine in PHP zu entwerfen, und bis jetzt bin ich davon mehr begeistert als ich es von Smarty war.

        Wenn es was einfaches sein soll, schau doch mal bei PEAR vorbei und sieh dir mal das Package HTML_Template_IT an (oder das etwas umfangreichere auf IT basierende HTML_Template_Sigma).

        http://pear.php.net/manual/en/package.html.php

        echo "$verabschiedung $name";