Это старая версия документа!


Инвентаризация: DEV: Forms

Поскольку у нас шаблон ввода в форме не стандартный, а
{Label} с иконкой и {hint} завернутым в tooltip, {input}, {error}

Переделываем (наследуем) Activefield (от \yii\bootstrap5\ActiveField) следующим образом

  • методы label и hint не заполняют $this→parts['{label}'] и $this→parts['{hint}'] отрендеренным HTML, а сохраняют текстовую часть в labelText и hintText атрибутах
  • в методе render мы уже формируем $this→parts['{label}'] на основании labelText и hintText. $this→parts['{hint}'] остается пустой
    • на самом деле в \yii\bootstrap5\ActiveField есть метод renderLabel и делаем всю магию там
  • $this→parts['{hint}'] можно заполнить методом classicHint, тогда можно отобразить и классическую подсказку после Input

Была следующая проблема: если у формы явно не задан ID, то он (т.к. форма наследуется от виджета) формируется как префикс (w) + индекс (0), поэтому по умолчанию у формы ID = w0.
И если на страницу, в которой уже есть форма, через Popup + Ajax подгрузить еще одну форму, то она соответственно тоже будет w0, т.к. она была первой на подгруженной странице. И тут возникает проблема с инициализацией JavaScript, т.к. к форме прилагается скрипт инициализации, и если формы называются одинаково, то возникает коллизия.

пример скрипта инициализации

во избежание подобных коллизий мы делаем в init по умолчанию id вида className-id-form

  • инвентаризация/dev/forms.1746118286.txt.gz
  • Последнее изменение: 2025/05/01 16:51
  • admin