Как вывести юзерпик 120х120?

Картинка в шаблоне выводится

<img src="{$post.user.photo_url_20}" class="userpic" alt="">

Как изменить запрос, чтоб выводилось нормальное изображение, а не растянутое 20х20, где непонятно, что изображено?

1 ответ

  • 1
    Владислав 20 июня 2018 12:33 #

    Разобрался

    <a href="{$post.user.posts_link}">
        <img class="img" src="{$wa->user()->getPhoto2x(120)}">
    </a>
    • +1
      Владислав Владислав 20 июня 2018 13:14 #

      Блин, тоже не правильно работает. Фотография загружается, если я залогинен. Как только я выхожу, фотка меняется на заглушку...

      • +1

        Логично, выводите же фото авторизованного пользователя, когда вышли фото заглушка.

        • +1
          Владислав Владислав 20 июня 2018 13:45 #

          Как вывести фото профиля без авторизации?

          Я верстаю вот такой шаблон

          Под каждым постом вот такой блок с автором

          • +2

            Вам надо фото автора поста получить?

            • +1
              Владислав Владислав 20 июня 2018 16:36 #

              Именно, аву автора поста без авторизации и с авторизацией, чтоб ничего не менялос

              • +2

                Этот код только для авторизованных пользователей, тут не нашел как можно в шаблоне вызвать пользователя по ид и получить его данные, как вариант вижу только написать хелпер с запросом в базу и вытаскивать. Может кто нить знает проще, ауу?

                $wa->user()
                • +2
                  Владислав Владислав 21 июня 2018 12:36 #


                  <img class="img" src="{$wa->contact($post.user.id)->getPhoto2x("130")}">
                  • +1
                    replicant replicant 21 июня 2018 13:25 #

                    Небольшой вопрос (пытаюсь разобраться). Что будет лучше getPhoto2x("130") или getPhoto("260")? Т.е. вопрос в том, почему в вашем случае именно 2х применяется?

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

                    • +1
                      Владислав Владислав 21 июня 2018 14:02 #

                      Дело в том, что в стилях CSS вывода изображения стоит ограничение 130px;

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

                      А так нет никакой разницы, делайте так, как удобно.

                  • +1
                    Alex Alex 5 апреля 2021 16:21 #

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

                    <div class="p-reviews__item-icon">
                        <div class="p-reviews__item-icon-text">
                        {$review.author.name|truncate:1:''}
                        </div>
                    </div>

                    Я заменил 

                    {$review.author.name|truncate:1:''}

                    на 

                    <img class="img" src="{$wa->contact($post.user.id)->getPhoto2x("30")}">

                    и теперь у всех отзывов (даже у которых в профиле не загружена аватара) выводится аватарка от загруженного пользователя.

                    Как сделать чтобы работало все нормально и загружалась "личная" аватарка у нужного комментария?

                    • +1
                      Alex Alex 5 апреля 2021 16:29 #

                      Вроде создал условие, но в такой последовательности не выводится аватарка. Если менять местами параметры в условии, то на всех отзывах отображается аватарка даже если она отсутствует в профиле пользователя.. Что не так сделал?

                      {if isset($review.author.id)}
                      {$review.author.name|truncate:1:''}
                      {else}
                      <img class="img" src="{$wa->contact($post.user.id)->getPhoto2x("30")}">
                      {/if}

                      • +1
                        replicant replicant 5 апреля 2021 18:42 #

                        Не улавливаю связи между author id и наличием фото. Простая проверка на наличие фото размером 50 px делается так.

                            {if !empty($review.author.photo_url_50)}
                                <img src="{$review.author.photo_url_50}">
                            {/if}

                        А вообще загляните в массив author. Тогда проще будет всё делать. Вот пример

                        [ массив review
                          'id' => '271', - id комментария
                          'author' => [
                            'name' => 'ИМЯ',
                            'id' => '158', - id юзера
                            'photo' => '432309290',
                            'photo_url_50' => '/wa-data/public/.../432309290.50x50.webp',
                            'photo_url_20' => '/wa-data/public/.../432309290.20x20.webp',
                          ],
                        ]

                        50 и 20 px - готовые пути к аватарке, а в photo указано имя файла. Если в photo имя есть, то очевидно и аватарка есть. Причем тут id?

                        По-моему надо проверять только $review.author.photo и, если имя есть, но готовые предустановленные размеры не устраивают, то запрашивать генерацию нужного размера для этого изображения (см. ниже).

                        И зачем дергать ещё один массив, если из $review.author.id проще взять все что надо для запроса к контактам.

                        Вот так выводится фото для конкретной персоны в 130х130 точек

                        <img src="{$wa->contact($review.author.id)->getPhoto("130")}">

                        • +1
                          Alex Alex 5 апреля 2021 19:30 #

                          Спасибо, данный код работает. Подскажите, а как сделать условие 

                          {$review.author.name|truncate:1:''}

                          Чтобы если нет аватара в профиле, то срабатывало это условие (отображение первой буквы имени)?

                          Не сильно в коде разбираюсь просто..

                          • +2
                            replicant replicant 6 апреля 2021 11:55 #

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

                            Если у комментатора есть фото, то вывести его аву в размере 130 х 130 точек (свой размер подставьте по необходимости) или, если фото нет, то вывести только первую букву от имени.

                            {if !empty($review.author.photo)}
                                <img src="{$wa->contact($review.author.id)->getPhoto("130")}">
                            {else}
                                {$review.author.name|truncate:1:''}
                            {/if}

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите