Drupal 6 — Поля профиля содержимого внутри page-user.tpl.php

#php #drupal #drupal-6

#php #drupal #drupal-6

Вопрос:

Здесь я немного схожу с ума … 🙂

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

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

метод ‘$content profile’.

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

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

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

Метод загрузки профиля содержимого $.

 $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)?

Я гуглил и гуглю, и в итоге просто хожу по кругу. 🙁

Приветствую, Джеймс

Комментарии:

1. Где вы пытаетесь их использовать? пожалуйста, объясните немного о том, чего вы пытаетесь достичь

Ответ №1:

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

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

 $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 — это просто объект node. Вы можете получить «полностью отображаемые поля» несколькими способами (предполагая, что вы имеете в виду ваше поле с примененным фильтром).

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

Перейти в раздел: Администратор/содержание/узел-типа/[узел-типа]/поля/field_[имя поля] , чтобы настроить свои поля и убедитесь, что под текстом , что у вас есть «фильтруют текст» выбран.

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

 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. Приветствую подробный ответ, все еще нужно провести некоторое тестирование, но здесь есть несколько хороших идей!

Ответ №2:

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

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

У меня есть поле с именем profile_bio, и я могу указать любую наценку, которая есть, даже не запрашивая учетную запись $.

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

Ответ №3:

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

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

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

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