diff options
author | Simon <simon@kisikew.org> | 2012-03-02 07:55:38 -0800 |
---|---|---|
committer | Simon <simon@kisikew.org> | 2012-03-02 07:55:38 -0800 |
commit | a3dcf491f14d6c044e3bd10844f5c737b21feae2 (patch) | |
tree | 1260f003b2351627ef0fa8fe0c1cb6f8ef630bdf | |
parent | f1bf6dcdfb89bf3c21e498ba3d76c600dafed934 (diff) | |
parent | aef737f37637270b4f79ea390ee23a61f7fcb4ba (diff) | |
download | volse-hubzilla-a3dcf491f14d6c044e3bd10844f5c737b21feae2.tar.gz volse-hubzilla-a3dcf491f14d6c044e3bd10844f5c737b21feae2.tar.bz2 volse-hubzilla-a3dcf491f14d6c044e3bd10844f5c737b21feae2.zip |
Merge pull request #57 from fabrixxm/master
template processor optimizations
-rwxr-xr-x | include/template_processor.php | 68 | ||||
-rwxr-xr-x | include/text.php | 8 | ||||
-rwxr-xr-x | mod/group.php | 1 | ||||
-rwxr-xr-x | view/search_item.tpl | 4 | ||||
-rwxr-xr-x | view/theme/dispy/wall_item.tpl | 4 | ||||
-rwxr-xr-x | view/theme/dispy/wallwall_item.tpl | 4 | ||||
-rwxr-xr-x | view/theme/duepuntozero/wall_item.tpl | 4 | ||||
-rwxr-xr-x | view/theme/duepuntozero/wallwall_item.tpl | 4 | ||||
-rwxr-xr-x | view/theme/vier/search_item.tpl | 5 | ||||
-rw-r--r-- | view/theme/vier/wall_item.tpl | 5 | ||||
-rw-r--r-- | view/theme/vier/wallwall_item.tpl | 4 | ||||
-rwxr-xr-x | view/wall_item.tpl | 4 | ||||
-rwxr-xr-x | view/wallwall_item.tpl | 4 |
13 files changed, 50 insertions, 69 deletions
diff --git a/include/template_processor.php b/include/template_processor.php index b4d444e1c..111fc5849 100755 --- a/include/template_processor.php +++ b/include/template_processor.php @@ -1,5 +1,5 @@ <?php - + define ("KEY_NOT_EXISTS", '^R_key_not_Exists^'); class Template { var $r; @@ -28,30 +28,18 @@ die(); } - private function _build_replace($r, $prefix){ - - if(is_array($r) && count($r)) { - foreach ($r as $k => $v ) { - if (is_array($v)) { - $this->_build_replace($v, "$prefix$k."); - } else { - $this->search[] = $prefix . $k; - $this->replace[] = $v; - } - } - } - } private function _push_stack(){ - $this->stack[] = array($this->r, $this->search, $this->replace, $this->nodes); + $this->stack[] = array($this->r, $this->nodes); } private function _pop_stack(){ - list($this->r, $this->search, $this->replace, $this->nodes) = array_pop($this->stack); + list($this->r, $this->nodes) = array_pop($this->stack); } - private function _get_var($name){ - $keys = array_map('trim',explode(".",$name)); + private function _get_var($name, $retNoKey=false){ + $keys = array_map('trim',explode(".",$name)); + if ($retNoKey && !array_key_exists($keys[0], $this->r)) return KEY_NOT_EXISTS; $val = $this->r; foreach($keys as $k) { $val = (isset($val[$k]) ? $val[$k] : null); @@ -169,40 +157,24 @@ return $s; } - /* - private function _str_replace($str){ - #$this->search,$this->replace, - $searchs = $this->search; - foreach($searchs as $search){ - $search = "|".preg_quote($search)."(\|[a-zA-Z0-9_]*)*|"; - $m = array(); - if (preg_match_all($search, $str,$m)){ - foreach ($m[0] as $match){ - $toks = explode("|",$match); - $val = $this->_get_var($toks[0]); - for($k=1; $k<count($toks); $k++){ - $func = $toks[$k]; - if (function_exists($func)) $val = $func($val); - } - if (count($toks)>1){ - $str = str_replace( $match, $val, $str); - } - } + + private function var_replace($s){ + $m = array(); + if (preg_match_all('/\$\[{0,1}([a-zA-Z0-9-_]+\.*)+\]{0,1}/', $s,$m)){ + foreach($m[0] as $var){ + $varn = str_replace(array("[","]"), array("",""), $var); + $val = $this->_get_var($varn, true); + if ($val!=KEY_NOT_EXISTS) + $s = str_replace($var, $val, $s); } - } - return str_replace($this->search,$this->replace, $str); - }*/ - + + return $s; + } public function replace($s, $r) { $this->r = $r; - $this->search = array(); - $this->replace = array(); - - $this->_build_replace($r, ""); - #$s = str_replace(array("\n","\r"),array("§n§","§r§"),$s); $s = $this->_build_nodes($s); $s = preg_replace_callback('/\|\|([0-9]+)\|\|/', array($this, "_replcb_node"), $s); @@ -210,12 +182,12 @@ // remove comments block $s = preg_replace('/{#[^#]*#}/', "" , $s); + // replace strings recursively (limit to 10 loops) $os = ""; $count=0; while($os!=$s && $count<10){ $os=$s; $count++; - //$s = $this->_str_replace($s); - $s = str_replace($this->search, $this->replace, $s); + $s = $this->var_replace($s); } return template_unescape($s); } diff --git a/include/text.php b/include/text.php index 4276b7fcb..042ee982c 100755 --- a/include/text.php +++ b/include/text.php @@ -14,7 +14,13 @@ if(! function_exists('replace_macros')) { function replace_macros($s,$r) { global $t; - return $t->replace($s,$r); + //$ts = microtime(); + $r = $t->replace($s,$r); + //$tt = microtime() - $ts; + + //$a = get_app(); + //$a->page['debug'] .= "$tt <br>\n"; + return $r; }} diff --git a/mod/group.php b/mod/group.php index f6f8e4173..13401ef0d 100755 --- a/mod/group.php +++ b/mod/group.php @@ -84,6 +84,7 @@ function group_content(&$a) { return replace_macros($tpl, $context + array( '$title' => t('Create a group of contacts/friends.'), '$gname' => array('groupname',t('Group Name: '),$group['name'], ''), + '$gid' => 'new', )); diff --git a/view/search_item.tpl b/view/search_item.tpl index a889062e0..80d6678fb 100755 --- a/view/search_item.tpl +++ b/view/search_item.tpl @@ -31,8 +31,8 @@ <div class="wall-item-links"> </div> <div class="wall-item-tags"> - {{ for $item.tags as $item.tag }} - <span class='tag'>$item.tag</span> + {{ for $item.tags as $tag }} + <span class='tag'>$tag</span> {{ endfor }} </div> </div> diff --git a/view/theme/dispy/wall_item.tpl b/view/theme/dispy/wall_item.tpl index 0dcd30f7b..09cf64397 100755 --- a/view/theme/dispy/wall_item.tpl +++ b/view/theme/dispy/wall_item.tpl @@ -53,8 +53,8 @@ <div class="wall-item-title-end"></div> <div class="wall-item-body" id="wall-item-body-$item.id" >$item.body <div class="body-tag"> - {{ for $item.tags as $item.tag }} - <span class='tag'>$item.tag</span> + {{ for $item.tags as $tag }} + <span class='tag'>$tag</span> {{ endfor }} </div> </div> diff --git a/view/theme/dispy/wallwall_item.tpl b/view/theme/dispy/wallwall_item.tpl index 31f046a76..c3638094c 100755 --- a/view/theme/dispy/wallwall_item.tpl +++ b/view/theme/dispy/wallwall_item.tpl @@ -58,8 +58,8 @@ <div class="wall-item-title-end"></div> <div class="wall-item-body" id="wall-item-body-$item.id" >$item.body <div class="body-tag"> - {{ for $item.tags as $item.tag }} - <span class='tag'>$item.tag</span> + {{ for $item.tags as $tag }} + <span class='tag'>$tag</span> {{ endfor }} </div> </div> diff --git a/view/theme/duepuntozero/wall_item.tpl b/view/theme/duepuntozero/wall_item.tpl index d165d9801..51e36b6f4 100755 --- a/view/theme/duepuntozero/wall_item.tpl +++ b/view/theme/duepuntozero/wall_item.tpl @@ -31,8 +31,8 @@ <div class="wall-item-title-end"></div> <div class="wall-item-body" id="wall-item-body-$item.id" >$item.body <div class="body-tag"> - {{ for $item.tags as $item.tag }} - <span class='tag'>$item.tag</span> + {{ for $item.tags as $tag }} + <span class='tag'>$tag</span> {{ endfor }} </div> </div> diff --git a/view/theme/duepuntozero/wallwall_item.tpl b/view/theme/duepuntozero/wallwall_item.tpl index 75cd5f65e..211906c93 100755 --- a/view/theme/duepuntozero/wallwall_item.tpl +++ b/view/theme/duepuntozero/wallwall_item.tpl @@ -35,8 +35,8 @@ <div class="wall-item-title-end"></div> <div class="wall-item-body" id="wall-item-body-$item.id" >$item.body <div class="body-tag"> - {{ for $item.tags as $item.tag }} - <span class='tag'>$item.tag</span> + {{ for $item.tags as $tag }} + <span class='tag'>$tag</span> {{ endfor }} </div> </div> diff --git a/view/theme/vier/search_item.tpl b/view/theme/vier/search_item.tpl index f2a3a3c8b..fb87d7661 100755 --- a/view/theme/vier/search_item.tpl +++ b/view/theme/vier/search_item.tpl @@ -37,9 +37,10 @@ <div class="wall-item-links"> </div> <div class="wall-item-tags"> - {{ for $item.tags as $item.tag }} - <span class='tag'>$item.tag</span> + {{ for $item.tags as $tag }} + <span class='tag'>$tag</span> {{ endfor }} + </div> </div> <div class="wall-item-bottom"> diff --git a/view/theme/vier/wall_item.tpl b/view/theme/vier/wall_item.tpl index 8b06989fa..aa972937d 100644 --- a/view/theme/vier/wall_item.tpl +++ b/view/theme/vier/wall_item.tpl @@ -38,9 +38,10 @@ <div class="wall-item-links"> </div> <div class="wall-item-tags"> - {{ for $item.tags as $item.tag }} - <span class='tag'>$item.tag</span> + {{ for $item.tags as $tag }} + <span class='tag'>$tag</span> {{ endfor }} + </div> </div> <div class="wall-item-bottom"> diff --git a/view/theme/vier/wallwall_item.tpl b/view/theme/vier/wallwall_item.tpl index a8a46c34c..c557b33f1 100644 --- a/view/theme/vier/wallwall_item.tpl +++ b/view/theme/vier/wallwall_item.tpl @@ -45,8 +45,8 @@ <div class="wall-item-links"> </div> <div class="wall-item-tags"> - {{ for $item.tags as $item.tag }} - <span class='tag'>$item.tag</span> + {{ for $item.tags as $tag }} + <span class='tag'>$tag</span> {{ endfor }} </div> </div> diff --git a/view/wall_item.tpl b/view/wall_item.tpl index ddae5b609..c99077510 100755 --- a/view/wall_item.tpl +++ b/view/wall_item.tpl @@ -31,8 +31,8 @@ <div class="wall-item-links"> </div> <div class="wall-item-tags"> - {{ for $item.tags as $item.tag }} - <span class='tag'>$item.tag</span> + {{ for $item.tags as $tag }} + <span class='tag'>$tag</span> {{ endfor }} </div> </div> diff --git a/view/wallwall_item.tpl b/view/wallwall_item.tpl index 3fc704e35..be942f261 100755 --- a/view/wallwall_item.tpl +++ b/view/wallwall_item.tpl @@ -35,8 +35,8 @@ <div class="wall-item-links"> </div> <div class="wall-item-tags"> - {{ for $item.tags as $item.tag }} - <span class='tag'>$item.tag</span> + {{ for $item.tags as $tag }} + <span class='tag'>$tag</span> {{ endfor }} </div> </div> |