Форум русской поддержки Joomla!® CMS
21.02.2017, 14:28:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

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

 (Прочитано 6258 раз)
0 Пользователей и 1 Гость смотрят эту тему.
AlekVolsk
Профи
********

Репутация: +324/-3
Offline Offline

Пол: Мужской
Сообщений: 6613



« : 28.07.2014, 22:15:07 »

\components\com_users\views\remind\tmpl\default.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
Живу я здесь
******

Репутация: +72/-13
Offline Offline

Сообщений: 1436


« Ответ #1 : 29.07.2014, 03:09:33 »

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

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

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

Репутация: +324/-3
Offline Offline

Пол: Мужской
Сообщений: 6613



« Ответ #2 : 29.07.2014, 07:33:22 »

В /components/com_users/models/forms они описаны (что именно выводить), а вот вывод формирование HTML на фронт?
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2773



« Ответ #3 : 29.07.2014, 08:25:43 »

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

Репутация: +720/-0
Offline Offline

Пол: Мужской
Сообщений: 7606


Разраблю понемногу


« Ответ #4 : 29.07.2014, 16:41:46 »

Есть такой вариант по добавлению классов - в цикле подменять класс:
Код
<?php $this->form->setFieldAttribute(str_replace('jform_', ' ', $field->id), 'class', 'customClass'); ?>
Записан
AlekVolsk
Профи
********

Репутация: +324/-3
Offline Offline

Пол: Мужской
Сообщений: 6613



« Ответ #5 : 29.07.2014, 23:17:47 »

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

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

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

Решено.


* Безымянный.jpg (34.66 Кб, 1217x243 - просмотрено 967 раз.)
Записан
AlekVolsk
Профи
********

Репутация: +324/-3
Offline Offline

Пол: Мужской
Сообщений: 6613



« Ответ #6 : 30.07.2014, 01:29:36 »

Код
  $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'));

Когда полей много (регистрация, просмотр профиля), то перечислять все - упиписаешся.
Как это можно в цикл загнать внутри
Код
foreach ($this->form->getFieldsets() as $fieldset) {
 
}
? Чтобы в цикле при этом получить имя поля (которое 'email')?
« Последнее редактирование: 30.07.2014, 01:38:12 от AlekVolsk » Записан
b2z
Support Team
*****

Репутация: +720/-0
Offline Offline

Пол: Мужской
Сообщений: 7606


Разраблю понемногу


« Ответ #7 : 30.07.2014, 09:58:29 »

Ну так Вы же сами выше получали - $field->name
Записан
AlekVolsk
Профи
********

Репутация: +324/-3
Offline Offline

Пол: Мужской
Сообщений: 6613



« Ответ #8 : 30.07.2014, 10:32:57 »

Там 2 цикла:
Код
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
Support Team
*****

Репутация: +720/-0
Offline Offline

Пол: Мужской
Сообщений: 7606


Разраблю понемногу


« Ответ #9 : 30.07.2014, 10:59:04 »

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

Репутация: +324/-3
Offline Offline

Пол: Мужской
Сообщений: 6613



« Ответ #10 : 30.07.2014, 11:42:26 »

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

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2773



« Ответ #11 : 30.07.2014, 12:20:05 »

А почему не просто во втором цикле:\
Код
<?php foreach ( $fields as $field ) : // Iterate through the fields in the set and display them.?>
<?php $field->class='form-control'; ?>
...
<?php endforeach; ?>
Записан
AlekVolsk
Профи
********

Репутация: +324/-3
Offline Offline

Пол: Мужской
Сообщений: 6613



« Ответ #12 : 30.07.2014, 13:27:22 »

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

Окончательный вариант:
Код
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
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2773



« Ответ #13 : 30.07.2014, 13:30:51 »

Istaan, работает, и как сам не догадался )))
Что бы догадываться стоит банально читать код ) Идете например сюда: libraries/joomla/form/field.php и смотрите какие у есть методы )
Записан
b2z
Support Team
*****

Репутация: +720/-0
Offline Offline

Пол: Мужской
Сообщений: 7606


Разраблю понемногу


« Ответ #14 : 30.07.2014, 14:18:05 »

Да уже, непочатый класс для документации... Только где найти на это время?  Smiley

P.S.
Тему в FAQ, чтобы не потерялась.
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet