hello,
I'm getting an error with XTemplate class from:
http://sourceforge.net/project/showfiles.php?group_id=16714&package_id=14016&release_id=319432
the error message is:
preg_replace() [<a href='function.preg-replace'>function.preg-replace</a>]: Unknown
modifier '|'
the function that causes the error:
function parse ($bname) {
if (isset($this->preparsed_blocks[$bname])) {
$copy = $this->preparsed_blocks[$bname];
} elseif (isset($this->blocks[$bname])) {
$copy = $this->blocks[$bname];
} elseif ($this->_ignore_missing_blocks) {
// ------------------------------------------------------
// NW : 17 Oct 2002. Added default of ignore_missing_blocks
// to allow for generalised processing where some
// blocks may be removed from the HTML without the
// processing code needing to be altered.
// ------------------------------------------------------
// JRC: 3/1/2003 added set error to ignore missing functionality
$this->_set_error("parse: blockname [$bname] does not exist");
return;
} else {
$this->_set_error("parse: blockname [$bname] does not exist");
}
/* from there we should have no more {FILE } directives */
if (!isset($copy)) {
die('Block: ' . $bname);
}
$copy = preg_replace($this->filevar_delim_nl, '', $copy);
$var_array = array();
/* find & replace variables+blocks */
preg_match_all("/" . $this->tag_start_delim . "([A-Za-z0-9\._]+? ?#?.*?)" . $this->tag_end_delim. "/", $copy, $var_array);
$var_array = $var_array[1];
foreach ($var_array as $k => $v) {
// Are there any comments in the tags {tag#a comment for documenting the template}
$any_comments = explode('#', $v);
$v = rtrim($any_comments[0]);
if (sizeof($any_comments) > 1) {
$comments = $any_comments[1];
} else {
$comments = '';
}
$sub = explode('.', $v);
if ($sub[0] == '_BLOCK_') {
unset($sub[0]);
$bname2 = implode('.', $sub);
// trinary operator eliminates assign error in E_ALL reporting
$var = isset($this->parsed_blocks[$bname2]) ? $this->parsed_blocks[$bname2] : null;
$nul = (!isset($this->_null_block[$bname2])) ? $this->_null_block[''] : $this->_null_block[$bname2];
if ($var == '') {
if ($nul == '') {
// -----------------------------------------------------------
// Removed requriement for blocks to be at the start of string
// -----------------------------------------------------------
// $copy=preg_replace("/^\s*\{".$v."\}\s*\n*/m","",$copy);
// Now blocks don't need to be at the beginning of a line,
//$copy=preg_replace("/\s*" . $this->tag_start_delim . $v . $this->tag_end_delim . "\s*\n*/m","",$copy);
$copy = preg_replace("/" . $this->tag_start_delim . $v . $this->tag_end_delim . "/m", '', $copy);
} else {
$copy = preg_replace("/" . $this->tag_start_delim . $v . $this->tag_end_delim . "/", "$nul", $copy);
}
} else {
$var = trim($var);
// SF Bug no. 810773 - thanks anonymous
$var = str_replace('\\', '\\\\', $var);
// Ensure dollars in strings are not evaluated reported by SadGeezer 31/3/04
$var = str_replace('$', '\\$', $var);
// Replaced str_replaces with preg_quote
//$var = preg_quote($var);
$var = str_replace('\\|', '|', $var);
$copy = preg_replace("|" . $this->tag_start_delim . $v . $this->tag_end_delim . "|", "$var", $copy);
}
} else {
$var = $this->vars;
foreach ($sub as $v1) {
// NW 4 Oct 2002 - Added isset and is_array check to avoid NOTICE messages
// JC 17 Oct 2002 - Changed EMPTY to stlen=0
// if (empty($var[$v1])) { // this line would think that zeros(0) were empty - which is not true
if (!isset($var[$v1]) || (!is_array($var[$v1]) && strlen($var[$v1]) == 0)) {
// Check for constant, when variable not assigned
if (defined($v1)) {
$var[$v1] = constant($v1);
} else {
$var[$v1] = null;
}
}
$var = $var[$v1];
}
$nul = (!isset($this->_null_string[$v])) ? ($this->_null_string[""]) : ($this->_null_string[$v]);
$var = (!isset($var)) ? $nul : $var;
if ($var == '') {
// -----------------------------------------------------------
// Removed requriement for blocks to be at the start of string
// -----------------------------------------------------------
// $copy=preg_replace("|^\s*\{".$v." ?#?".$comments."\}\s*\n|m","",$copy);
$copy=preg_replace("|\s*" . $this->tag_start_delim . $v . " ?#?" . $comments . $this->tag_end_delim . "\s*\n|m", '', $copy);
}
$var = trim($var);
// SF Bug no. 810773 - thanks anonymous
$var = str_replace('\\', '\\\\', $var);
// Ensure dollars in strings are not evaluated reported by SadGeezer 31/3/04
$var = str_replace('$', '\\$', $var);
// Replace str_replaces with preg_quote
//$var = preg_quote($var);
$var = str_replace('\\|', '|', $var);
$copy=preg_replace("|" . $this->tag_start_delim . $v . " ?#?" . $comments . $this->tag_end_delim . "|", "$var", $copy);
}
}
if (isset($this->parsed_blocks[$bname])) {
$this->parsed_blocks[$bname] .= $copy;
} else {
$this->parsed_blocks[$bname] = $copy;
}
/* reset sub-blocks */
if ($this->_autoreset && (!empty($this->sub_blocks[$bname]))) {
reset($this->sub_blocks[$bname]);
foreach ($this->sub_blocks[$bname] as $k => $v) {
$this->reset($v);
}
}
}
the error references this line:
$copy=preg_replace("|\s*" . $this->tag_start_delim . $v . " ?#?" . $comments . $this->tag_end_delim . "\s*\n|m", '', $copy);
thanks in advance for you help!!