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

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
\components\com_users\views\remind\tmpl\default.php: (восстановление логина)
Код: php
		<fieldset>
<?php foreach ($this->form->getFieldset($fieldset->name) as $name => $field) : ?>
<div class="control-group">
<div class="control-label">
<?php echo $field->label; ?> // ?
</div>
<div class="controls">
<?php echo $field->input; ?> // ?
</div>
</div>
<?php endforeach; ?>
</fieldset>

Откуда берутся выводы $field ?

Предполагаю, что отсюда: \libraries\joomla\form\fields\, но это только поля, а лейблы?
И как это можно переопределить? Необходимо добавить свой класс полям.

И где вообще описаны списки полей для com_users?

Можно подробное FAQ от спецов по api?
« Последнее редактирование: 30.07.2014, 14:18:50 от b2z »
*

motokraft

  • Завсегдатай
  • 1326
  • 72 / 13
Откуда берутся выводы $field ?

Предполагаю, что отсюда: \libraries\joomla\form\fields\, но это только поля, а лейблы?

нет, они находятся в XML файлах... /components/com_users/models/forms
...
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
В /components/com_users/models/forms они описаны (что именно выводить), а вот вывод формирование HTML на фронт?
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
В /components/com_users/models/forms они описаны (что именно выводить), а вот вывод формирование HTML на фронт?
Положить файл в components/com_users/models/fields унаследоваться от любого поля из \libraries\joomla\form\fields\
и юзать это поле!
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
Есть такой вариант по добавлению классов - в цикле подменять класс:
Код: php
<?php $this->form->setFieldAttribute(str_replace('jform_', ' ', $field->id), 'class', 'customClass'); ?>
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Решил так:
Код: php
<?php defined('_JEXEC') or die;
/**
 * @package     Joomla.Site
 * @subpackage  com_users
 *
 * @copyright   Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 *
 * Adapted Bootstrap 3
 */

echo '<div class="reset '.$this->pageclass_sfx.'">';

if ($this->params->get('show_page_heading'))
  echo '<div class="page-header"><h1>'.$this->escape($this->params->get('page_heading')).'</h1></div>';

echo '<form id="user-registration" action="'.JRoute::_('index.php?option=com_users&task=reset.request').'" method="post" class="form-validate form-horizontal">';

foreach ($this->form->getFieldsets() as $fieldset) {
  echo '<p>'.JText::_($fieldset->label).'</p>';

  echo '<fieldset>';

  $fa = $this->form->getFieldAttribute('email', 'class'); // читаем текущий класс поля
  $this->form->setFieldAttribute('email', 'class', 'form-control '.$fa); // добавляем свой к текущему
  $this->form->setFieldAttribute('email', 'hint', JText::_('COM_USERS_FIELD_REMIND_EMAIL_LABEL')); // добавляем placeholder (специально для Taatshi =) )

  foreach ($this->form->getFieldset($fieldset->name) as $name => $field) {
    if ($field->label != '') { // чтобы не выводить пустую капчу, если она не используется
      echo '<div class="form-group"><div class="input-group">';
      if ($field->name == 'jform[email]') echo '<span class="input-group-addon"><i class="fa fa-envelope"></i></span>'; // вместо лейбла - иконка font awesome
      echo $field->input;
      echo '</div></div>';
    }
  }
  echo '<div class="form-group"><button type="submit" class="btn btn-warning validate">'.JText::_('JSUBMIT').'</button></div>'; // submit
  echo '</fieldset>';
}

echo JHtml::_('form.token');

echo '</form></div>';

Далее чуточку правка ксс и результат во вложении.

Если уверены, что поле на странице всегда будет только одно, то вместо
Код: php
echo '<div class="form-group"><button type="submit" class="btn btn-warning validate">'.JText::_('JSUBMIT').'</button></div>'; // submit
сразу после echo $field->input; добавьте:
Код: php
echo '<span class="input-group-btn"><button type="submit" class="btn btn-warning validate">'.JText::_('JSUBMIT').'</button></span>';
(на btn-warning не настаиваю - частный случай)

Решено.
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Код: php
  $fa = $this->form->getFieldAttribute('email', 'class');
  $this->form->setFieldAttribute('email', 'class', 'form-control '.$fa);
  $this->form->setFieldAttribute('email', 'hint', JText::_('COM_USERS_FIELD_REMIND_EMAIL_LABEL'));

