Умеет видеть переменную в 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.
Вы получите этот результат:
Надеюсь, что это поможет!
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.
Ответ 8
Вы должны использовать 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
Ответ 9
Если вы по какой-то причине не можете использовать модуль devel, другие полезные функции "отладки" могут быть var_export() и обертка Drupal drupal_var_export(). Эти функции дают выход как PHP-код.