[Частично решено] PHP переменные во Views

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

Аватар пользователя whiesam whiesam 29 марта 2014 в 11:51

Добавил екстра поле во вьюшку (программно), типа php поля.
Вьюшка находится на странице юзера с соответствующим контекстным фильтром.

Чего надо добиться:
Чтобы в поле было что-то типа: echo 111+$поле_сумма;

Как я делал (не пока не то вышло). Тут принцип поля:
гружу массив вьюхи через views_get_view_result
Нахожу там поля, и свершаю с ними математику)
Но дело в том что, в массиве вьюхе, строки идут в отдельным массивах, типа: $массив['0'], где 0 - это порядковый номер строки.
В итоге у меня все екстраполя, получают данные только с первой строки. Я не могу привязать это поле к той строке, в которой оно находится. То, есть не могу получить значения строки, в которой находиться это поле.
Это грубый пример, и на самом деле там всё сложнее, идет генерация формы с данными из полей строки.

Может как-то по другому можно?
Очень нужна помощь!

Комментарии

Аватар пользователя Winner Winner 29 марта 2014 в 12:38

"whiesam" wrote:
Я не могу привязать это поле к той строке, в которой оно находится.

"whiesam" wrote:
Но дело в том что, в массиве вьюхе, строки идут в отдельным массивах, типа: $массив['0'], где 0 - это порядковый номер строки.

Необходимая строка всегда идет под разным порядковым номером?
Кстати это называется ключ массива.

Аватар пользователя whiesam whiesam 29 марта 2014 в 13:30

Я проанализировал, номер строки не подхватить, наверное правильнее будет каким-то кодом перехватить данные этой строки, или сопоставлять номера массивов и поля id в них (хз как делать второе).

Я сейчас выдергиваю данные так: $views_array['0']->_field_data['nid']['entity']->field_summ['und']['0']['value'];
Где $views_array['Порядковый номер строк во вьюшке'] - кстати не знаю чем этот номер обусловлен, не понятно порядковый в выводе или проcто id.
Мне бы сразу из строки работать, не подгружая отдельно данные этой же вьюхи через views_get_view_result.

Сейчас пробую с модулем Views PHP, там есть переменные id ноды строки, от неё плясать уже проще. Но не очень хотелось бы через этого модуль.

Аватар пользователя whiesam whiesam 29 марта 2014 в 14:30

Частичное решение:

В модуле Views PHP (Предоставляет PHP вставку кода в поле вьюхи), есть переменная $data, в которой есть все значения полей это строки (то есть нужный фрагмент массива).
Если программно (самописным модулем) пихать код в поле, то эти переменные не работают.

Вроде всё работает таким макаром, но php код будет тянуться из БД. Что сильно затормозит загрузку страницы с это вьюхой. Так что хотелось бы программно.

Аватар пользователя whiesam whiesam 29 марта 2014 в 18:35

"Chyvakoff" wrote:
Лучше показывай код. Из твоего рассказа понятно лишь, что не удаётся провернуть какой-то финт на php.

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

<?php
// Вариант 1 (без Views PHP)
$views_array views_get_view_result('check''page'$userid);
$value $views_array['0']->_field_data['nid']['entity']->field_check_summ['und']['0']['value'];
// Тут и понятно что дернули первую строку $views_array['0'] и для всех остальных полей все значения будут от первой строки.

// Через модуль Views PHP работает вот так. Без необходимости views_get_view_result

$value $data->_field_data['nid']['entity']->field_check_summ['und']['0']['value'];
// В $data и лежит этот массив от нужной строки. Но если делать не через модуль, то так не выйдет.
?>

Вот таким макаром я добавлял код в поле (вариант первый, без Views PHP): http://sanchiz.net/blog/extra-fields-views

Аватар пользователя Chyvakoff Chyvakoff 30 марта 2014 в 13:38

Ссылка ваше не работает.
Может обычного foreach нехватает?

// Вариант 1 (без Views PHP)
$views_array = views_get_view_result('check', 'page', $userid);
foreach($views_array as $val){
    $value = $val->_field_data['nid']['entity']->field_check_summ['und']['0']['value'];
    dpm($value);
}
Аватар пользователя whiesam whiesam 30 марта 2014 в 14:57

"Chyvakoff" wrote:
Ссылка ваше не работает.

Видать там сервак лег.
"Chyvakoff" wrote:
Может обычного foreach нехватает?

Не прокатит. Так как этот код отрабатывается сразу на все поля.
Код который Вы привели, отдаст мне значения последней строки, так как foreach прогонит массив до конца, он не знает какой именно фрагмент мне нужен.

Аватар пользователя Chyvakoff Chyvakoff 30 марта 2014 в 18:35

"whiesam" wrote:
так как foreach прогонит массив до конца

Понятная песня. При каждом прогоне можно брать нужное значение и складывать в массив.
"whiesam" wrote:
он не знает какой именно фрагмент мне нужен

А кто знает?)) И как вообще скрипт должен узнать это в принципе?

Аватар пользователя whiesam whiesam 30 марта 2014 в 19:14

"Chyvakoff" wrote:
А кто знает?)) И как вообще скрипт должен узнать это в принципе?

Я сначала думал разобрать на запчасти модуль Views PHP, и посмотреть как он этот $data формирует. Но потом забил, так как сильно много бы провозился скорее всего.