Когда полей много (регистрация, просмотр профиля), то перечислять все - упиписаешся.
Как это можно в цикл загнать внутри
Код: php
foreach ($this->form->getFieldsets() as $fieldset) {

}
? Чтобы в цикле при этом получить имя поля (которое 'email')?
« Последнее редактирование: 30.07.2014, 01:38:12 от AlekVolsk »
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Там 2 цикла:
Код: php
foreach ($this->form->getFieldsets() as $fieldset) {
  // здесь $field->name выводит 'default'
  // а надо в цикле получить имя каждого поля из xml: email, capcha и т.д.
  // чтение и установка атрибутов работает только здесь
  foreach ($this->form->getFieldset($fieldset->name) as $name => $field) {
    // здесь $field->name выводит имя поля. выводимое во фронт: 'jform[email]'
    // здесь не работает чтение и установка атрибутов
  }
}
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
Код: php
  foreach ($this->form->getFieldset($fieldset->name) as $name => $field) {
    // здесь $field->name выводит имя поля. выводимое во фронт: 'jform[email]'
    // здесь не работает чтение и установка атрибутов
  }
Почему это не работает? Все должно работать. Как вы проверяли?
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Д просто прописываю
Код: php
  $fa = $this->form->getFieldAttribute('email', 'class');
  $this->form->setFieldAttribute('email', 'class', 'form-control '.$fa);
внутри второго цикла, а эффекта ноль, form-control к имеющемуся классу не добавляется
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
А почему не просто во втором цикле:\
Код: php
<?php foreach ( $fields as $field ) : // Iterate through the fields in the set and display them.?>
<?php $field->class='form-control'; ?>
...
<?php endforeach; ?>
*

AlekVolsk

  • Гуру
  • 6913
  • 415 / 4
Istaan, работает, и как сам не догадался )))
Работает даже $field->hint = JText::_('COM_USERS_FIELD_REMIND_EMAIL_LABEL');

Окончательный вариант:
Код: php
foreach ($this->form->getFieldsets() as $fieldset) {
  echo '<p>'.JText::_($fieldset->label).'</p>';
  echo '<fieldset>';

  foreach ($this->form->getFieldset($fieldset->name) as $name => $field) {
    $field->class = 'form-control'; // добавляем нужный класс, имеющийся в XML при этом сохраняется
    $field->hint = strip_tags($field->label); // берем placeholder из лейбла, чтобы не тянуть языковую константу (все равно тот же текст)
    if ($field->label != '') {
      echo '<div class="form-group"><div class="input-group">';
      if ($field->name == 'jform[email]') echo '<span class="input-group-addon"><i class="fa fa-envelope"></i></span>';
      echo $field->input;
      echo '</div></div>';
    }
  }

  echo '</fieldset>';
}

Теперь точно решено.
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Istaan, работает, и как сам не догадался )))
Что бы догадываться стоит банально читать код ) Идете например сюда: libraries/joomla/form/field.php и смотрите какие у есть методы )
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
Да уже, непочатый класс для документации... Только где найти на это время?  ^-^

P.S.
Тему в FAQ, чтобы не потерялась.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

[Решено] Зависает установка Joomla на создании таблиц (на 4 шаге)

Автор usersyslog

Ответов: 16
Просмотров: 61190
Последний ответ 30.06.2021, 15:44:51
от AlexFans
[Решено] Создание модуля. Генерировать CSS для каждой копии модуля

Автор eugenes

Ответов: 10
Просмотров: 20705
Последний ответ 13.02.2019, 12:48:40
от passer
[Решено] Отключить двухэтапную авторизацию через MySQL

Автор amino_2012

Ответов: 3
Просмотров: 19829
Последний ответ 07.10.2015, 09:55:58
от amino_2012
[Решено] Как создать сборку на базе Joomla 3.3 ?

Автор Ghash

Ответов: 14
Просмотров: 24137
Последний ответ 17.12.2014, 10:00:13
от b2z
[Решено] Вывод вступительного изображения в модуле Материалы - Новости

Автор kik84

Ответов: 5
Просмотров: 23246
Последний ответ 09.11.2014, 22:23:17
от kik84