Вывод полей пользователя в шаблоне записи ТК

ЕСТЬ РЕШЕНИЕ InstantCMS 2.X
#1 8 января 2025 в 15:46

Всем привет!

В шаблоне записи ТК вывожу поле пользователя таким методом (чтобы не править ядро):

  1. <?php
  2. $user_fields = cmsCore::getModel('users')->getUser($item['user_id']); // Создаю переменную $user_fields
  3. ?>
  4.  
  5. <?php
  6. echo ($user_fields['vk']); // Получаю данные поля пользователя в записи ТК
  7. ?>

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

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

Изображение

Подскажите как правильно можно вывести это поле пользователя в записи ТК,  со всеми настройками, чтобы оно выводилось как в профиле пользователя.

Изображение
Добавлено спустя 4 часа

Короче так по топорному вывел, не знаю насколько это правильно или нет 😄

  1. <a rel="noopener nofollow" target="_blank" href="/redirect?url=<?php html($user_fields['vk']);?>">VK</a>
#2 8 января 2025 в 16:48

$user = cmsUser::getInstance();

$user['ячейка_из_бд'];

Не? Не то? 😉

#3 8 января 2025 в 17:36

ели так как вы написали, то выдает Fatal error: Uncaught Error: Cannot use object of type cmsUser as array

#4 8 января 2025 в 17:39

Не? Не то?

Pro AV

я думаю, Vasa хочет использовать код типа

  1. <?php
  2. $user = cmsCore::getModel('users')->getUser($item['user_id']);
  3. $fields = cmsCore::getModel('content')->setTablePrefix('')->getContentFields('cms_users');
  4. echo $fields['city']['handler']->setItem($user)->parse($user['city']);
  5. ?>

но делать подобное в шаблоне это путь в никуда. 

Правильнее будет поступить так:

1. Создать отдельный компонент
2. Зарегистрировать его в базе, чтобы его в любой момент можно было отключить
3. Добавить в него хук content_before_item
там уже есть данные об $ctype, $item, $fields github.com/instantsoft/icms2/blob/94d87caca51f4b5539533cd49e41def4482f8f0b/system/controllers/content/actions/item_view.php#L361
4. Поправить $user с помощью кода, который я написал выше
5. В шаблоне проверить, есть ли эти данные, и если есть, вывести...

Такой компонент будет работать годами и не мешать. Его всегда можно отключить, если в коде что-то устареет, пока не поправите.
Правки в шаблоне можно будет легко перенести выше, ниже и т.п. В них будет только верстка и один if 

#5 9 января 2025 в 10:21

Zau4man как всегда прав. Я полагал, что создание компонента и хука понятно по умолчанию. Заметил. что люди пишущие код, когда начинают знакомится с InstantCMS изобретают собственные методы, основываясь на файлах из папки core. Позже приходит понимание, что практически все методы необходимые для  работы уже созданы в системе. Так что это не просто cms, а  полноценная среда разработки, это заложено изначально. Думаю именно это и притягивает к Инстант, раз начав пользоваться невозможно бросить )) т.к. с минимальными затратами времени можно решить любую поставленную задачу.

#6 9 января 2025 в 23:00

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

Pro AV

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

  1. header('Content-Type: application/json; charset=utf-8');
  2. $this->halt(json_encode($out));

Чем прочитать и разобрать class cmsResponse. Создать экземпляр, запихнуть, куда надо, и отправить. А для этого нужно уметь читать код другого человека. И даже больше — понимать его замысел.(Вы тут много таких видели?)  Так что, это очень спорная тема.

#7 9 января 2025 в 23:11
Чем прочитать и разобрать class cmsResponse. Создать экземпляр, запихнуть, куда надо, и отправить. А для этого нужно уметь читать код другого человека. И даже больше — понимать его замысел.(Вы тут много таких видели?)  Так что, это очень спорная тема.
IamB

Спорить не буду 😉 у каждого свой подход. Код у вас хороший получается — знаю 👨‍🎓

: помню по временам кода ещё деревянный вертолётик был

#8 9 января 2025 в 23:35

помню по временам кода ещё деревянный вертолётик был

Pro AV

Ух ты! Благодарю!

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