Может, кто еще не знает (я вот недавно случайно узнал), что есть такая функция - dprint_r. Определена в модуле devel, и хороша тем, что читаемо выводит массивы и объекты. Отлично подходит для операций типа drupal_set_message(dprint_r($node,true));
$input - выводимая переменная
$return - флаг возврата или вывода
$name - имя переменной
$function - функция парсинга переменной print_r, var_dump, etc...
$check - требуется ли безопасный HTML
В общем-то они там все в одном месте. Самые полезные, по моему мнению — dpm(), db_queryd()
// An alias for drupal_debug(). function dd($data, $label = NULL){ return drupal_debug($data, $label); }
// Log any variable to a drupal_debug.log in the site's temp directory. // See http://drupal.org/node/314112 function drupal_debug($data, $label = NULL){ ob_start(); print_r($data); $string = ob_get_clean(); if($label){ $out = $label. ': '. $string; } else{ $out = $string; } $out .= "\n";
// The temp directory does vary across multiple simpletest instances. $file = file_directory_temp(). '/drupal_debug.txt'; if(file_put_contents($file, $out, FILE_APPEND) === FALSE){ drupal_set_message(t('The file could not be written.'), 'error'); returnFALSE; } }
/**
* Print a variable to the 'message' area of the page. Uses drupal_set_message()
*/ function dpm($input, $name = NULL){ if(user_access('access devel information')){ $export = kprint_r($input, TRUE, $name); drupal_set_message($export); } }
/**
* Var_dump() a variable to the 'message' area of the page. Uses drupal_set_message()
*/ function dvm($input, $name = NULL){ if(user_access('access devel information')){ $export = dprint_r($input, TRUE, $name, 'var_dump', FALSE); drupal_set_message($export); } }
// legacy function that was poorly named. use dpm() instead, since the 'p' maps to 'print_r' function dsm($input, $name = NULL){
dpm($input, $name); }
/**
* An alias for dprint_r(). Saves carpal tunnel syndrome.
*/ function dpr($input, $return = FALSE, $name = NULL){ return dprint_r($input, $return, $name); }
/**
* An alias for kprint_r(). Saves carpal tunnel syndrome.
*/ function kpr($input, $return = FALSE, $name = NULL){ return kprint_r($input, $return, $name); }
/**
* Like dpr, but uses var_dump() instead
*/ function dvr($input, $return = FALSE, $name = NULL){ return dprint_r($input, $return, $name, 'var_dump', FALSE); }
function kprint_r($input, $return = FALSE, $name = NULL, $function = 'print_r'){ // We do not want to krumo() strings and integers and such if(merits_krumo($input)){ if(user_access('access devel information')){ return$return ? krumo_ob($input) : krumo($input); } } else{ return dprint_r($input, $return, $name, $function); } }
/**
* Pretty-print a variable to the browser (no krumo).
* Displays only for users with proper permissions. If
* you want a string returned instead of a print, use the 2nd param.
*/ function dprint_r($input, $return = FALSE, $name = NULL, $function = 'print_r', $check= TRUE){ if(user_access('access devel information')){ if($name){ $name .= ' => '; } ob_start(); $function($input); $output = ob_get_clean(); if($check){ $output = check_plain($output); } if(count($input, COUNT_RECURSIVE)> DEVEL_MIN_TEXTAREA){ // don't use fapi here because sometimes fapi will not be loaded $printed_value = "<textarea rows=30 style=\"width: 100%;\">\n". $name . $output . '</textarea>'; } else{ $printed_value = '<pre>' . $name . $output . '</pre>'; }
Комментарии
Почему то я этому даже не удивлён. Сам писал такую функцию для собственной CMS
не в девеле, http://php.net/manual/en/function.print-r.php
Самый удобный способ такой:
drupal_set_message('<pre>' . print_r($node,true) . '</pre>');
dprint_r()
Да, есть такое счастье в Devel - Devel - Featureset - What does dprint_r() do?
2 Nikit, именно dprint_r()
А я сделал проще - в файлике settings.php
прописал свою функцию
<?php
function dbg($var) {
global $user;
if($user->uid == 1) {
drupal_set_message('<pre>'.check_plain(print_r($var,1)).'</pre>');
}
}
?>
и теперь везде ее использую
Не мешает другим пользователям при отладке на рабочем сайте (при условии что вы отлаживаетесь под $user->uid == 1
а я колбашу print_r($var) потом просто смотрю исходники страницы )
Посмотрел...
Сия функция dprint_r - именно это и выводит
А если разобраться:
$input - выводимая переменная
$return - флаг возврата или вывода
$name - имя переменной
$function - функция парсинга переменной print_r, var_dump, etc...
$check - требуется ли безопасный HTML
аа, сорри тогда, хотя одна колбаса. Отладочники кстати рулят в этом плане.
Я думаю, если в кишках разных модулей копаться, можно много интересного найти.
В общем-то они там все в одном месте. Самые полезные, по моему мнению — dpm(), db_queryd()
function dd($data, $label = NULL) {
return drupal_debug($data, $label);
}
// Log any variable to a drupal_debug.log in the site's temp directory.
// See http://drupal.org/node/314112
function drupal_debug($data, $label = NULL) {
ob_start();
print_r($data);
$string = ob_get_clean();
if ($label) {
$out = $label. ': '. $string;
}
else {
$out = $string;
}
$out .= "\n";
// The temp directory does vary across multiple simpletest instances.
$file = file_directory_temp(). '/drupal_debug.txt';
if (file_put_contents($file, $out, FILE_APPEND) === FALSE) {
drupal_set_message(t('The file could not be written.'), 'error');
return FALSE;
}
}
/**
* Print a variable to the 'message' area of the page. Uses drupal_set_message()
*/
function dpm($input, $name = NULL) {
if (user_access('access devel information')) {
$export = kprint_r($input, TRUE, $name);
drupal_set_message($export);
}
}
/**
* Var_dump() a variable to the 'message' area of the page. Uses drupal_set_message()
*/
function dvm($input, $name = NULL) {
if (user_access('access devel information')) {
$export = dprint_r($input, TRUE, $name, 'var_dump', FALSE);
drupal_set_message($export);
}
}
// legacy function that was poorly named. use dpm() instead, since the 'p' maps to 'print_r'
function dsm($input, $name = NULL) {
dpm($input, $name);
}
/**
* An alias for dprint_r(). Saves carpal tunnel syndrome.
*/
function dpr($input, $return = FALSE, $name = NULL) {
return dprint_r($input, $return, $name);
}
/**
* An alias for kprint_r(). Saves carpal tunnel syndrome.
*/
function kpr($input, $return = FALSE, $name = NULL) {
return kprint_r($input, $return, $name);
}
/**
* Like dpr, but uses var_dump() instead
*/
function dvr($input, $return = FALSE, $name = NULL) {
return dprint_r($input, $return, $name, 'var_dump', FALSE);
}
function kprint_r($input, $return = FALSE, $name = NULL, $function = 'print_r') {
// We do not want to krumo() strings and integers and such
if (merits_krumo($input)) {
if (user_access('access devel information')) {
return $return ? krumo_ob($input) : krumo($input);
}
}
else {
return dprint_r($input, $return, $name, $function);
}
}
/**
* Pretty-print a variable to the browser (no krumo).
* Displays only for users with proper permissions. If
* you want a string returned instead of a print, use the 2nd param.
*/
function dprint_r($input, $return = FALSE, $name = NULL, $function = 'print_r', $check= TRUE) {
if (user_access('access devel information')) {
if ($name) {
$name .= ' => ';
}
ob_start();
$function($input);
$output = ob_get_clean();
if ($check) {
$output = check_plain($output);
}
if (count($input, COUNT_RECURSIVE) > DEVEL_MIN_TEXTAREA) {
// don't use fapi here because sometimes fapi will not be loaded
$printed_value = "<textarea rows=30 style=\"width: 100%;\">\n". $name . $output . '</textarea>';
}
else {
$printed_value = '<pre>' . $name . $output . '</pre>';
}
if ($return) {
return $printed_value;
}
else {
print $printed_value;
}
}
}
/**
* Print the function call stack.
*/
function ddebug_backtrace() {
if (user_access('access devel information')) {
$trace = debug_backtrace();
array_shift($trace);
foreach ($trace as $key => $value) {
$rich_trace[$value['function']] = $value;
}
if (has_krumo()) {
print krumo($rich_trace);
}
else {
dprint_r($rich_trace);
}
}
}
/**
* Debugging version of db_query().
*
* Echoes the query to the browser.
*/
function db_queryd($query) {
$args = func_get_args();
array_shift($args);
$query = db_prefix_tables($query);
if (isset($args[0]) and is_array($args[0])) { // 'All arguments in one array' syntax
$args = $args[0];
}
_db_query_callback($args, TRUE);
$query = preg_replace_callback(DB_QUERY_REGEXP, '_db_query_callback', $query);
return _db_query($query, 1);
}
// Only define our mail wrapper if the devel module is the current mail
// wrapper.
if (variable_get('smtp_library', '') == drupal_get_filename('module', 'devel')) {
/**
* Log the mails sent out instead of mailing.
*/
function drupal_mail_wrapper($message) {
$mimeheaders = array();
foreach ($message['headers'] as $name => $value) {
// the check_plain nicely encodes <> chars for web presentation
$mimeheaders[] = check_plain($name .': '. mime_header_encode($value));
}
watchdog(
'devel',
'Mail sent:<br />Id: %mail_id<br />To: %to<br />From: %from<br />Language: %lang<br />Subject: %subject<br />Body: %body<br /><br />Additional headers: <br />!header',
array(
'%mail_id' => $message['id'],
'%to' => $message['to'],
'%from' => $message['from'],
'%lang' => $message['language']->language,
'%subject' => $message['subject'],
'%body' => $message['body'],
'!header' => implode("<br />", $mimeheaders),
WATCHDOG_INFO,
)
);
return TRUE;
}
}
Хм, спасибо. Надо взять на вооружение.