Здравствуйте, друзья. Прошу не судит строго, так как начал изучать 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) ;
?>
Но если пользователь не заполнил эти поля, то выводится просто пустой блок. Как мне сделать, что бы вместо пустого поля выводилось "Привет: Гость"?
Комментарии
Во-первых, зачем вы делаете вывод через t()?
Вы этим захламляете переводы.
Во-вторых, http://www.php.su/learnphp/cs/?co
Хорошо, я понял. Объясните, пожалуйста, дураку как лучше выводить эти поля не захламляя перевод?
Я правильно понял:
<?phpif (empty($firstname)) {
echo 'Привет Гость';??>
Если использовать ф-ю перевода, нужно писать как-то так:
<?php
t('Hello, @Name', ['@Name' => $name]);
?>
Здесь, мы определили переводимую строку, в которой используется плейсходлер (по аналогии с printf'ом), вместо которого можно подставить необходимую переменную в массиве переданном 2м аргументом.
Теперь, после первого отображения строки, можно будет:
Детальнее можно почитать в описании.
Для того чтобы подставить "Гость" пользователям без имени, достаточно определить переменную обычным блоком условий 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]);
?>
Спасибо большое за развернутый ответ!)
Это немного гемморой, но все таки
http://drupalace.ru/lesson/korrektnaya-rabota-s-polyami-v-sedmom-drupale...
Und не стоит юзать