Ankündigung

Einklappen
Keine Ankündigung bisher.

KTemplate: Fehler beim Parsen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • KTemplate: Fehler beim Parsen

    Hab folgenden PHP-Code:

    Code:
    <?php  
    include ("./../inc/class_ktemplate.inc.php");
    
    $t = new KTemplate("./../tpl/welcome.tpl");
    
    $t->assign("hallo", "bla");
    
    $t_table = $t->fetchBlock("table");
    
    $t_row = $t_table->fetchBlock("row");
    
    $t_col = $t_row->fetchBlock("col");
    
    // build a table with 5 rows and 5 columns
    for ($row = 1; $row <= 5; $row++)
    {
    
        for ($col = 1; $col <= 5; $col++)
        {
    	
    		// assign a string to the column placeholder object instance
    		$t_col->assign("cellcontent",$col);
    		
    		// put column object instance into row object
    		$t_row->assign("col",$t_col);
    		
    		$t_col->reset();
        }
        // put row into table
        $t_table->assign("row",$t_row);
    
    	$t_row->reset();
    }
    
    // put the complete table object into the main template
    $t->assign("table",$t_table);
    
    // print the results
    $t->out();
    ?>
    tpl-File body-tag:
    Code:
        
        <table border="1">
          
          <tr>
    	
    	<td>
    	  {cellcontent}
    	</td>
    	
          </tr>
          
        </table>
    Aber die HTML-File wird nicht korrekt gefüllt. Ausgabe-Quelltext:
    Code:
      	bla
        <table border="1">
          <tr>{col}</tr>
          
          <tr>{col}</tr>
          
          <tr>{col}</tr>
          
          <tr>{col}</tr>
          
          <tr>{col}</tr>
          </table>
    Kann mir jemand sagen, wieso das nicht geht (vor allem weil es ein Beispiel-Code von KTemplate ist... )??

    Danke, Neo2k3
    www.lanwarscript.de.vu

  • #2
    Kannst du mir sagen, was du mit "geht nicht" meinst?

    Kommentar


    • #3
      joa, der gibt halt nur {col} aus wie im dritten Code. Den Code habe ich halt aus dem Browser kopiert. Für den User würde es dann so aussehen:
      • bla
        {col}
        {col}
        {col}
        {col}
        {col}
      www.lanwarscript.de.vu

      Kommentar


      • #4
        Habs jetzt mal auf einem Server im Internet ausprobiert. Da klappt das. Hat jemand ne Idee wo ich in der PHP-Config anfangen zu suchen soll (PHP 5)?
        www.lanwarscript.de.vu

        Kommentar


        • #5
          error-reporting mal auf E_ALL ?
          [URL="http://www.robo47.net"]robo47.net[/URL] - Blog, Codeschnipsel und mehr
          | :arrow: [URL="http://www.robo47.net/blog/192-Caching-Libraries-and-Opcode-Caches-in-php-An-Overview"]Caching-Klassen und Opcode Caches in php[/URL] | :arrow: [URL="http://www.robo47.net/components"]Robo47 Components - PHP Library extending Zend Framework[/URL]

          Kommentar


          • #6
            error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT

            das muss auf jeden fall an der config liegen. ist übrigens vorkonfiguriert (xampp!!!), aber für lokale zwecke reichts

            hat sonst noch jemand ne idee
            www.lanwarscript.de.vu

            Kommentar


            • #7
              Wieso sonst? ~E_NOTICE schaltet Hinweise aus, zur Fehlersuche sind die aber extrem hilfreich...

              Beispiel
              PHP-Code:
              <?php
              // zig codezeilen
              $meinevariable true;
              // zig codezeilen
              if ($meinevaraible) {
              ?>
              Und du wunderst dich dumm und dappich warum du nicht in die Schleife kommst, die Notice spuckt dir sofort aus, dass $meinevaraible nicht deklariert ist...

              Kommentar


              • #8
                aso wusste die bedeutung der tilde nich , werds mal probieren, thx

                edit: wenn der fehler angezeigt werden würde wäre das ja alles nicht so wild. im code ist ja auch kein fehler, oder warum sollte das sonst auf space4free.net-webspace laufen??
                der fehler liegt irgendwo inna config, die irgendwas im code blockt (vermute ich mal...)

                ich poste hier einfach mal die template-klasse
                Code:
                <?php
                
                define("TEMPLATE_ERR_FILE","Could not load template file.");
                
                /**
                 * KTemplate (former Apolda Simple Template) class - KTemplate.
                 * This file is part of kuerbis.org web tool suite. 
                 *
                 * The complete kuerbis.org classes are distributed under the 
                 * GNU Lesser General Public License.
                 * See the lesser.txt file for details.
                 * 
                 * @package   KTemplate
                 * @author    Ralf Geschke <ralf@kuerbis.org>
                 * @copyright 2002-2003 by Ralf Geschke
                 * @version   $Id: class_ktemplate.inc.php,v 1.8 2003/05/18 16:09:05 geschke Exp $
                 * @access    public
                 */
                class KTemplate
                {
                    
                    var $delimiterStart = "{";
                    var $delimiterEnd = "}";
                    
                    /**
                     * Template text 
                     *
                     * @var      string
                     */
                    var $t;
                
                    /**
                     * This array contains the assigned strings or objects.
                     * @var      array
                     */
                    var $pl;
                
                    /**
                     * Array of template objects and their contents.
                     *
                     * @var     array
                     */
                    var $bl;
                
                    /**
                     * Name of template file
                     * @var     string
                     */
                    var $templatefile;
                
                    /**
                     * Name of class, taken from get_class() function.
                     *
                     * @var    string
                     */
                    var $className;
                
                    /**
                     * Placeholder for optional parameters.
                     *
                     * @var     array
                     */
                    var $params;
                
                    /**
                     * Constructor function. 
                     * If a template filename is submitted, this function will
                     * initialize the template object tree.
                     *
                     * @param    string $filename  Name of template file.
                     * @access   public
                     * @return   void
                     */
                    function KTemplate($filename = "",$params=null)
                	{
                	    /* todo: 
                	       - remove setting error messages from constructor 
                	       ( to a base class ? )
                	    */
                	    $this->className = get_class($this);
                	    $this->params = $params;
                	    $this->loadTemplateFile($filename);
                	}
                    
                    /**
                     * Set start delimiter
                     * Call this function if you wish to change the default start
                     * delimiter '{' to another character.
                     * 
                     * @param    string $delim
                     * @return   void
                     */
                    function setStartDelim($delim="{") 
                	{
                	    $this->delimiterStart = $delim;
                        }
                    
                    /**
                     * Set end delimiter
                     * Call this function if you wish to change the default end
                     * delimiter '}' to another character.
                     *
                     * @param    string $delim
                     * @return   void
                     */
                    function setEndDelim($delim="}") 
                	{
                	    $this->delimiterEnd = $delim;
                        }
                
                    /**
                     * Checks existence of a template variable. 
                     * 
                     * @param    string $varname
                     * @return   boolean
                     */
                    function isAssigned($varname) 
                	{
                	    return isset( $this->pl[$varname] );
                	}
                    
                    /**
                     * Load and initialize template file.
                     * This is only useful if it is not possible to 
                     * set a template filename by creating an instance of
                     * the template class.
                     * 
                     * @param    string $filename  Name of template file.
                     * @access   public
                     * @return   void
                     */
                    function loadTemplateFile($filename = "")
                	{
                	    if (!$filename)
                		return false;
                	    if ($filename)
                		$this->templatefile = $filename;
                	    if (!$fp = @fopen($this->templatefile,'r'))
                	    {
                		die(TEMPLATE_ERR_FILE);
                	    }
                	    $this->t = fread($fp,filesize($this->templatefile));
                	    fclose($fp);
                	    $this->_initTemplate();
                	}
                    
                    /**
                     * Submit a string variable as template content.
                     * This is useful if your template doesn't exist as file,
                     * e.g. if it is saved in a database.
                     * 
                     * @param    string $templatestring
                     * @access   public
                     * @return   void
                     */
                    function loadTemplateContent($templatestring="")
                	{
                	    $this->t = $templatestring;
                	    $this->_initTemplate();
                	}
                    
                    /**
                     * Parse the template.
                     * This function creates the template object tree and replaces contents
                     * of blocks with simple placeholders. 
                     * 
                     * @access   private
                     * @return   void
                     */
                    function _initTemplate()
                	{
                	    preg_match_all("/(.*)/ms",$this->t,$ma);
                	    for ($i = 0; $i < count($ma[0]); $i++)
                	    {
                		$search = "/\s*\n*(.*)\s*\n*/ms";
                		$replace = $this->delimiterStart . $ma[1][$i] . $this->delimiterEnd;
                		
                		$this->bl[$ma[1][$i]] =& new $this->className('',$this->params);
                		$this->bl[$ma[1][$i]]->loadTemplateContent($ma[2][$i]);
                		$this->t = preg_replace($search,$replace,$this->t);
                	    }
                	}
                    
                    /**
                     * Fetch a block out of the template. 
                     * If the block exists, this function returns a Template object,
                     * otherwise nothing (false).
                     * When parsing the template, the blocks will removed
                     * into Template objects and replaced with placeholders. 
                     * The name of the placeholder is identical to the name 
                     * of the removed block.
                     * 
                     * @param    string $blockName
                     * @access   public
                     * @return   object Template or boolean false
                     */
                    function fetchBlock($blockName)
                	{
                	    if (isset($this->bl[$blockName]))
                		return $this->bl[$blockName];
                	    else
                		return false;
                	}
                    
                    /**
                     * Assign value to an existing placeholder. 
                     * If this function is called multiple, the contents
                     * will be added. 
                     * 
                     * The parameter $varName can be a string, an associative 
                     * array or a Template object. 
                     * 
                     * @param    mixed $varName
                     *           Allowed types:    Requirements:
                     *           string            $varValue            
                     *           array             Array format: 
                     *                             array ("name_of_placeholder" => Value,
                     *                                    ... )
                     *           object            Template object or any object which
                     *                             returns HTML code via get() method.
                     *
                     * @param    string $varValue (optional)
                     * @access   public
                     */
                    function assign($varName,$varValue=false)
                	{
                	    if (is_array($varName))
                	    {
                		foreach ($varName as $key => $value)
                		    {
                			$this->pl[$key][] = $value;
                		    }
                	    }
                	    else
                	    {
                		$this->pl[$varName][] = $varValue;
                	    }
                	}
                    
                    /**
                     * Delete the contents of submitted variables.
                     * 
                     * @param    none
                     * @access   public
                     */
                    function reset()
                	{
                	    unset($this->pl);
                	}
                    
                    /**
                     * Print a template with all replacements done.
                     * 
                     * @param    none
                     * @access   public
                     */
                    function out()
                	{
                	    print $this->get();
                	}
                    
                    /**
                     * Returns a template with all replacements done. 
                     *
                     * This new function works without destruction of the
                     * template string. 
                     * It needs some testing, especially due to performance reasons.
                     * 
                     * @param    none
                     * @access   public
                     * @return   string parsed template content
                     */
                    function get()
                	{
                	    $t = $this->t;
                	    if (isset($this->pl) && is_array($this->pl))
                	    {
                		foreach ($this->pl as $key => $value)
                		    {
                			$search = $this->delimiterStart . $key . $this->delimiterEnd;
                			$replaceText = "";
                			for ($i = 0; $i < count($this->pl[$key]); $i++)
                			{
                			    if (is_object($this->pl[$key][$i]))
                				$replaceText .= $this->pl[$key][$i]->get();
                			    else
                				$replaceText .= $this->pl[$key][$i];
                			}
                			$t = str_replace($search,$replaceText,$t);
                		    }
                	    }
                	    return $t;
                	}
                
                }
                
                /**
                 * This is only a wrapper class to the renamed Apolda Simple Template
                 * class. Using this class name is deprecated.
                 * 
                 * This wrapper class will be removed in future versions, so it is 
                 * strongly recommended to switch to the new name KTemplate. 
                 * 
                 * The complete kuerbis.org classes are distributed under the 
                 * GNU Lesser General Public License.
                 * See the lesser.txt file for details.
                 * 
                 * @author    Ralf Geschke <ralf@kuerbis.org>
                 * @copyright 2003 by Ralf Geschke
                 * @version   $Id: class_ktemplate.inc.php,v 1.8 2003/05/18 16:09:05 geschke Exp $
                 * @access    public
                 */
                class Template extends KTemplate
                {
                    function Template($filename="")
                	{
                	    parent::KTemplate($filename);
                	}
                
                
                    
                
                }
                
                ?>
                www.lanwarscript.de.vu

                Kommentar


                • #9
                  Nein, Notices sind keine Fehler sondern Hinweise. Das Script läuft trotzdem, aber möglicherweise mit kleinen Fehlern (aber großer Wirkung) die aber toleriert werden. Informier dich dochmal bevor du "ne das isses bestimmt nicht" sagst.
                  Außerdem sag ich einfach mal so, da das Script schon so professionell dokumentiert ist, dass der Fehler wohl nicht in diesem Script liegt.

                  Kommentar


                  • #10
                    Ich glaube wir reden irgendwie aneinander vorbei
                    Das mit den Hinweisen weiss ich, da wird nur keiner angezeigt und das liegt wiederum daran, dass das Template-System sowie das Beispiel-Script keinen "Fehler" aufweist.
                    Das Problem liegt einfach an der Konfiguration des Servers (vermute ich nach wie vor...). Das heisst irgendwas im Template-System gefällt dem PHP-Interpreter nicht, sodass die Ausgabe einfach falsch ist.
                    Liegt es vielleicht an PHP5?? Weil im Internet hab ichs auf nem PHP4 Server erfolgreich getestet.?
                    www.lanwarscript.de.vu

                    Kommentar


                    • #11
                      OK, liegt an der PHP-Version. Habe jetzt mal PHP4 installiert und da gehts. Hoffentlich wird KTemplate noch portiert.

                      Naja nix für ungut und thx 4 help
                      www.lanwarscript.de.vu

                      Kommentar

                      Lädt...
                      X