Часто для отладки шаблонов компонентов приходится выводит листинг результирующего массива $arArray и других вспомогательных массивов. Обычно для это используется стандартна функция PHP print_r(). Пример того, как сами разработчики Битрикс в коде шаблона компонента iblock.element.add.form используют это прием:
Я и сам часто это использовал, только без exit().
Чтобы было видно дальнейших ход выполнения страницы. Но в общем меня не устраивала не информативность функции print_r() и перегруженность вывода. К тому же вывод делался сразу после пролога и страница улетала далеко вниз...

Представляете массив на сотню элементов. Рука устанет перематывать эту простыню. И еще дублирующие элементы сами себя элементы с тильдами ~...
Все это с подвигло меня написать свою фунцию вывода отладочной информации, которая выводит массив внизу страницы и фильтрует вывод.
Вставляется она в конец файла шаблона сайта footer.php.
В самом шаблоне компонента, где нужно просмотреть результирующий массив вставляется строчка, типа:
Ничего сложного, происходит обращение к глобальной переменной.
Вот и вывод массива:
Крассным обозначаются массивы, синим строки, все остальное черное..

<? echo "<pre>Template arParams: "; print_r($arParams); echo "</pre>"; echo "<pre>Template arResult: "; print_r($arResult); echo "</pre>"; exit(); ?> |
Я и сам часто это использовал, только без exit().
<? echo "<pre>"; print_r($arResult); echo "</pre>";?> |
Чтобы было видно дальнейших ход выполнения страницы. Но в общем меня не устраивала не информативность функции print_r() и перегруженность вывода. К тому же вывод делался сразу после пролога и страница улетала далеко вниз...

Представляете массив на сотню элементов. Рука устанет перематывать эту простыню. И еще дублирующие элементы сами себя элементы с тильдами ~...
Все это с подвигло меня написать свою фунцию вывода отладочной информации, которая выводит массив внизу страницы и фильтрует вывод.
<?php
//$GLOBALS["MY_DEBUG"]["X"] = Array("Debug help function, colors output",1,null, Array(0,1,2,3,4,5,6,7,8,9));
function print_my_debug() {
if(empty($GLOBALS["MY_DEBUG"])) return "";
echo "<pre style='font-size:10px;'>";
function wrap($color, $text) {
return "<span style='color:".$color."'>".$text."</span>";
}
function filter_tilda_keys(&$a) {
static $level = 0;
$tab = " ";
$len = 0;
foreach($a as $k=>$v) {
if(substr($k, 0, 1) != "~") {
if(is_array($v)) {
echo str_repeat($tab, $level).wrap("red", $k)."\n";
if(!empty($v)) {
$level++;
filter_tilda_keys($v);
}
} elseif(is_string($v)) {
echo str_repeat($tab, $level).wrap("blue", $k)." = ".(strlen($v) < 40 ? $v : substr($v, 0, 40)."…")."\n";
} else {
echo str_repeat($tab, $level).wrap("black", $k)." = ".$v."\n";
}
//if($len++ > 2 && $level != 0) {echo str_repeat($tab, $level).wrap("red", "N(".count($a).")")."\n";break;}
}
}
$level--;
echo "";
}
filter_tilda_keys($GLOBALS["MY_DEBUG"]);
//print_r($GLOBALS["MY_DEBUG"]);
echo "</pre>";
}
print_my_debug();?> |
Вставляется она в конец файла шаблона сайта footer.php.
... </body> </html> |
В самом шаблоне компонента, где нужно просмотреть результирующий массив вставляется строчка, типа:
<?$GLOBALS["MY_DEBUG"] = $arResult?> |
Ничего сложного, происходит обращение к глобальной переменной.
Вот и вывод массива:
Крассным обозначаются массивы, синим строки, все остальное черное..
