Получение данных поля со страницы профиля

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

Аватар пользователя Kottov Kottov 3 февраля 2014 в 2:38

Пользователь при регистации заполняет поле feild_address.
Создает материал в котором в одном из полей должна собираться ссылка используя значение этого поля. Собирается в скрытом режиме, но затем она видна другим при просмотре его материала.

Для себя разбил это на две задачи.
1. При создании материала автоматически вносить в скрытое поле значение с feild_address автора. Думал что это токенами лекго сделается. Но не выходит.
Пробовал:

[current-user:field_address]

%value[current-user:field_address]

!value[current-user:field_address]

value[current-user:field_address]

<?php
$first = '[current-user:field_address]';
&second = token_replace($first, $type = 'global', $object = NULL, $leading = '[', $trailing = ']');
print_r(&second);
?>
Ничего не вышло.
Как правильно ввыдить токены? Если можно пример кода полностью.

2. Затем собрать ссылку с помощью Computed Field
по образцу из модуля.
Computed Code(PHP)
$entity_field[0]['value'] = array_pop(array_pop(field_get_items($entity_type, $entity, 'field_a'))) + array_pop(array_pop(field_get_items($entity_type, $entity, 'field_b')));
Display Code (PHP)
$display_output = $entity_field_item['value'];

Все получаестя (с полем этой же ноды, конечно) но выдает ошибку:
Warning: array_pop(): The argument should be an array в функции eval() (строка 1 в файле /hsphere/local/home/xxxxx/xxxxx.org/sites/all/modules/computed_field/computed_field.module(394) : eval()'d code).

Может есть цельное решение?
(но по моему "пути" тоже если можно ответьте, так как по любому это надо знать)

Комментарии

Аватар пользователя Kottov Kottov 4 февраля 2014 в 4:47

Выдает ссылку на сайт.

Подправил. "Получилось" только таким образом.

<?php
global $user;
$user_fields = user_load($user->uid);
$entity_field[0]['value']= $user_fields->field_address['und']['0']['value'];
print_r($entity_field[0]['value']);
?>

но поле получается "динамическое". оно выдает данные по просматривающему в данным момент пользователю. А надо чтоб оно дало данные по автору материала.

ну и так "получилось" - не получается почему-то использовать данные этого для расчетов в других полях с помощью Computed field.
Пытаюсь извлечь его - выдает тип поля - "php_code"

Аватар пользователя aa2007 aa2007 4 февраля 2014 в 13:38

"Kottov" wrote:
global $user;

с этим моментом надо принимать во внимание, что computed_field будет генерировать ссылку относительно текущего пользователя, а не автора ноды. Если только не установить флажок в свойствах поля computed_field для записи значения в бд.

Аватар пользователя Kottov Kottov 5 февраля 2014 в 5:02

[quote].это что за синтаксис?[quote].

да, конечно же было так:

<?php
$first = '[current-user:field_address]';
$second = token_replace($first, $type = 'global', $object = NULL, $leading = '[', $trailing = ']');
print_r($second);
?>

но выдало:

Recoverable fatal error: Argument 2 passed to token_replace() must be an array, string given, called in C:\OpenServer\domains\clean\modules\php\php.module(80) : eval()'d code on line 3 and defined в функции token_replace() (строка 79 в файле C:\OpenServer\domains\clean\includes\token.inc).

понял что это был пример для 5-го Друпала

для 7-го надо так

token_replace($text, array $data = array(), array $options = array())

так "получилось"
<?php
global $user;
$first = '[current-user:field_address]';
$second = token_replace($first, array('user' => $user));
print_r($second);
?>

но опять же идет привязка залогиненому ползователю и даже если убрать global $user;
и при этом еще выдает:
Notice: Undefined variable: user в функции eval() (строка 4 в файле C:\OpenServer\domains\clean\modules\php\php.module(80) : eval()'d code).

доступных токенов типа [node:author:field_address] - не было

Аватар пользователя Kottov Kottov 6 февраля 2014 в 4:35

Спасибо. В PHP поле это сработало. В Computed Field - нет, сильно ругается (я уж было думал что прямо в нем собрать ссылку из данных полей автора и его материала).
Провал через токены также получить данные полей документа - получилось.
Собрал свою ссылку.

Если бы вы могли описать как работает подобная конструкция - вообще было бы чудесно.

В любом случае спасибо за содействие и если будет нужна помощь в активации ripple кошелька обращайтесь.

Аватар пользователя Kottov Kottov 6 февраля 2014 в 16:35

Единственно что выдает нотис.

Notice: Undefined variable: author_adress в функции eval() (строка 22 в файле C:\OpenServer\domains\clean\modules\php\php.module(80) : eval()'d code).

Notice: Undefined variable: node в функции eval() (строка 24 в файле C:\OpenServer\domains\clean\modules\php\php.module(80) : eval()'d code)

Как с этим бороться?

добавил в начало кода:

$node = 0;
$author_adress =0;

- помогло

Это нормальное решение?

Аватар пользователя Kottov Kottov 7 февраля 2014 в 5:12

хорошая конструкция :

<?phpif (arg(0) == 'node' && ctype_digit(arg(1))) {
  $node = menu_get_object();
  $author_adress = token_replace('[node:author:field_adress]', array('node' => $node));
?>

но в самом профайле пользователя не работает - не проходит по условию
пробовал без условия, работает но по стандартным токенам (current-page:url)
пробовал заменять токены на current-page:field_adress - не понимает

Аватар пользователя drupby drupby 7 февраля 2014 в 5:36

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

"Kottov" wrote:
но в самом профайле пользователя не работает

то в материале надо , то уже в профиле - определитесь
а то вы не зная ни php ни drupal api пытаетесь решать какие то непонятные и каждый раз разные задачи
для начала подробно опишите что конкретно у вас имеется и что нужно из этого получить
а то у вас то токены задействованы , то пытаетесь получить предпоследний элемент массива не зная что он содержит
и если полезли в код - научитесь его отлаживать , с помощью Xdebug , var_dump($vars) , print_r($vars) , dpm($vars) модуля devel
проверяйте каждую cтроку своего кода и все переменные - за вас никто этого не сделает , не обладая экстрасенсорными способностями и не зная что содержится в переменных которые вы бездумно пытаетесь передавать во все функции которые попадаются вам на глаза

Аватар пользователя Kottov Kottov 7 февраля 2014 в 21:33

Спасибо за предыдущий код, это помогло.
Надо и в материале и в профиле использовать значения полей в других полях для создания ссылок.
В профиле (и в пределах одной ноды) я их делал с помощью Computed Fiel. Он часто работает но дает ворнинг по типу переменной. И ответов нормальных нет даже у знатоков.

Раз уж есть возможность делать это на php то решил попробовать обойтись без модулей.

Научусь и отлаживать и кодить. Просто пока нужно решить эти ТРУДНОСТИ (и прототип проекта будет готов) о существовании которых можно было только догадываться.
Сама идея проекта исключает наемный труд, - только участие. Всем "приложившим руку" гарантируется пользование сервисом, (впрочем как и всем добрым людям)).