Drupal 6 - поля профиля контента внутри page-user.tpl.php - PullRequest
1 голос
/ 12 апреля 2011

Схожу с ума здесь ...:)

Я просто пытаюсь добавить поля CCK из типа контента профиля контента в page-user.tpl.php (я создаю страницу профиля пользователя с высокой тематикой).

Кажется, есть два метода, каждый из которых имеет уникальный недостаток, который я не могу преодолеть:

метод $ content profile.

$var = $content_profile->get_variables('profile');

print $var['field_last_name'][0]['safe']; 

Это замечательно, за исключением того, что я не могу передать текущего просматриваемого пользователя в $ content_profile, и поэтому он всегда показывает зарегистрированного пользователя.

метод '$ content profile load'.

$account_id = arg(1);
$account = user_load($account_id);
$user_id = $account->uid;

$var = content_profile_load('profile', $user_id);

print $var->field_first_name[0]['value']; 

Хорошо, но теперь я не могу получить доступ к полным отображаемым полям, только к простым значениям (то есть, если у поля есть абзацы, они не будут отображаться).

Как я могу получить обе вещи одновременно? Другими словами, как я могу отобразить поля, относящиеся к просматриваемому в данный момент пользователю, которые также отображаются («безопасный» формат в 1)?

Я гуглил и гуглил, и я просто заканчиваю кругами. (

Cheers, Джеймс

Ответы [ 3 ]

5 голосов
/ 13 апреля 2011

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

В вашем примере:

$account_id = arg(1);
$account = user_load($account_id);
$user_id = $account->uid;

$var = content_profile_load('profile', $user_id);

print $var->field_first_name[0]['value']; 

$ var - это просто объект узла. Вы можете получить «полные визуализированные поля» несколькими способами (при условии, что вы имеете в виду свое поле с примененным фильтром).

Самое важное, что нужно проверить, это то, что ваше поле действительно правильно настроено.

Перейти к: admin / content / type-type / [тип-узла] / fields / field_ [field-name] , чтобы настроить поле и убедиться, что в обработка текста , что вы Выбран «Отфильтрованный текст».

Если это не помогает, попробуйте применить это:

content_view_field(content_fields("field_last_name"), $var, FALSE, FALSE)

(подробнее об этом здесь: http://www.trevorsimonton.com/blog/cck-field-render-node-formatter-format-output-print-echo)

вместо этого:

print $var->field_first_name[0]['value']; 

если ничего из этого не поможет ... опробуйте некоторые вещи, которые я нашел в своем блоге, об этой самой проблеме: http://www.trevorsimonton.com/blog/print-filtered-text-body-input-format-text-processing-node-template-field-php-drupal

1 голос
/ 13 апреля 2011

Я уже пробовал создавать тематические профили контента, отображая поля узла профиля на странице пользователя, и мне это всегда казалось немного "хакерским".То, что я полюбил, - это просто перейти на страницу настроек профиля контента для этого типа узла и настроить отображение «Показать весь контент».Это хорошо и прекрасно, за исключением глупой разметки, такой как имя типа узла, которое вводит профиль контента.

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

function mymodule_preprocess_content_profile_display_view(&$variables) {
  if ($variables['type'] == 'nodetypename') {
    unset($variables['title']);
  }
}

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

1 голос
/ 12 апреля 2011

Когда вы создаете страницу профиля пользователя, для нее есть встроенный механизм.просто создайте файл шаблона пользователя user_profile.tpl.php.

Когда вы используете встроенный механизм, вы автоматически получаете доступ к объекту $ account пользователя, которого вы просматриваете, включая все поля cck профиля пользователя.У вас есть поля, которые вы ищете, без необходимости программно загружать пользователя.

У меня есть поле с именем profile_bio, и я могу выдать любую разметку, в которой нет необходимости запрашивать $ account.

<?php if ($account->content[Profile][profile_bio]['#value']) print "<h3>Bio</h3>".$account->content[Profile][profile_bio]['#value']; ?>
...