This PHP generate ONE page. I need more...

PHP programming forum. Ask questions or help people concerning PHP code. Don't understand a function? Need help implementing a class? Don't understand a class? Here is where to ask. Remember to do your homework!

Moderator: General Moderators

Post Reply
paolone
Forum Commoner
Posts: 37
Joined: Tue Jun 11, 2002 10:18 am

This PHP generate ONE page. I need more...

Post by paolone »

Hi dears! i found this useful script to manage the content of web news. It generate a file with the summary and the respective page with the full article. My problem is that i need to generate different pages, for different languages (5 in total). I modified it, but apparently there is an error somewhere. This is what i get
"Add Article Template Error: set_file: For handle SummaryPage filename is empty."
What i modified is infact the 'set_file' proprieties. I paste here the full script. The original "news.php:

Code: Select all

<?
        include ("template.inc");
        include ("config.php");

	$summary_template = "t_summary.html";
	$article_template = "t_article.html";
	$max_summary = 5;

	function summary_page ($subject, $date, $summary, $article_id)
	&#123;
		global $summary_template;
        	$t = new Template();
        	$t->set_file("SummaryPage", $summary_template);
		$article_url = "article_".$article_id.".html";
		$date = nl2br($date);
		$summary =  nl2br($summary);	 
		$t->set_var( array(
				"subject" => $subject,
				"date"    => $date,
				"summary" => $summary,
				"article_url" => $article_url
				));
		$t->parse("Summary", "SummaryPage");
		return $t->get_var("Summary");
	&#125;

	function main_page ($subject, $date, $summary, $article_id, $body)
	&#123;
		global $article_template;

                $t = new Template();
                $t->set_file("ArticlePage", $article_template);
                $article_url = "article_".$article_id.".html";
                $date = nl2br($date);
                $summary =  nl2br($summary);
                $body =  nl2br($body);
                $t->set_var( array(
                                "subject" => $subject,
                                "date"    => $date,
                                "summary" => $summary,
                                "body" => $body,
                                "article_url" => $article_url
                                ));
                $t->parse("Article", "ArticlePage");
                return $t->get_var("Article"); 
	&#125;

	function add_article($filename, $news)
	&#123;

		if(file_exists($filename))&#123;
			$fh = fopen($filename, "r");
			$old_news = fread($fh, filesize($filename));
			fclose($fh); 
		&#125;

		/* TODO: Multipage articles
			preg_match_all("<!--ARTICLE PAGE=(\d*)-->", $old_news, $matches;
		
			if( count($matches&#1111;0]) >= $max_summary)&#123;
				$oldfilename = $filename.($matches&#1111;0]&#1111;0]+1);
			&#125; 
		*/

		$fh = fopen($filename, "w");
		$news = stripslashes($news);
		fwrite($fh, "\n<!--ARTICLE-->\n$news $old_news");
		fclose($fh);
	&#125;

?>

<?
	if(strcmp($subject, ""))&#123;	
		if(!(strcmp($passwd, $password)))&#123;	
			add_article("article_summary.html", summary_page($subject, $date, $summary, $article_id));
			add_article("article_$article_id.html", main_page($subject, $date, $summary, $article_id, $body));
			echo "<p> Article has been added! <p>";
		&#125;else&#123;
			echo "<p><b> Password is wrong! </b>";
		&#125;
	&#125;
?>


<form action=news.php method=post>
<table border=0>
<tr> <td> (Password): </td><td> <input type=text name=passwd size=30> </td></tr>
<tr> <td> Subject: </td><td> <input type=text name=subject size=30> </td></tr>
<tr> <td> Article ID: </td><td> <input type=text name=article_id value=<? echo date("Y_m_j_is"); ?> size=30> </td></tr>
<tr> <td> Date/Author/etc: </td><td> <textarea name=date rows=2 cols=30 wrap=soft><? echo date("M j, Y\n"); ?>Author: </textarea> </td></tr>
<tr> <td> Summary: </td><td> <textarea name=summary rows=5 cols=30 wrap=soft></textarea> </td></tr>
<tr> <td> Body: </td><td> <textarea name=body rows=15 cols=30></textarea> </td></tr>
</table>
<input type=submit name=submit value=Add>
</form>


<p>
<a href=source.php?f=news.php>Source</a>
the file it calls:

"config":

Code: Select all

<?

 $summary_template = "t_summary.html";

 $article_template = "t_article.html";

 $max_summary = 5;

 $max_latest = 5;  

 $password = "test";

?>


and template.inc:

Code: Select all

<?php
/*
 * Session Management for PHP3
 *
 * (C) Copyright 1999-2000 NetUSE GmbH
 *                    Kristian Koehntopp
 *
 * $Id: template.inc,v 1.5 2000/07/12 18:22:35 kk Exp $
 *
 */ 

