[РЕШЕНО] Кастомный профиль. Вопрос по категориям

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

Аватар пользователя iNFerNo iNFerNo 8 декабря 2010 в 13:23

Есть много разных кодов по выводу полей профиля.

Но я не нашел как вывести

Категорию профиля (Личная информация, интересы)

И что бы выводилось при условии что хотя бы одно поле заполнено тогда выводится заголовок...

Не хочется ручками оформлять и что бы оставалось в профиле пустые строки типа:

Интересы:

[и пусто все тут ибо не заполнены поля]

Комментарии

Аватар пользователя wargan wargan 8 декабря 2010 в 15:02

например

<?php if( $account->profile_city ):
                  
$profield check_plain($account->profile_city);?>
                  <?php print t('Город: ')?><?php print l($profield'profile/profile_city/'.$profield?>
                <?php endif; ?>
Аватар пользователя vicshine vicshine 8 декабря 2010 в 15:02

вот так у меня сделано в шаблоне профиля юзера (user-profile.tpl.php).
profile_intereses - это название поля, куда пользователь вбивает свои интересы:

Интересы: <?php if (empty ($account->profile_intereses)): ?>
<i><b>не указаны</b></i>
<?php else: ?>
<b><i><?php print $account->profile_intereses ?></i></b>
<?php endif ?>
Аватар пользователя iNFerNo iNFerNo 8 декабря 2010 в 15:04

нет, это все понятно. я не об этом.

Интересы

Кино: лалалалаа
Музыка: лалалалаа

если не заполнены поля - категорию не выводить...

(всякие надписи типа - не заполнено, нет ---- не подходит).

Аватар пользователя wargan wargan 8 декабря 2010 в 15:06

многострочное поле интересы, например так

        <?php if( $account->profile_interest):
          
$fieldname='profile_interest'?>
          <?php print t('Интересы:')?>
          <ul>
          <?php
          $temp_array 
split "[\n,]" $account->$fieldname );
          
$count_total count $temp_array );
          for( 
$counter $counter $count_total $counter ++): ?>
            <?php $link each $temp_array ?>
            <li> <?php print $link value ], 'profile/' $fieldname '/' preg_replace '[\s]' '+' trim $link value ]))) ?> </li>
          <?php endfor ?>
          </ul>
        <?php endif ?>
        

если поле интересы не заполнено, то ничего и не отображается

Аватар пользователя iNFerNo iNFerNo 8 декабря 2010 в 15:23

еще раз. я про КАТЕГОРИИ полей профиля а не про название полей (город, страна, вебсайт, обо мне)

а об ИНТЕРЕСАХ (музыка, кино, хобби) , об ЛИЧНАЯ ИНФОРМАЦыЯ (пол, имя, др, обо мне), об МЕСТОЖИТЕЛЬСТВО (куда входят поля город, страна)

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

Аватар пользователя iNFerNo iNFerNo 8 декабря 2010 в 15:58

и такой вопрос


<?php if( $account->profile_movie):
    
$fieldname='profile_movie'?>

   <?php print t('Movie:')?>

    <?php
    $temp_array 
split "[\n,]" $account->$fieldname );
    
$count_total count $temp_array );
    for( 
$counter $counter $count_total $counter ++): ?>
      <?php $link each $temp_array ?>
      <?php print $link value ], 'profile/' $fieldname '/' preg_replace '[\s]' '+' trim $link value ]))) ?> 
    <?php endfor ?>

  <?php endif ?>

выводит список фильмов не через запятую и слипшиеся названия

подскажите как - что бы через запятую и у последнего названия не было в конце запятой...

Аватар пользователя iNFerNo iNFerNo 8 декабря 2010 в 17:17

И еще. Если пользователь не заполняет поля то на выводе остается пустое место (ДЫРКА) до ближайшего поля профиля... как с этим бороться?

Или кастомна кроме как напротви каждого поля писать - нет/не заполнено и выводить эту пустую ненужную инфу?

Аватар пользователя iNFerNo iNFerNo 8 декабря 2010 в 17:37

Можно ли как то переделать код

   <?php if( $account->profile_icq ):
          $profield = check_plain($account->profile_icq);?>
 <?php print t('ICQ:')?>
    <?php print ($profield) ?>
        <?php endif; ?>

что бы при не заполнении поля, не оставалось пустое место

а то сейчас если не заполнить остается не строка вместо которой должен был вывестись значения поля

Аватар пользователя sergey s. sergey s. 8 декабря 2010 в 18:02

Пример был выше:

<?php
Интересы
: <?php if (empty ($account->profile_intereses)): ?>
<i><b>не указаны</b></i>
<?php else: ?>
<b><i><?php print $account->profile_intereses ?></i></b>
<?php endif ?>

Оператор if как раз отвечает за вывод. Этот пример нужно модифицировать так:

<?php if ($account->profile_intereses): ?>Интересы:
<b><i><?php print $account->profile_intereses ?></i></b>
<?php endif ?>

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

А вообще вы конечно очень грубо обращаетесь за помощью, потому что это ясли - базовые операторы PHP.

Аватар пользователя iNFerNo iNFerNo 8 декабря 2010 в 18:22

еще раз повторюсь что если человек НЕ ЗАПОЛНЯЕТ - остаются пустые поля

