[Решено] Где хранятся формы вывода J по умолчанию и как их можно переопределить?

  • 14 Ответов
  • 7619 Просмотров

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

*

AlekVolsk

\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, 16:18:50 от b2z »

*

motokraft

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

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

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

*

AlekVolsk

В /components/com_users/models/forms они описаны (что именно выводить), а вот вывод формирование HTML на фронт?

*

Aleks.Denezh

В /components/com_users/models/forms они описаны (что именно выводить), а вот вывод формирование HTML на фронт?
Положить файл в components/com_users/models/fields унаследоваться от любого поля из \libraries\joomla\form\fields\
и юзать это поле!
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016

*

b2z

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

*

AlekVolsk

Решил так:
Код: 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

Код: 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, 03:38:12 от AlekVolsk »


*

AlekVolsk

Там 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

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

*

AlekVolsk

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

*

Aleks.Denezh

А почему не просто во втором цикле:\
Код: php
<?php foreach ( $fields as $field ) : // Iterate through the fields in the set and display them.?>
<?php $field->class='form-control'; ?>
...
<?php endforeach; ?>
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016

*

AlekVolsk

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

Istaan, работает, и как сам не догадался )))
Что бы догадываться стоит банально читать код ) Идете например сюда: libraries/joomla/form/field.php и смотрите какие у есть методы )
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016

*

b2z

  • *****
  • 7449
  • [+]740 / [-]0
  • Разраблю понемногу