Умеет видеть переменную в print_r(), но не уверен, как получить к ней доступ в коде

Я googled, установлен Devel, Drupal для Firebug, но я не могу его найти.

Я нашел то, что хочу, я знаю, где это; Я просто не знаю, как это получить.

Я поставлю это в скобках кода, но Devel сообщает мне, что имя файла (которое я хочу вставить в файл .tpl.php):

field_image (Object) stdClass 
  handler (Object) views_handler_field_field 
    view (Object) view 
      result (Array, 2 elements) 
        0 (Object) stdClass 
          _field_data (Array, 1 element) 
            nid (Array, 2 elements) 
              entity (Object) stdClass
                field_image (Array, 1 element) 
                  und (Array, 1 element)
                    0 (Array, 11 elements)                                      
                      filename (String, 23 characters ) FILENAME.jpg

Итак, как я могу получить FILENAME.jpg для вывода с помощью PHP?

<?php print $something->other; ?>

Ответы

Ответ 1

Всякий раз, когда вам нужно прочитать значение из переменной, вам нужно знать, какое выражение нужно сформулировать для доступа к этому значению.

Для простого значения переменной это просто, вы просто берете имя переменной и получаете доступ к ней как переменной, префикс ее знаком $:

var_dump($variable);

Этот описан здесь.

Однако это работает только для простых типов данных, таких как string или integer. Существуют также составные типы данных, а именно array и object. Они могут содержать дополнительные типы данных, будь то простые или сложные. В руководстве по PHP вы можете узнать, как получить доступ к значениям массива и как вы можете получить к ним доступ из объекта. Я думаю, вы уже знаете об этом немного, поэтому просто для того, чтобы связать это.

Когда вы узнаете об этом, вы можете объединить это. Например. если в объекте есть массив, и в нем есть строка, которую вы хотели бы получить, вам нужно совместить знак $ и имя переменной с необходимыми аксессуарами, именами свойств и ключами массива. Тогда вы получите свою ценность. Данные, которые вы опубликовали, показывают, что у вас есть объект с несколькими другими объектами и массивами, и в конце вы найдете имя переменной.

Пример комбинации:

var_dump($variable->handler->view[0]->_field_data);

Это основано на данных, которые вы указали выше. $variable, где вы начинаете, -> используется для доступа к объектам, которым необходимо присвоить имя (например, имя переменной): handler. Как вы видели в своем отладочном выходе, который handler является объектом, вам нужно снова использовать -> для доступа к его члену view.

Теперь view отличается, потому что это массив. Вы получаете доступ к значениям массива с помощью [] и помещая в него ключ. Ключ в моем примере - это число, 0. И поскольку значение этой записи массива снова является объектом, на следующем шаге вам нужно снова использовать ->.

Вы можете продолжить эту игру, пока не достигнете интересующего вас элемента. Вывод отладки, который у вас уже есть, позволяет вам написать выражение, возвращающее значение. Возможно, это:

$field_image->handler->view->result[0]->_field_data['nid']['entity']->field_image['und'][0]['filename']

Но я не могу подтвердить это здесь в моей системе в полном объеме.

Однако при поиске вещей полезно использовать var_dump, поскольку вы могли бы шаг за шагом расширять выражение до тех пор, пока не найдете этот элемент. Если вы сделаете ошибку, вы сразу увидите. Иногда это помогает разместить die(); после оператора var_dump, чтобы не допустить ответа до того, как он будет содержать многие другие данные, которые скроют информацию от вас. Плагин devel предлагает дополнительные процедуры отладки для выдачи значимых значений.

Ответ 2

Если это ваш объект:

field_image (Object) stdClass 
  handler (Object) views_handler_field_field 
    view (Object) view 
      result (Array, 2 elements) 
        0 (Object) stdClass 
          _field_data (Array, 1 element) 
            nid (Array, 2 elements) 
              entity (Object) stdClass
                field_image (Array, 1 element) 
                  und (Array, 1 element)
                    0 (Array, 11 elements)                                      
                      filename (String, 23 characters ) FILENAME.jpg

Я думаю, вы можете найти его, используя:

field_image->handler->view->result[0]->_field_data['nid'][entity]->field_image['und'][0]['filename]

Может быть ошибкой там, но общая идея: если у вас есть объект, получите переменную с помощью ->, и если у вас есть массив, используйте [key].

Ответ 3

Скажем, у вас есть объект node в $node. Вы можете распечатать его очень хорошо с помощью:

dpm($node); // remember this function is declared in devel module

Затем вы можете увидеть информацию из $ node и развернуть внутренние поля щелчком. И с двойным щелчком на поле вы можете увидеть его путь php.

Devel Information of a Drupal node object

Вы получите этот результат:

Devel showing the path after double clicking a field

Надеюсь, что это поможет!

PD: Я предполагаю, что эта функция недоступна на D6 dpm.

Ответ 4

Try:

$field_image->handler->view->result[0]->_field_data['nid']['entity']->field_image['und'][0]['filename']

Ответ 5

Если вы установили установку и попробуйте

krumo ($variable);

Просто помните, что по умолчанию только администраторы имеют права использовать команду krumo, но это можно отсортировать, посмотрев разрешения роли DEVEL. (не забудьте удалить эти разрешения после выполнения, хотя)

Ответ 6

<? print_r($something["other"]); ?>

(где это другое) поэтому результат 'this'

Ответ 7

Позвольте мне подвести итоги

print_r($data); => Traditional view of printing array.

var_dump($data); => Not so much cleaned view , gives you everything but in very suffocated manner

print "<pre>"; print_r($data); => A cleaned view but will not get   data types information.

dpm($data); => It gives you everything, but you need to have installed devel.

Ответ 9

Если вы по какой-то причине не можете использовать модуль devel, другие полезные функции "отладки" могут быть var_export() и обертка Drupal drupal_var_export(). Эти функции дают выход как PHP-код.