Templates

DarkSummer

Erfahrenes Mitglied
ich schreib grad ne eigenes template also ne php klasse basieren auf dem tutorials von ach ka ^^ is aufjedenfall n gutes nun wuerd ich aber zu gern wissen wie ich ne block ausgabe realisieren koennte

kann mir einer helfen?
 
na ja ebend zb sowas
Code:
<!-- BEGIN BLOCK -->
<tr>
 <td>{var1}</td>
 <td>{var2}</td>
</tr>
<!-- END BLOCK -->

und sowas ebend einladen von begin bis ende und ausgeben etc :D
so und soviele male , und ich wills halt mal selbst versuchen das meiste klappt ja easy aber das net :D
 
k aber erswart nix sau gutes iis eh ent groß ich zeig sie euch mal
PHP:
<?
/*
   this is my easy parser class
   by derana2k3
   http://www.darksummer.de
*/

class tpl{

      var $template_file;
      var $replace_array;
      var $contentTemplate;

      var $delimiterStart = "{";
      var $delimiterEnd = "}";

      /*
      set a new start delimiter
      */
      function setStartDelim($delim="{")
      {
          $this->delimiterStart = $delim;
      }

      /*
      set a new end delimiter
      */
      function setEndDelim($delim="}")
      {
          $this->delimiterEnd = $delim;
      }
      
      /*
      loads the template file
      */
      function tpl($template_file)
      {
          if(file_exists($template_file))
          {
              $this->template_file = file($template_file);
              return $this->template_file;
          }
          else
          {
              $this->template_file = "";
              die("failed to load template file");
          }
      }
      function assign($searchString,$key=false)
      {
          if(is_array($searchString))
          {
              foreach($searchString as $var => $key)
              {
                  $search = $this->delimiterStart.$var.$this->delimiterEnd;
                  $replace = $key;
                  $this->template_file = str_replace($search,$replace,$this->template_file);
              }
          }
          else
          {
              $search = $this->delimiterStart.$searchString.$this->delimiterEnd;
              $replace = $key;
              $this->template_file = str_replace($search,$replace,$this->template_file);
          }
          return $this->template_file;
      }
      
      }
      
      function out()
      {
          echo(implode("", $this->template_file));
      }
};
?>

so das is se , is wie gesagt wirklich nur einfach hab auch ka ob das ueberhaupt geht so n block zu isolieren

noch kurz zur anwendung
PHP:
$tpl = new tpl('file.html');
$tpl->assign('wert','ich'); // zb so wuerd er {wert} durch ich ersetzen

// geht aber auch mit array 
$replace = array("wert" => "ich");
$tpl->assign($replace);
$tpl->out();
 
Zuletzt bearbeitet:
Hm... also wenn ich mir das so durchlese, sollte diese Klasse gar nicht erwartungsgemäß funktionieren... du wendest ja str_replace in tpl::assign auf ein Array an. Ich würde die Klasse so abändern:

PHP:
class tpl {
	var $template_file;
	var $replace_array;
	var $contentTemplate;

	var $delimiterStart = "{";
	var $delimiterEnd = "}";

	function setStartDelim($delim="{")
	/* ... */
	
	function setEndDelim($delim="}")
	/* ... */
	
	function tpl($template_file)
	{
		if(file_exists($template_file))
		{
			$this->template_file = implode("", file($template_file));
			return $this->template_file;
		}
		else
		{
			$this->template_file = "";
			die("failed to load template file");
		}
	}
	
	function assign($searchString,$key=false)
	/* ... */
	
	function out()
	{
		echo($this->template_file);
	}

	function get()
	{
		return $this->template_file;
	}
};

Und dann folgendermaßen:
PHP:
$maintpl = new tpl("file.html");

$block = "";
while (/*...*/) {
  $blocktpl = new tpl("block.html");
  $blocktpl->assign("wert1", $wert1);
  /* usw */
  $block .= $blocktpl->get();
}

$maintpl->assign("block", $block);
$maintpl->out();
 
hmm stimmt daran hab ich auch scho gedacht einfach den zu widehrolenden block in ne extra html zu machen aber ichd acht das geht auch so ausserdem funzt die klasse :) ich überprüf ja vorher ob $searchString n array ist oder nicht wenn nicht muss oben auch noch key angegeben sein ^^
 
mir ist was aufgefallen, was ziemlich unschön ist, vielleicht ist das auch der fehler...
nämlich hast du den wert und den key anscheinend vertauscht beim ersetzen.
du benutzt nämlich dein array so...
$bla["ich bin der inhalt"] = "content";

jetzt ersetzt du {content}, also den wert durch den key, is irgendwie seltsam, oder?
 
Zurück