From f23d9bf2e0886498a3d9d5bb0a800d663b795e61 Mon Sep 17 00:00:00 2001 From: javiexin Date: Sun, 5 Feb 2017 21:47:31 +0100 Subject: [ticket/15068] Add template vars retrieval from the template object PHPBB3-15068 --- phpBB/phpbb/template/context.php | 57 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) (limited to 'phpBB/phpbb/template/context.php') diff --git a/phpBB/phpbb/template/context.php b/phpBB/phpbb/template/context.php index 4ee48205c8..0e5f3287aa 100644 --- a/phpBB/phpbb/template/context.php +++ b/phpBB/phpbb/template/context.php @@ -86,6 +86,17 @@ class context return true; } + /** + * Retreive a single scalar value from a single key. + * + * @param string $varname Variable name + * @return mixed Variable value, or null if not set + */ + public function retrieve_var($varname) + { + return isset($this->rootref[$varname]) ? $this->rootref[$varname] : null; + } + /** * Returns a reference to template data array. * @@ -263,6 +274,52 @@ class context return true; } + /** + * Retrieve key variable pairs from the specified block + * + * @param string $blockname Name of block to retrieve $vararray from + * @param array $vararray An array of variable names + * @return array of hashes with variable name as key and retrieved value or null as value + */ + public function retrieve_block_vars($blockname, array $vararray) + { + // For nested block, $blockcount > 0, for top-level block, $blockcount == 0 + $blocks = explode('.', $blockname); + $blockcount = sizeof($blocks) - 1; + + $block = $this->tpldata; + for ($i = 0; $i <= $blockcount; $i++) + { + if (($pos = strpos($blocks[$i], '[')) !== false) + { + $name = substr($blocks[$i], 0, $pos); + + if (strpos($blocks[$i], '[]') === $pos) + { + $index = sizeof($block[$name]) - 1; + } + else + { + $index = min((int) substr($blocks[$i], $pos + 1, -1), sizeof($block[$name]) - 1); + } + } + else + { + $name = $blocks[$i]; + $index = sizeof($block[$name]) - 1; + } + $block = $block[$name]; + $block = $block[$index]; + } + + $result = array(); + foreach ($vararray as $varname) + { + $result[$varname] = isset($block[$varname]) ? $block[$varname] : null; + } + return $result; + } + /** * Change already assigned key variable pair (one-dimensional - single loop entry) * -- cgit v1.2.1 From 96a90d3f81c1fcce3834ee72b7d1b9f76aa9354c Mon Sep 17 00:00:00 2001 From: javiexin Date: Thu, 9 Mar 2017 16:05:39 +0100 Subject: [ticket/15068] Add template vars retrieval from the template object Add possibility to retrieve full block of vars PHPBB3-15068 --- phpBB/phpbb/template/context.php | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) (limited to 'phpBB/phpbb/template/context.php') diff --git a/phpBB/phpbb/template/context.php b/phpBB/phpbb/template/context.php index 0e5f3287aa..6975409ce3 100644 --- a/phpBB/phpbb/template/context.php +++ b/phpBB/phpbb/template/context.php @@ -278,7 +278,7 @@ class context * Retrieve key variable pairs from the specified block * * @param string $blockname Name of block to retrieve $vararray from - * @param array $vararray An array of variable names + * @param array $vararray An array of variable names, empty array retrieves all vars * @return array of hashes with variable name as key and retrieved value or null as value */ public function retrieve_block_vars($blockname, array $vararray) @@ -313,9 +313,25 @@ class context } $result = array(); - foreach ($vararray as $varname) + if ($vararray === array()) { - $result[$varname] = isset($block[$varname]) ? $block[$varname] : null; + // The calculated vars that depend on the block position are excluded from the complete block returned results + $excluded_vars = array('S_FIRST_ROW', 'S_LAST_ROW', 'S_BLOCK_NAME', 'S_NUM_ROWS', 'S_ROW_COUNT', 'S_ROW_NUM'); + + foreach ($block as $varname => $varvalue) + { + if ($varname === strtoupper($varname) && !is_array($varvalue) && !in_array($varname, $excluded_vars)) + { + $result[$varname] = $varvalue; + } + } + } + else + { + foreach ($vararray as $varname) + { + $result[$varname] = isset($block[$varname]) ? $block[$varname] : null; + } } return $result; } -- cgit v1.2.1