Translations
Info
All page names need to be in English.
en da  de  fr  it  ja  km  nl  ru  zh

Ru:Extension Development, Debugging

From TYPO3Wiki
Jump to: navigation, search

Советы по отладке

Debug в TYPO3

Также смотрите Extension Developers Guide

  • В файле typo3conf/localconf.php, включите параметр [FE][debug] = 1, а [SYS][devIPmask] настройте, например на "192.*,169.*,127.0.0.1". После чего можно использовать дополненную функцию debug() из расширения cc_debug. Теперь, если что-либо будет выводиться на отладку работающим сценарием PHP, на сайте TYPO3 в верхнем правом углу появиться значок бомбы ([[1]]).
PHP script:
 // вывод переменной (variable) вместе с номером строки и названием файла
 debug($variable, 'Variable name/description', __LINE__, __FILE__);

Можно воспользоваться альтернативными расширениями beko_debugster или fh_debug. Они также срабатывают, если на странице имеются ошибки HTML или JavaScript.

PHP script:
 // вывод переменной (variable)
 debugster($variable, 'Variable name/description');


PHP script:
 // вывод трассировки стека текущей функции
 $tmp = t3lib_div::debug_trail();
 debug($tmp, 'stack trace in className::methodName', __LINE__, __FILE__);
 // Замените 'className' на название класса, а 'methodName' - на название метода, из которого вызывается <tt>debug()</tt>.

 // Если нужно добавить функционал devLog к своему приложению, просто допишите подобные строки:
 if (TYPO3_DLOG) t3lib_div::devLog('[write message in english here]', 'extension key');

Расширение devlog предлагает функционал журналирования/отладки для использования вместе с t3lib_div::devlog(). Сама же функция t3lib_div::devlog() предоставляет лишь интерфейс для журналирования, без его реализации.
rlmp_filedevlog заносит сообщения из вызовово t3lib_div::devlog() в текстовый файл, по умолчанию, в debug.log домашней директории сервера, например, в /var/www/html/.
Не забудьте предоставить доступ на запись для пользователя httpd. Включить devlog можно при помощи следующей строки в файле typo3conf/localconf.php:

PHP script:
 $TYPO3_CONF_VARS['SYS']['enable_DLOG'] = true;

error_log()

Записывать в (системный) журнал ошибок можно через:

PHP script:
 error_log('text', 0);
 error_log('postition A: $content='.$content, 3, '/usr/local/htdocs/typo3/error_log');

ну и просматривать записи в файле. (Linux: /var/log/messages, /var/log/apache2/error_log or /var/log/httpd/error_log).

Можно изменить настойки error_log = syslog в /etc/php.ini.

Если указать третий параметр в error_log(), то запись будет добавлена лишь в указанный файл.

Для просмотра содержимого массивов, воспользуйтесь циклом foreach:

PHP script:
 foreach ($menuItems as $key => $menuItem) {
 	if (is_array($menuItem)) {
 		error_log ('-- tx_commerce_cm1 menuItem['.$key.'] --', 0);
 		foreach ($menuItem as $k1=>$v1) {
 			error_log ('['.$k1.']='.$v1,0);
 		}
 	} else {
 		error_log ('-- tx_commerce_cm1 menuItem['.$key.'] = '.$menuItem, 0);
 	}
 }

Либо используйте следующие строки с var_dump():

PHP script:
 ob_start();
 print_r($myComplexArray);
 $debugOut = ob_get_contents();
 ob_end_clean();
 error_log ('$myComplexArray = '.$debugOut);

Как отладить SQL

PHP script:
 $GLOBALS['TYPO3_DB']->store_lastBuiltQuery = true;
 $GLOBALS['TYPO3_DB']->exec_UPDATEquery( 'xxx', 'yyy', 'zzz');
 t3lib_div::devLog('[write message in english here]'.$GLOBALS['TYPO3_DB']->debug_lastBuiltQuery , 'extension key');

Для отладки запросов SQL, измерения времени их выполнения и скрытия ненужных сообщений об ошибках PHP используйте расширение debug_mysql_db.

Как отладить TypoScript

Обратитесь к TypoScript Reference, раздел stdWrap.

В конце таблицы указаны три параметра stdWrap, включающие различные режимы отладки:

  • debug boolean

Направляет выводимое через htmlspecialchars(). Полезно для отладки - чтобы узнать, какое же значение stdWrap фактически имеется во время создания сайта с использованием TypoScript.

  • debugFunc boolean

Выводит содержимое при помощи функции debug(). Установите значение "2" (да, это не *совсем* логическая переменная;)), и содержимое будет выведено в виде таблицы, что выглядит лучше. Пример:

TS TypoScript:
 marks.MENU_TITLE = TEXT
 marks.MENU_TITLE.field = title
 marks.MENU_TITLE.stdWrap.debugFunc = 2
 marks.MENU_TITLE.stdWrap.wrap = title at position 1 |


  • debugData boolean

Выводит текущий массив данных, $cObj->data, непосредственно в браузер. Вот откуда ".field" получают данные.

Крайне полезная хитрость при разработке - просто создать шаблон для расширения (+ext) на определенной отлаживаемой странице. Таким образом будет возможно как угодно манипулировать с кодом TypoScript, не затрагивая другие страницы. Как только отладка закончена - удалите или отключите шаблон.

  • debugItemConf boolean

Выводит массивы настроек для каждого элемента меню при помощи функции debug(). Полезно для отладки optionSplit и схожих настроек. Применимо к GMENU, TMENU, IMGMENU.

Пример:

TS TypoScript:
 temp.L2menuItems = HMENU
 temp.L2menuItems.entryLevel = 1
 temp.L2menuItems.1 = TMENU
 temp.L2menuItems.1.debugItemConf = 1