Index: branches/5.1.x/core/units/helpers/template_helper.php =================================================================== diff -u -N -r12657 -r13086 --- branches/5.1.x/core/units/helpers/template_helper.php (.../template_helper.php) (revision 12657) +++ branches/5.1.x/core/units/helpers/template_helper.php (.../template_helper.php) (revision 13086) @@ -1,6 +1,6 @@ ]*>)|(<\/div>)/s', $data, $divs, PREG_SET_ORDER + PREG_OFFSET_CAPTURE); - $skip_count = 0; + $deep_level = 0; + $pairs = Array (); + $skip_count = Array (); // by deep level! foreach ($divs as $div) { if (strpos($div[0][0], '/') === false) { // opening div + $skip_count[$deep_level] = 0; + if (strpos($div[0][0], $class) !== false) { + // ours opening (this deep level) -> save $pair = Array ('open_pos' => $div[0][1], 'open_len' => strlen($div[0][0])); - $skip_count = 0; } else { - $skip_count++; + // not ours opening -> skip next closing (this deep level) + $skip_count[$deep_level]++; } + + $deep_level++; } else { // closing div - if ($skip_count == 0) { + $deep_level--; + + if ($skip_count[$deep_level] == 0) { + // nothing to skip (this deep level) -> save $pair['close_len'] = strlen($div[0][0]); $pair['close_pos'] = $div[0][1] + $pair['close_len']; $pair['data'] = substr($data, $pair['open_pos'], $pair['close_pos'] - $pair['open_pos']); @@ -259,7 +269,8 @@ } } else { - $skip_count--; + // skip closing div as requested + $skip_count[$deep_level]--; } } }