Создание своего меню и вывод аватара пользоателя

InstantCMS 2.X

Вак вставить аватар вчерез PHP код

#1 24 декабря 2021 в 12:03

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

Хочу сделать более гибкое меню пользователя. На первой картинке такое было, с выводм через станадартный виджет.
На второй картинке — такое делаю. Пока изменений немного, только линии. В дальнейшем добавлю перевод пунктов меню:

Изображение

Часть кода с аватаром:

<div class=«avatar»><a href="<?php $url = href_to_profile($user); ?>"><img class=«img-fluid» src="/upload/default/avatar_micro.png" alt=«Антон» title=«Антон» /></a></div>

Весь код меню:

<?php if(cmsUser::isLogged()) {
    $userID = cmsUser::get('id');
    $users_model = cmsCore::getModel('users');                        
    $user = $users_model -> getUser($userID); ?>
    <div class=«widget_user_avatar»>
    <div class=«user_info»>
    <div class=«avatar»><a href="<?php $url = href_to_profile($user); ?>"><img class=«img-fluid» src="/upload/default/avatar_micro.png" alt=«Антон» title=«Антон» /></a></div>

    <div class=«name»><a href="<?php echo href_to('users', $user['id']); ?>"><?php html($user->nickname); ?></a></div></div>
    <ul class=«menu»>
    <li class=«home»><a title=«Моя страница» class=«item» href="/users/1" target="_self" ><span class=«wrap»>Моя страница</span></a></li>
    <li class=«editor»><a title=«Редактировать» class=«item» href="/users/1/edit" target="_self" ><span class=«wrap»>Редактировать</span></a></li>
    <li><div class=«lineguests»></div></li>
    <li class=«abuse»><a title=«Пожаловаться» class=«item» href="/abuse" target="_self" ><span class=«wrap»>Пожаловаться</span></a></li>
    <li class=«help»><a title=«Помощь» class=«item» href="/users/1/questions" target="_self" ><span class=«wrap»>Помощь</span></a></li>
    <li><div class=«lineguests»></div></li>
    <li class=«folder adminpanel»><a title=«Управление» class=«item» href="/dev" target="_self" ><span class=«wrap»>Управление</span></a><ul>
    <li class=«adminpanel»><a title=«Контент» class=«item» href="/dev/content" target="_self" ><span class=«wrap»>Контент</span></a></li>
    <li class=«adminpanel»><a title=«Типы контента» class=«item» href="/dev/ctypes" target="_self" ><span class=«wrap»>Типы контента</span></a></li>
    <li class=«adminpanel»><a title=«Меню» class=«item» href="/dev/menu" target="_self" ><span class=«wrap»>Меню</span></a></li>
    <li class=«adminpanel»><a title=«Виджеты и страницы» class=«item» href="/dev/widgets" target="_self" ><span class=«wrap»>Виджеты и страницы</span></a></li>
    <li class=«adminpanel»><a title=«Компоненты» class=«item» href="/dev/controllers" target="_self" ><span class=«wrap»>Компоненты</span></a></li>
    <li class=«adminpanel»><a title=«Каталог дополнений» class=«item» href="/dev/addons_list" target="_self" ><span class=«wrap»>Каталог дополнений</span></a></li>
    <li class=«adminpanel»><a title=«Пользователи» class=«item» href="/dev/users" target="_self" ><span class=«wrap»>Пользователи</span></a></li>
    <li class=«adminpanel»><a title=«Настройки» class=«item» href="/dev/settings" target="_self" ><span class=«wrap»>Настройки</span></a>
    </li>
    </ul>
        </li>
    <li><div class=«lineguests»></div></li>
    <li class=«loginout»><a title=«Выйти» class=«item» href="/auth/logout" target="_self" ><span class=«wrap»>Выйти</span></a></li>
    </ul>    
</div>


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

#2 24 декабря 2021 в 12:18

Код с аватаром — у Вас прописана статичная картинка из дефолта, что бы картинка вставлялась динамически измените начало кода на:

  1. <?php if(cmsUser::isLogged()) {
  2. $userID = cmsUser::get('id');
  3. $users_model = cmsCore::getModel('users');
  4. $user = $users_model->getUser($userID);
  5. $user_ava = cmsModel::yamlToArray($user["avatar"]);
  6. ?>
  7. <div class="widget_user_avatar">
  8. <div class="user_info">
  9. <div class="avatar"><a href="<?php $url = href_to_profile($user); ?>"><img class="img-fluid"; src="<?php echo $user_ava["small"]; ?>" alt="Антон"; title="Антон"/></a></div>
#3 24 декабря 2021 в 12:59

Стесняюсь спросить, зачем получать заново то, что уже получено ранее? Тем более делать это в шаблоне.

Есть же пример виджета /templates/modern/controllers/users/widgets/avatar/avatar.tpl.php

измените начало кода на

Panda58dev

Работать не будет.

  1. <?php echo html_avatar_image($user->avatar, 'micro', $user->nickname); ?>

Где $user — объект класса cmsUser, который уже передаётся в виджет, если речь про виджет «Аватар». Если свой кастомный виджет, то в начале добавить

  1. $user = cmsUser::getInstance();

И всё.

  1. <a href="<?php echo href_to_profile($user); ?>">
  2. <?php echo html_avatar_image($user->avatar, 'micro', $user->nickname); ?>
  3. </a>
#4 24 декабря 2021 в 13:03

Код с аватаром — у Вас прописана статичная картинка из дефолта, что бы картинка вставлялась динамически измените начало кода на:

  1. <?php if(cmsUser::isLogged()) {
  2. $userID = cmsUser::get('id');
  3. $users_model = cmsCore::getModel('users');
  4. $user = $users_model->getUser($userID);
  5. $user_ava = cmsModel::yamlToArray($user["avatar"]);
  6. ?>
  7. <div class="widget_user_avatar">
  8. <div class="user_info">
  9. <div class="avatar"><a href="<?php $url = href_to_profile($user); ?>"><img class="img-fluid"; src="<?php echo $user_ava["small"]; ?>" alt="Антон"; title="Антон"/></a></div>
Panda58dev

Изменил код, не получилось. Если не загружен аватар, дефолтный аватар не загружается...  и дважды пишет никнейм. А если убрать alt=«Антон» title=«Антон», то меню перестает быть кликабельным и вместо аватара потерянное изображение...

#5 24 декабря 2021 в 14:51

 Fuze, ещё бы знать про методы, которые в CMS есть 😅

#6 24 декабря 2021 в 14:55

ещё бы знать про методы, которые в CMS есть

Panda58dev

Открываете файлы и читаете как книгу :) Большинство методов прокомментированы. Обзор архитектуры и часть описания для разработчиков есть в документации.

#7 24 декабря 2021 в 16:23

Стесняюсь спросить, зачем получать заново то, что уже получено ранее? Тем более делать это в шаблоне.

Есть же пример виджета /templates/modern/controllers/users/widgets/avatar/avatar.tpl.php

измените начало кода на

Panda58dev

Работать не будет.

  1. <?php echo html_avatar_image($user->avatar, 'micro', $user->nickname); ?>

Где $user — объект класса cmsUser, который уже передаётся в виджет, если речь про виджет «Аватар». Если свой кастомный виджет, то в начале добавить

  1. $user = cmsUser::getInstance();

И всё.

  1. <a href="<?php echo href_to_profile($user); ?>">
  2. <?php echo html_avatar_image($user->avatar, 'micro', $user->nickname); ?>
  3. </a>
Fuze

Забыл сказать у меня дефолтный шаблон… Код  $user = cmsUser::getInstance(); стоял с самого начала.  Поменял ссылки все равно аватра не выводится. Явно что-то лишнее в коде или отсутствует нужное...
Итоговый код виджета:

<?php if(cmsUser::isLogged()) {
    $user = cmsUser::getInstance();
    $userID = cmsUser::get('id');
    $users_model = cmsCore::getModel('users');                        
    $user = $users_model->getUser($userID); 
    $user_ava = cmsModel::yamlToArray($user[«avatar»]); ?>
    <div class=«widget_user_avatar»>
    <div class=«user_info»>
    <div class=«avatar»><a href="<?php echo href_to_profile($user); ?>"> <img class=«img-fluid» src="<?php echo html_avatar_image($user->avatar, 'micro', $user->nickname); ?>" /></a></div>

    <div class=«name»><a href="<?php echo href_to('users', $user['id']); ?>"><?php html($user->nickname); ?></a></div></div>
    <ul class=«menu»>
    <li class=«home»><a title=«Моя страница» class=«item» href="<?php echo href_to('users', $user['id']); ?>" target="_self" ><span class=«wrap»>Моя страница</span></a></li>
    <li class=«editor»><a title=«Редактировать» class=«item» href="<?php echo href_to('users', $user['id']); ?>/edit" target="_self" ><span class=«wrap»>Редактировать</span></a></li>
    <li><div class=«lineguests»></div></li>
    <li class=«abuse»><a title=«Пожаловаться» class=«item» href="/abuse" target="_self" ><span class=«wrap»>Пожаловаться</span></a></li>
    <li class=«help»><a title=«Помощь» class=«item» href="<?php echo href_to('users', $user['id']); ?>/questions" target="_self" ><span class=«wrap»>Помощь</span></a></li>
    <li><div class=«lineguests»></div></li>
    <li class=«folder adminpanel»><a title=«Управление» class=«item» href="/dev" target="_self" ><span class=«wrap»>Управление</span></a><ul>
    <li class=«adminpanel»><a title=«Контент» class=«item» href="/dev/content" target="_self" ><span class=«wrap»>Контент</span></a></li>
    <li class=«adminpanel»><a title=«Типы контента» class=«item» href="/dev/ctypes" target="_self" ><span class=«wrap»>Типы контента</span></a></li>
    <li class=«adminpanel»><a title=«Меню» class=«item» href="/dev/menu" target="_self" ><span class=«wrap»>Меню</span></a></li>
    <li class=«adminpanel»><a title=«Виджеты и страницы» class=«item» href="/dev/widgets" target="_self" ><span class=«wrap»>Виджеты и страницы</span></a></li>
    <li class=«adminpanel»><a title=«Компоненты» class=«item» href="/dev/controllers" target="_self" ><span class=«wrap»>Компоненты</span></a></li>
    <li class=«adminpanel»><a title=«Каталог дополнений» class=«item» href="/dev/addons_list" target="_self" ><span class=«wrap»>Каталог дополнений</span></a></li>
    <li class=«adminpanel»><a title=«Пользователи» class=«item» href="/dev/users" target="_self" ><span class=«wrap»>Пользователи</span></a></li>
    <li class=«adminpanel»><a title=«Настройки» class=«item» href="/dev/settings" target="_self" ><span class=«wrap»>Настройки</span></a>
    </li>
    </ul>
        </li>
    <li><div class=«lineguests»></div></li>
    <li class=«loginout»><a title=«Выйти» class=«item» href="/auth/logout" target="_self" ><span class=«wrap»>Выйти</span></a></li>
    </ul>    
</div>
<?php } ?>

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

Я сделал два меню, одно для гостей, второе для пользователей. Меню для гостей работает нормально, там выводится дефолтный аватар.

А вот для пользователя не получается довести до ума!  Вот как-то так!

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.