Как я могу отобразить изображение из поля в качестве изображения пользователя, а не по умолчанию в drupal с user-picture.tpl.php?


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

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

Поле имеет значение "field_profile_picture".

Стиль изображения - "profile_picture".

Основываясь на этом руководстве , я ввел следующий код в user-picture.tpl.php в папке шаблонов моей темы:

if (!empty($user->field_profile_picture['und'][0]['filename'])) {
  echo theme('image_style', array('style_name' => 'profile_pic', 'path' => file_build_uri($user->field_profile_picture['und'][0]['filename'])));
}

Это не приводит к каким-либо ошибкам PHP, но изображение не отображается. Похоже, что field_acc_profile_picture оценивается как пустой, потому что даже если я помещу print "Hello world"; внутри {}, он не появится. Тем не менее, я уверен, что это поле имеет значение, потому что я могу видеть изображение, отображаемое в представлениях.

Author: Patrick Kenny, 2012-03-30

1 answers

Я не думаю, что $user->field_profile_picture['und'][0]['filename'] будет установлено по умолчанию, обычно вы получаете только столбец fid (это зависит от контекста, но вы должны всегда получать столбец fid в любом случае).

Такой код всегда работает для меня:

if (!empty($user->field_profile_picture[LANGUAGE_NONE][0]['fid'])) {
  // Load the file
  $file = file_load($user->field_profile_picture[LANGUAGE_NONE][0]['fid']);

  // Note the style name is "profile_picture" as explained in your question,
  // not "profile_pic" which was in your original code
  echo theme('image_style', array('style_name' => 'profile_picture', 'path' => $file->uri));
}

Если вы беспокоитесь о дополнительных накладных расходах, связанных с потенциальной загрузкой файла дважды, не беспокойтесь, Drupal кэширует объект в первый раз.

Если вышесказанное не работает, вполне вероятно, что объект $user не полностью загружено, и поэтому поля не были прикреплены. Если это так, загрузите пользователя следующим образом:

$account = user_load($user->uid);

, А затем используйте объект $account для проверки значения поля.

 5
Author: Clive, 2012-03-30 13:49:46