class Template &#123;
  var $classname = "Template";

  /* if set, echo assignments */
  var $debug     = false;

  /* $file&#1111;handle] = "filename"; */
  var $file  = array();

  /* relative filenames are relative to this pathname */
  var $root   = "";

  /* $varkeys&#1111;key] = "key"; $varvals&#1111;key] = "value"; */
  var $varkeys = array();
  var $varvals = array();

  /* "remove"  => remove undefined variables
   * "comment" => replace undefined variables with comments
   * "keep"    => keep undefined variables
   */
  var $unknowns = "remove";
  
  /* "yes" => halt, "report" => report error, continue, "no" => ignore error quietly */
  var $halt_on_error  = "yes";
  
  /* last error message is retained here */
  var $last_error     = "";


  /***************************************************************************/
  /* public: Constructor.
   * root:     template directory.
   * unknowns: how to handle unknown variables.
   */
  function Template($root = ".", $unknowns = "remove") &#123;
    $this->set_root($root);
    $this->set_unknowns($unknowns);
  &#125;

  /* public: setroot(pathname $root)
   * root:   new template directory.
   */  
  function set_root($root) &#123;
    if (!is_dir($root)) &#123;
      $this->halt("set_root: $root is not a directory.");
      return false;
    &#125;
    
    $this->root = $root;
    return true;
  &#125;

  /* public: set_unknowns(enum $unknowns)
   * unknowns: "remove", "comment", "keep"
   *
   */
  function set_unknowns($unknowns = "keep") &#123;
    $this->unknowns = $unknowns;
  &#125;

  /* public: set_file(array $filelist)
   * filelist: array of handle, filename pairs.
   *
   * public: set_file(string $handle, string $filename)
   * handle: handle for a filename,
   * filename: name of template file
   */
  function set_file($handle, $filename = "") &#123;
    if (!is_array($handle)) &#123;
      if ($filename == "") &#123;
        $this->halt("set_file: For handle $handle filename is empty.");
        return false;
      &#125;
      $this->file&#1111;$handle] = $this->filename($filename);
    &#125; else &#123;
      reset($handle);
      while(list($h, $f) = each($handle)) &#123;
        $this->file&#1111;$h] = $this->filename($f);
      &#125;
    &#125;
  &#125;

  /* public: set_block(string $parent, string $handle, string $name = "")
   * extract the template $handle from $parent, 
   * place variable &#123;$name&#125; instead.
   */
  function set_block($parent, $handle, $name = "") &#123;
    if (!$this->loadfile($parent)) &#123;
      $this->halt("subst: unable to load $parent.");
      return false;
    &#125;
    if ($name == "")
      $name = $handle;

    $str = $this->get_var($parent);
    $reg = "/<!--\s+BEGIN $handle\s+-->(.*)\n\s*<!--\s+END $handle\s+-->/sm";
    preg_match_all($reg, $str, $m);
    $str = preg_replace($reg, "&#123;" . "$name&#125;", $str);
    $this->set_var($handle, $m&#1111;1]&#1111;0]);
    $this->set_var($parent, $str);
  &#125;
  
  /* public: set_var(array $values)
   * values: array of variable name, value pairs.
   *
   * public: set_var(string $varname, string $value)
   * varname: name of a variable that is to be defined
   * value:   value of that variable
   */
  function set_var($varname, $value = "") &#123;
    if (!is_array($varname)) &#123;
      if (!empty($varname))
        if ($this->debug) print "scalar: set *$varname* to *$value*<br>\n";
        $this->varkeys&#1111;$varname] = "/".$this->varname($varname)."/";
        $this->varvals&#1111;$varname] = $value;
    &#125; else &#123;
      reset($varname);
      while(list($k, $v) = each($varname)) &#123;
        if (!empty($k))
          if ($this->debug) print "array: set *$k* to *$v*<br>\n";
          $this->varkeys&#1111;$k] = "/".$this->varname($k)."/";
          $this->varvals&#1111;$k] = $v;
      &#125;
    &#125;
  &#125;

  /* public: subst(string $handle)
   * handle: handle of template where variables are to be substituted.
   */
  function subst($handle) &#123;
    if (!$this->loadfile($handle)) &#123;
      $this->halt("subst: unable to load $handle.");
      return false;
    &#125;

    $str = $this->get_var($handle);
    $str = @preg_replace($this->varkeys, $this->varvals, $str);
    return $str;
  &#125;
  
  /* public: psubst(string $handle)
   * handle: handle of template where variables are to be substituted.
   */
  function psubst($handle) &#123;
    print $this->subst($handle);
    
    return false;
  &#125;

  /* public: parse(string $target, string $handle, boolean append)
   * public: parse(string $target, array  $handle, boolean append)
   * target: handle of variable to generate
   * handle: handle of template to substitute
   * append: append to target handle
   */
  function parse($target, $handle, $append = false) &#123;
    if (!is_array($handle)) &#123;
      $str = $this->subst($handle);
      if ($append) &#123;
        $this->set_var($target, $this->get_var($target) . $str);
      &#125; else &#123;
        $this->set_var($target, $str);
      &#125;
    &#125; else &#123;
      reset($handle);
      while(list($i, $h) = each($handle)) &#123;
        $str = $this->subst($h);
        $this->set_var($target, $str);
      &#125;
    &#125;
    
    return $str;
  &#125;
  
  function pparse($target, $handle, $append = false) &#123;
    print $this->parse($target, $handle, $append);
    return false;
  &#125;
  
  /* public: get_vars()
   */
  function get_vars() &#123;
    reset($this->varkeys);
    while(list($k, $v) = each($this->varkeys)) &#123;
      $result&#1111;$k] = $this->varvals&#1111;$k];
    &#125;
    
    return $result;
  &#125;
  
  /* public: get_var(string varname)
   * varname: name of variable.
   *
   * public: get_var(array varname)
   * varname: array of variable names
   */
  function get_var($varname) &#123;
    if (!is_array($varname)) &#123;
      return $this->varvals&#1111;$varname];
    &#125; else &#123;
      reset($varname);
      while(list($k, $v) = each($varname)) &#123;
        $result&#1111;$k] = $this->varvals&#1111;$k];
      &#125;
      
      return $result;
    &#125;
  &#125;
  
  /* public: get_undefined($handle)
   * handle: handle of a template.
   */
  function get_undefined($handle) &#123;
    if (!$this->loadfile($handle)) &#123;
      $this->halt("get_undefined: unable to load $handle.");
      return false;
    &#125;
    
    preg_match_all("/\&#123;(&#1111;^&#125;]+)\&#125;/", $this->get_var($handle), $m);
    $m = $m&#1111;1];
    if (!is_array($m))
      return false;

    reset($m);
    while(list($k, $v) = each($m)) &#123;
      if (!isset($this->varkeys&#1111;$v]))
        $result&#1111;$v] = $v;
    &#125;
    
    if (count($result))
      return $result;
    else
      return false;
  &#125;

  /* public: finish(string $str)
   * str: string to finish.
   */
  function finish($str) &#123;
    switch ($this->unknowns) &#123;
      case "keep":
      break;
      
      case "remove":
        $str = preg_replace('/&#123;&#1111;^ \t\r\n&#125;]+&#125;/', "", $str);
      break;

      case "comment":
        $str = preg_replace('/&#123;(&#1111;^ \t\r\n&#125;]+)&#125;/', "<!-- Template $handle: Variable \\1 undefined -->", $str);
      break;
    &#125;
    
    return $str;
  &#125;

  /* public: p(string $varname)
   * varname: name of variable to print.
   */
  function p($varname) &#123;
    print $this->finish($this->get_var($varname));
  &#125;

 /* Added by Aytekin
  function pvalue($varname) &#123;
    return $this->finish($this->get_var($varname));
  &#125;


  function get($varname) &#123;
    return $this->finish($this->get_var($varname));
  &#125;
    
  /***************************************************************************/
  /* private: filename($filename)
   * filename: name to be completed.
   */
  function filename($filename) &#123;
    if (substr($filename, 0, 1) != "/") &#123;
      $filename = $this->root."/".$filename;
    &#125;
    
    if (!file_exists($filename))
      $this->halt("filename: file $filename does not exist.");

    return $filename;
  &#125;
  
  /* private: varname($varname)
   * varname: name of a replacement variable to be protected.
   */
  function varname($varname) &#123;
    return preg_quote("&#123;".$varname."&#125;");
  &#125;

  /* private: loadfile(string $handle)
   * handle:  load file defined by handle, if it is not loaded yet.
   */
  function loadfile($handle) &#123;
    if (isset($this->varkeys&#1111;$handle]) and !empty($this->varvals&#1111;$handle]))
      return true;

    if (!isset($this->file&#1111;$handle])) &#123;
      $this->halt("loadfile: $handle is not a valid handle.");
      return false;
    &#125;
    $filename = $this->file&#1111;$handle];

    $str = implode("", @file($filename));
    if (empty($str)) &#123;
      $this->halt("loadfile: While loading $handle, $filename does not exist or is empty.");
      return false;
    &#125;

    $this->set_var($handle, $str);
    
    return true;
  &#125;

  /***************************************************************************/
  /* public: halt(string $msg)
   * msg:    error message to show.
   */
  function halt($msg) &#123;
    $this->last_error = $msg;
    
    if ($this->halt_on_error != "no")
      $this->haltmsg($msg);
    
    if ($this->halt_on_error == "yes")
      die("<b>Halted.</b>");
    
    return false;
  &#125;
  
  /* public, override: haltmsg($msg)
   * msg: error message to show.
   */
  function haltmsg($msg) &#123;
    printf("<b>Template Error:</b> %s<br>\n", $msg);
  &#125;
&#125;
?>
now this is "news.php" modified:

Code: Select all

<?
        include ("template.inc");
        include ("config.php");

 	$summary_template_en = "t_summary.html";
 	$summary_template_es = "u_summary.html";
 	$summary_template_fr = "v_summary.html";
 	$summary_template_it = "a_summary.html";
 	$summary_template_de = "b_summary.html";
	$article_template = "t_article.html";
	$max_summary = 5;

	function summary_page ($subject, $date, $summary, $article_id)
	&#123;
		global $summary_template;
        	$t = new Template();
        	$t->set_file("SummaryPage", $summary_template_en);
			$t->set_file("SummaryPage", $summary_template_es);
			$t->set_file("SummaryPage", $summary_template_fr);
			$t->set_file("SummaryPage", $summary_template_it);
			$t->set_file("SummaryPage", $summary_template_de);
		$article_url = "article_".$article_id.".html";
		$date = nl2br($date);
		$summary =  nl2br($summary);	 
		$t->set_var( array(
				"subject" => $subject,
				"date"    => $date,
				"summary" => $summary,
				"article_url" => $article_url
				));
		$t->parse("Summary", "SummaryPageEN", "SummaryPageES", "SummaryPageFR", "SummaryPageIT", "SummaryPageDE");
		return $t->get_var("Summary");
	&#125;

	function main_page ($subject, $date, $summary, $article_id, $body)
	&#123;
		global $article_template;

                $t = new Template();
                $t->set_file("ArticlePage", $article_template);
                $article_url = "article_".$article_id.".html";
                $date = nl2br($date);
                $summary =  nl2br($summary);
                $body =  nl2br($body);
                $t->set_var( array(
                                "subject" => $subject,
                                "date"    => $date,
                                "summary" => $summary,
                                "body" => $body,
                                "article_url" => $article_url
                                ));
                $t->parse("Article", "ArticlePage");
                return $t->get_var("Article"); 
	&#125;

	function add_article($filename, $news)
	&#123;

		if(file_exists($filename))&#123;
			$fh = fopen($filename, "r");
			$old_news = fread($fh, filesize($filename));
			fclose($fh); 
		&#125;

		/* TODO: Multipage articles
			preg_match_all("<!--ARTICLE PAGE=(\d*)-->", $old_news, $matches;
		
			if( count($matches&#1111;0]) >= $max_summary)&#123;
				$oldfilename = $filename.($matches&#1111;0]&#1111;0]+1);
			&#125; 
		*/

		$fh = fopen($filename, "w");
		$news = stripslashes($news);
		fwrite($fh, "\n<!--ARTICLE-->\n$news $old_news");
		fclose($fh);
	&#125;

?>
<?
	if(strcmp($subject, ""))&#123;	
		if(!(strcmp($passwd, $password)))&#123;	
			add_article("article_summary.html", summary_page($subject, $date, $summary, $article_id));
			add_article("article_$article_id.html", main_page($subject, $date, $summary, $article_id, $body));
			echo "<p> Article has been added! <p>";
		&#125;else&#123;
			echo "<p><b> Password is wrong! </b>";
		&#125;
	&#125;
?>
</span> 
<form action=news.php method=post>
I made a modification in the function "summary_page". As i put more variable in the function, i modified also the config file so:

Code: Select all

<?

 $summary_template_en = "t_summary.html";
 $summary_template_es = "u_summary.html";
 $summary_template_fr = "v_summary.html";
 $summary_template_it = "a_summary.html";
 $summary_template_de = "b_summary.html";

 $article_template = "t_article.html";

 $max_summary = 5;

 $max_latest = 5;  

 $password = "test";

?>
Did i miss something? Apparently the script works but there is a problem with the template. In the folder i have made the file t_summary, u_summary and so on.

Please Help me!!! Thanks
User avatar
Takuma
Forum Regular
Posts: 931
Joined: Sun Aug 04, 2002 10:24 am
Location: UK
Contact:

Post by Takuma »

Could you tell me the name of script that you are using?
paolone
Forum Commoner
Posts: 37
Joined: Tue Jun 11, 2002 10:18 am

here's the link

Post by paolone »

http://www.interlogy.com/products/content/article/

this is the link. the script is excellent, but to modify it, as i'm a "new" PHP developer, takes effort. I cannot solve it wothout the help of sameone skilled!
Thanks
Post Reply