Index: branches/RC/core/kernel/nparser/ntags.php =================================================================== diff -u -r8953 -r8963 --- branches/RC/core/kernel/nparser/ntags.php (.../ntags.php) (revision 8953) +++ branches/RC/core/kernel/nparser/ntags.php (.../ntags.php) (revision 8963) @@ -133,7 +133,7 @@ function RenderDesignCode(&$o, $params) { $to_pass = $this->Parser->CompileParamsArray($params); - $code[] = "echo (\$_parser->ParseBlock(array_merge($to_pass, array('name'=>'{$params['design']}','content'=>\$_parser->ParseBlock($to_pass)))));"; + $code[] = "echo (\$_parser->ParseBlock(array_merge($to_pass, array('name'=>'{$params['design']}','content'=>\$_parser->ParseBlock($to_pass), 'keep_data_exists'=>1))));"; $this->AppendCode($o, $code); } Index: branches/RC/core/kernel/nparser/nparser.php =================================================================== diff -u -r8953 -r8963 --- branches/RC/core/kernel/nparser/nparser.php (.../nparser.php) (revision 8953) +++ branches/RC/core/kernel/nparser/nparser.php (.../nparser.php) (revision 8963) @@ -15,6 +15,7 @@ var $ParamsLevel = 0; var $Elements = array(); // holds dynamic elements to function names mapping during execution + var $DataExists = false; function NParser() @@ -302,7 +303,15 @@ { if ($pass_params || isset($params['pass_params'])) $params = array_merge($this->Params, $params); $this->PushParams($params); + $data_exists_bak = $this->DataExists; + // if we are parsing design block and we have block_no_data - we need to wrap block_no_data into design, + // so we should set DataExists to true manually, otherwise the design block will be skipped because of data_exists in params + // + // keep_data_exists is used by block RenderElement (always added in ntags.php), to keep the DataExists value + // from inside-content block, otherwise when parsing the design block DataExists will be reset to false resulting missing design block + $this->DataExists = isset($params['keep_data_exists']) && $this->DataExists || (isset($params['design']) && isset($params['block_no_data']) && $params['name'] == $params['design']); + if (!isset($this->Elements[$params['name']])) { $pre_parsed = $this->Application->TemplatesCache->GetPreParsed($params['name']); if ($pre_parsed) { @@ -321,22 +330,45 @@ $f_name = $this->Elements[$params['name']]; $ret = $f_name($this, $params); - $ret = $m_processor->PostProcess($ret, $flag_values); - $this->PopParams(); + + $this->CheckNoData($ret, $params); + + $this->DataExists = $data_exists_bak || $this->DataExists; return $ret; } function IncludeTemplate($params, $silent=null) { $t = is_array($params) ? $this->SelectParam($params, 't,template,block,name') : $params; $t = eregi_replace("\.tpl$", '', $t); + $data_exists_bak = $this->DataExists; + $this->DataExists = false; + if ($t == 'platform/elements/content_boxes/sub_categories') { + echo ''; + } + $this->PushParams($params); $ret = $this->Run($t, $silent); $this->PopParams(); + $this->CheckNoData($ret, $params); + $this->DataExists = $data_exists_bak || $this->DataExists; return $ret; } + + function CheckNoData(&$ret, $params) + { + if (isset($params['data_exists']) && !$this->DataExists) { + $block_no_data = isset($params['BlockNoData']) ? $params['BlockNoData'] : (isset($params['block_no_data']) ? $params['block_no_data'] : false); + if ($block_no_data) { + $ret = $this->ParseBlock(array('name'=>$block_no_data)); + } + else { + $ret = ''; + } + } + } } \ No newline at end of file