про print_r

Главные вкладки

Аватар пользователя fairwind fairwind 16 января 2009 в 10:19

Может, кто еще не знает (я вот недавно случайно узнал), что есть такая функция - dprint_r. Определена в модуле devel, и хороша тем, что читаемо выводит массивы и объекты. Отлично подходит для операций типа drupal_set_message(dprint_r($node,true));

Комментарии

Аватар пользователя olk olk 16 января 2009 в 12:56

А я сделал проще - в файлике settings.php
прописал свою функцию

<?php
function dbg($var) {
global 
$user;
if(
$user->uid == 1) {
drupal_set_message('<pre>'.check_plain(print_r($var,1)).'</pre>');
}
}
?>

и теперь везде ее использую Wink
Не мешает другим пользователям при отладке на рабочем сайте (при условии что вы отлаживаетесь под $user->uid == 1

Аватар пользователя direqtor direqtor 16 января 2009 в 13:56

А если разобраться:

function dprint_r($input, $return = FALSE, $name = NULL, $function = 'print_r', $check= TRUE)

$input - выводимая переменная
$return - флаг возврата или вывода
$name - имя переменной
$function - функция парсинга переменной print_r, var_dump, etc...
$check - требуется ли безопасный HTML

Аватар пользователя neochief neochief 16 января 2009 в 15:59

В общем-то они там все в одном месте. Самые полезные, по моему мнению — 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');
    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;
  }
}