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

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

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

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

 field_image (Object) stdClass 
   обработчик (объект) views_handler_field_field 
     view (Object) 
       результат (массив, 2 элемента) 
         0 (Объект) stdClass 
           _field_data (массив, 1 элемент) 
             nid (массив, 2 элемента) 
               объект (объект) stdClass
                 field_image (массив, 1 элемент) 
                   und (массив, 1 элемент)
                     0 (массив, 11 элементов)                                      
                       filename (String, 23 символа) FILENAME.jpg

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

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

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

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

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

 var_dump($variable); 

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

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

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

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

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

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

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

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

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

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

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

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

 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] 

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

Допустим, у вас есть узел в $ node. Вы можете распечатать его значения очень хорошо с:

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

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

Devel Информация об объекте узла Drupal

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

Devel показывает путь после двойного щелчка по полю

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

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

Пытаться:

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

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

 krumo ($variable); 

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

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

(где другое – это), поэтому результатом является «это»,

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

 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. 

Вы должны использовать field_view_field ($ entity_type, $ entity, $ field_name, $ display = array (), $ langcode = NULL), которые возвращают рендерируемый массив. Вы можете проверить документ api https://api.drupal.org/api/drupal/modules%21field%21field.module/function/field_view_field/7.x

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