Новости Joomla

Как тестировать Joomla PHP-разработчику? Компонент Patch tester.

👩‍💻 Как тестировать Joomla PHP-разработчику? Компонент Patch tester.Joomla - open source PHP-фреймворк с готовой админкой. Его основная разработка ведётся на GitHub. Для того, чтобы международному сообществу разработчиков было удобнее тестировать Pull Requests был создан компонент Patch Tester, который позволяет "накатить" на текущую установку Joomla именно те изменения, которые необходимо протестировать. На стороне инфраструктуры Joomla для каждого PR собираются готовые пакеты, в которых находится ядро + предложенные изменения. В каждом PR обычно находятся инструкции по тестированию: куда зайти, что нажать, ожидаемый результат. Тестировщики могут предположить дополнительные сценарии, исходя из своего опыта и найти баги, о которых сообщить разработчику. Или не найти, и тогда улучшение или исправление ошибки быстрее войдёт в ядро Joomla. Напомню, что для того, чтобы PR вошёл в ядро Joomla нужны минимум 2 положительных теста от 2 участников сообщества, кроме автора. Видео на YouTubeВидео на VK ВидеоВидео на RuTubeКомпонент на GitHub https://github.com/joomla-extensions/patchtester@joomlafeed#joomla #php #webdev #community

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

AlekVolsk

  • Гуру
  • 6913
  • 416 / 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
  • 416 / 4
В /components/com_users/models/forms они описаны (что именно выводить), а вот вывод формирование HTML на фронт?
*

Aleks.Denezh

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

b2z

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

AlekVolsk

  • Гуру
  • 6913
  • 416 / 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
  • 416 / 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

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

AlekVolsk

  • Гуру
  • 6913
  • 416 / 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

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

AlekVolsk

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

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 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
  • 416 / 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

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

b2z

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

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

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

Автор usersyslog

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

Автор eugenes

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

Автор amino_2012

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

Автор Ghash

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

Автор kik84

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