Вопрос про программный вывод полей

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

Аватар пользователя milka456 milka456 28 сентября 2018 в 15:10

Здравствуйте, друзья. Прошу не судит строго, так как начал изучать php совсем недавно. Я вывожу поля "Имя" и "Фамилия" из профиля пользователя так:

<?php
global $user;
$user_fields user_load($user->uid);
$firstname $user_fields->field_carrier_name['und']['0']['value'];
$lastname $user_fields->field_carrier_surname['und']['0']['value'];
print  

t("Привет:" $firstname' ' $lastname) ;
?>

Но если пользователь не заполнил эти поля, то выводится просто пустой блок. Как мне сделать, что бы вместо пустого поля выводилось "Привет: Гость"?

Лучший ответ

Аватар пользователя bumble bumble 28 сентября 2018 в 16:06
1

Если использовать ф-ю перевода, нужно писать как-то так:

<?php
t
('Hello, @Name', ['@Name=> $name]);
?>

Здесь, мы определили переводимую строку, в которой используется плейсходлер (по аналогии с printf'ом), вместо которого можно подставить необходимую переменную в массиве переданном 2м аргументом.

Теперь, после первого отображения строки, можно будет:

  1. найти и перевести строку в механизме переводов (/admin/config/regional/translate/translate)
  2. выводить динамически имя пользователя, подставляя его в переменную $name

Детальнее можно почитать в описании.

Для того чтобы подставить "Гость" пользователям без имени, достаточно определить переменную обычным блоком условий IF / ELSE, например так:

<?php
$name 
t('Guest'); // Эту строку потом перевести, если перевода еще нет
if (!empty($user_fields->field_carrier_name['und']['0']['value']) && !empty($user_fields->field_carrier_surname['und']['0']['value'])) {
  
$name $firstname ' ' $lastname;
}

// И потом уже вывести в нужном месте:
t('Hello, @Name', ['@Name=> $name]);
?>

Комментарии

Аватар пользователя milka456 milka456 28 сентября 2018 в 15:24

Semantics wrote:

Хорошо, я понял. Объясните, пожалуйста, дураку как лучше выводить эти поля не захламляя перевод?
Я правильно понял:

<?phpif (empty($firstname)) {
    echo 'Привет Гость';??>
Аватар пользователя bumble bumble 28 сентября 2018 в 16:06
1

Если использовать ф-ю перевода, нужно писать как-то так:

<?php
t
('Hello, @Name', ['@Name=> $name]);
?>

Здесь, мы определили переводимую строку, в которой используется плейсходлер (по аналогии с printf'ом), вместо которого можно подставить необходимую переменную в массиве переданном 2м аргументом.

Теперь, после первого отображения строки, можно будет:

  1. найти и перевести строку в механизме переводов (/admin/config/regional/translate/translate)
  2. выводить динамически имя пользователя, подставляя его в переменную $name

Детальнее можно почитать в описании.

Для того чтобы подставить "Гость" пользователям без имени, достаточно определить переменную обычным блоком условий IF / ELSE, например так:

<?php
$name 
t('Guest'); // Эту строку потом перевести, если перевода еще нет
if (!empty($user_fields->field_carrier_name['und']['0']['value']) && !empty($user_fields->field_carrier_surname['und']['0']['value'])) {
  
$name $firstname ' ' $lastname;
}

// И потом уже вывести в нужном месте:
t('Hello, @Name', ['@Name=> $name]);
?>