как можно сделать так что бы эти полей не было.

с If я уже разобрался.

Аватар пользователя volocuga@drupal.org volocuga@drupal.org 8 декабря 2010 в 19:25

Пиздец,Инферно, ну неужели не понятно?

<?php
if ($любая_переменная) {
print 
$любая_переменная;
} else {
print 
'';
}
?>

Если $поле = 0, т.е пусто, нифига не будет выводится

Аватар пользователя iNFerNo iNFerNo 9 декабря 2010 в 8:46

"<a href="mailto:volocuga@drupal.org">volocuga@drupal.org</a>" wrote:
Пиздец,Инферно, ну неужели не понятно?

Слышь (нервы надо беречь), если бы так работало - не спрашивал бы...

По вашему примеру пустая строка все равно остается. если поле не заполнено.

<?php
if ($account->profile_music)   {
print t('Music:');
print $account->profile_music;
                                }
else {
print '';
      }
?>

"<a href="mailto:volocuga@drupal.org">volocuga@drupal.org</a>" wrote:
Установи Devel, там вкладка появится, в которой можно просмотреть весь объект $account

можно и без девала увидеть объект $account

Аватар пользователя iNFerNo iNFerNo 9 декабря 2010 в 8:50

"sergey s." wrote:
Глядишь что-то хорошее у вас и вправду выйдет. :)

Кончено ясли, если людям говорят одно (что поле вместо не заполненного поля выводится пустая строка), а они все долбят if if else else, которые не решают проблемы...

крутой будет профиль у того кто не заполняет поля (если не решится вопрос)

реальное имя: не задано
пол: не задано
город: не задано
веб: не задано
iд вконтакте: не задано
ICQ: 4564575678
Интересы: не задано

Аватар пользователя iNFerNo iNFerNo 9 декабря 2010 в 9:20

и еще загвоздка в следующем.

если поля профиля мьюзик заполнено
выводим заголовок (я люблю музыку)
в противном случае
не выводим заголовок

<?php if ($account->profile_Music == "1") {print "Я люблю слушать музыку:" ;};
else {
print '';
}
?>

но что то не работает

Аватар пользователя volocuga@drupal.org volocuga@drupal.org 9 декабря 2010 в 14:00

"iNFerNo" wrote:
Слышь (нервы надо беречь), если бы так работало - не спрашивал бы...

По вашему примеру пустая строка все равно остается. если поле не заполнено.

<?php
if ($account->profile_music) {
print t('Music:');
print $account->profile_music;
}
else {
print '';
}
?>

Инферно, только полный идиот не сообразит, что если выводится то, что между фигурными скобками, то условие не выполняется и $account->profile_music почему то не равно нулю

А почему оно не равно нулю, нужно смотреть.

Аватар пользователя iNFerNo iNFerNo 9 декабря 2010 в 14:10

решил своими силами покапавшись 3 часа в голове и перебирая разные варианты (многое наугад)

решение такое :

<?php
if (($account->profile_hobby) == ""):  ?>
<?php endif; ?>

<?php if ($account->profile_hobby): ?>
Хобби:
<?php print $account->profile_hobby ?> <br />
<?php endif; ?>

Аватар пользователя iNFerNo iNFerNo 9 декабря 2010 в 14:14

Осталось решить вопрос с заголовками к полям (Интересы, Личная инфа, Доп. Инфа и тд и тп).

Подскажите структуру кода что бы выполнялось следующее...

Если поля profile_hobby, profile_music, profile_movie не заполнены

То заголовок (Интересы, Личная инфа, Доп. Инфа и тд и тп) не выводится.

В противном случае - выводится.

Аватар пользователя iNFerNo iNFerNo 9 декабря 2010 в 14:20

Решил задачу. Уфффффффф

<?php if ($account->profile_hobby & $account->profile_music & $account->profile_movie): ?>
<br />
<h3>Интересы</h3>
<br />
<?php endif; ?>
Аватар пользователя iNFerNo iNFerNo 9 декабря 2010 в 14:21

Только вопрос

& - что делает?

мне нужно что бы выполнялось условия такое , ХОТЯ БЫ одно поле заполнено тога выводим заголовок.

оно это решает?

или выводит заголовок когда все три поля из условия заполнены?

Аватар пользователя iNFerNo iNFerNo 9 декабря 2010 в 14:23

Поигравшись с профилем своим понял что это обязательное условие что бы все три были заполнены...

подскажите какое условие прописать что бы было хотя бы одно из набора полей...

Аватар пользователя iNFerNo iNFerNo 9 декабря 2010 в 14:37

каким условием оператором можно объединить все варианты что бы вывод был один на всех...

т.е.

если (1 и 2 и 3) или (1 и 2) или (2 и 3) или (1 и 3) или (1) или (2) или (3) имеют заполненное поле, то выводить заголовок

Аватар пользователя iNFerNo iNFerNo 9 декабря 2010 в 14:45

Решил все что хотел вчера. Всем спасибо.

<?php if (($account->profile_hobby & $account->profile_music & $account->profile_movie) or ($account->profile_hobby & $account->profile_music) or ($account->profile_hobby & $account->profile_movie) or ($account->profile_music & $account->profile_movie)): ?>
<br />
<h3>Интересы</h3>
<br />
<?php endif; ?>