0 Пользователей и 1 Гость просматривают эту тему.
  • 5 Ответов
  • 705 Просмотров
*

sesil

  • Захожу иногда
  • 82
  • 0 / 0
  • Учусь!
Здравствуйте, в редактировании профиля, есть дополнительные поля, в них через админку можно добавить классы, как добавить классы к уже имеющимся input формам таким как name, email, password? сразу говорю, CSS решения не предлагать, нужно добавить класс к полю.
« Последнее редактирование: 21.08.2019, 12:47:51 от sesil »
*

sivers

  • Живу я здесь
  • 2464
  • 335 / 0
Вариант 1:
дописать классы в XML соответствующей формы тут /components/com_users/models/forms/

Вариант 2:
плагин, событие подготовки формы

Вариант 3:
В макете редактирования профиля edit.php
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

sesil

  • Захожу иногда
  • 82
  • 0 / 0
  • Учусь!
Вариант 1:
дописать классы в XML соответствующей формы тут /components/com_users/models/forms/

Вариант 2:
плагин, событие подготовки формы

Вариант 3:
В макете редактирования профиля edit.php

В 1 вариант если добавить класс через XML в файле profile все ровно class не появляется в input jform_username. 2 способом не понятно что именно нужно сделать? можно пример? И третим способом тоже не получилось сделать.
*

sivers

  • Живу я здесь
  • 2464
  • 335 / 0
В 1 вариант если добавить класс через XML в файле profile все ровно class не появляется в input jform_username. 2 способом не понятно что именно нужно сделать? можно пример? И третим способом тоже не получилось сделать.

1. Попробуйте другие XML из той директории и убедитесь, что макет вывода формы не переопределен (иначе сразу в п.3). Проверил - способ рабочий.
2. Делаете плагин группы Content, в нем добавляете обработчик вот такого вида:
Код
    public function onContentPrepareForm($form, $data) {
        if (!($form instanceof JForm)) {
            $this->_subject->setError('JERROR_NOT_A_FORM');
            return false;
        }

        // Получаем название формы (текущего компонента)
        $name = $form->getName();
       
        switch($name){
            case 'com_users.login':
                $form->setFieldAttribute('username', 'class', 'myClassLogin');
            break;
            case 'com_users.profile':
                $form->setFieldAttribute('password', 'class', 'myClassPass');
            break;
        }

        return true;
    }
Здесь добавляется (замещается) класс для поля логина в форме логина и класс поля ввода пароля в форме профиля. Пример рабочий - проверил.
3. Третим способом проще. Сперва надо точно вычислить макет, который подключается. Потом скопировать его в свой шаблон и внести изменения там.

Если у вас нет эффекта после изменений, то скорее всего в вашем шаблоне уже переопределен этот макет. Поищите здесь: /templates/название_вашего_шаблона/html/com_users/profile
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

sesil

  • Захожу иногда
  • 82
  • 0 / 0
  • Учусь!
public function onContentPrepareForm($form, $data) {
        if (!($form instanceof JForm)) {
            $this->_subject->setError('JERROR_NOT_A_FORM');
            return false;
        }

        // Получаем название формы (текущего компонента)
        $name = $form->getName();
       
        switch($name){
            case 'com_users.login':
                $form->setFieldAttribute('username', 'class', 'myClassLogin');
            break;
            case 'com_users.profile':
                $form->setFieldAttribute('password', 'class', 'myClassPass');
            break;
        }

        return true;
    }

Сделал все как Вы сказали, распечатал $form

Код
 object(SimpleXMLElement)#578 (1) {
            ["@attributes"]=>
            array(8) {
              ["name"]=>
              string(8) "username"
              ["type"]=>
              string(4) "text"
              ["label"]=>
              string(32) "COM_USERS_PROFILE_USERNAME_LABEL"
              ["description"]=>
              string(26) "COM_USERS_DESIRED_USERNAME"
              ["filter"]=>
              string(8) "username"
              ["required"]=>
              string(4) "true"
              ["class"]=>
              string(18) " base-form__input "
              ["size"]=>
              string(2) "30"
            }
          }

По идее должен присваиваться class но он пустой.

Вот так выглядит HTML

Код
<input type="text" name="jform[username]" id="jform_username" value="Моё имя!" size="30" readonly="readonly">
*

sivers

  • Живу я здесь
  • 2464
  • 335 / 0
По идее должен присваиваться class но он пустой.
В моем коде поменяйте имя поля с password на username. Ведь там пример был. Или посмотртите появился ли класс в поле ввода пароля.

В дампе формы должно быть его видно. Если в дампе есть, а в самой форме (на фронте) класса нет, значит переопределен макет у вас.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как изменить lang=&quot;ru-ru&quot;?

Автор Maffo

Ответов: 0
Просмотров: 410
Последний ответ 07.04.2023, 16:07:22
от Maffo
Заменить текст - просмотров - на иконку (или свой текст)

Автор all_zer

Ответов: 2
Просмотров: 314
Последний ответ 28.03.2023, 13:32:35
от all_zer
Как изменить лимит размера файла при загрузке обновлений?

Автор Besa

Ответов: 3
Просмотров: 434
Последний ответ 15.12.2022, 11:23:09
от Besa
Обнаружена ошибка. Class 'JFormFieldPredefinedList' not found

Автор sevent45

Ответов: 14
Просмотров: 2944
Последний ответ 14.12.2022, 18:34:07
от peklor
Блок особенностей, как добавить в поле с информацией кнопку или ссылку Подробнее

Автор Alex from SPb

Ответов: 5
Просмотров: 331
Последний ответ 28.11.2022, 19:54:42
от marksetter