У меня есть функция displayName в php, которая возвращает такую строку:
"${name} <i class=\"fa fa-check-circle\" style=\"font-size:22px;color:green\"/>"
public function getDisplayName()
{
/** @var Module $module */
$module = Yii::$app->getModule('user');
if ($module->displayNameCallback !== null) {
return call_user_func($module->displayNameCallback, $this);
}
$name = '';
$format = Yii::$app->settings->get('displayNameFormat');
if ($this->profile !== null && $format == '{profile.firstname} {profile.lastname}') {
$name = $this->profile->firstname . ' ' . $this->profile->lastname;
if (($this->profile->user_id == 1)){
$check_mark = '<i class = "fa fa-check-circle" style = "font-size:22px;color:green"/>';
}
else{
$check_mark = '';
}
}
// Return always username as fallback
if ($name == '' || $name == ' ') {
return $this->username;
}
return $name . ' '. $check_mark;
}
Я вызываю эту функцию в своем компоненте следующим образом:
public function run() {
return $this->render('containerProfileHeader', [ 'title' => $this->title, ]);
}
<h1 class = "<?= $classPrefix ?>"><?= Html::encode($title) ?></h1>
public function init() {
parent::init();
$this->title = $this->container->getDisplayName();
}
Ожидалось, что строка, возвращаемая getDisplayName(), будет отображаться в html как есть, но вместо этого я получил это:
@DiegoD Я хочу показать вывод HTML-кода. HTML-код виден после имени, я хочу показать вывод HTML-кода. Например, теперь я получил вывод John <i class = "fa fa-check-circle" style = "font-size:22px;color:green"/>
@DiegoD Результат, который я получил: [Снимок экрана] [1] [1]: i.stack.imgur.com/JComL.png
хорошо, наконец, это ясно. Проблема в том, что ваша система шаблонов экранирует строку. Где вы вызываете свою функцию getDisplayName()? есть ключ к тому, как сказать, что строка повторяется как необработанная без экранирования
Публичная функция @DiegoD run() { return $this->render('containerProfileHeader', [ 'title' => $this->title, ]); } <h1 class = "<?= $classPrefix ?>"><?= Html::encode($title) ?></h1>
Публичная функция @DiegoD init() { parent::init(); $this->title = $this->container->getDisplayName(); }
@DiegoD И HTML-код в проверке: <a href = "#" data-contentcontainer-id = "1" data-guid = "1a261c8c-8b41-4932-ae24-d10f1fe6fded">Noman Maken<i class = "fa fa -check-circle" style = "font-size:22px;color:green"/></a>
Я думаю, проблема в том, что вы используете Html::encode($title). Я не знаком с yii (выглядит так), но можете ли вы попытаться повторить строку, избегая обработки, выполняемой HTML::encode? это возможно?
@DiegoD получил это из исходного кода <h1>Noman Maken <i class="fa fa-check-circle" style="font-size:22px;color:green"/></h1>, я думаю, что если я смогу заменить < на < и другое из javascript, тогда это может сработать, я пробовал это, но не работает.






Вы должны попробовать функции echo() в функции возврата. Надеюсь, это сработает.
Это должен быть комментарий. Также функция никогда не должна нести ответственность за вывод содержимого.
Проблема решена с
<?= Yii::$app->formatter->asHtml($title); ?>
Использовал
Yii::$app->formatter->asHtml вместо Html::encode
Вопрос не ясен. Тем временем я лучше сделаю отступ в вашем коде. В любом случае, кажется, что у вас есть функция, возвращающая
Name <i [...]/>, но вы хотите, чтобы она возвращалась<i [...]/> Name?