Новости 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

Вышел релиз Revo PageBuilder Toolkit for YOOtheme Pro 1.6

Вышел релиз Revo PageBuilder Toolkit for YOOtheme Pro 1.6.2PageBuilder Toolkit - это специализированный плагин для конструктора страниц Yootheme Pro, содержит набор различных утилит для ускорения процесса работы и отладки макета, множественные улучшения в интерфейсе, включая поддержку dark mode, подсказки, быстрая смена разрешения в окне просмотра и много чего еще.v.1.6.2 Что нового?- Индикатор статусов: теперь не просто показывает состояние запросов, но и делает автоматические попытки их отправки при кратковременных сбоях в сети, а если это не помогло, то переводит конструктор в ручной режим, что позволяет сохранит макет и настройки темы прежде чем вы потеряете все, что было сделано с момента последнего сохранения- Подсветка ошибок в макете: плагин анализирует код страницы и может автоматически подсвечивать data атрибуты с кучей мусора, которые попадают в код страницы при копипасте из Figma в TinyMCE (пригодится для старых макетов, в текущей работе плагин сам очищает код мусора). Также есть подсветка семантических ошибок сборки - дубли h1 тега на странице и вложенных друг в друга заголовков.- Улучшена поддержка будущего релиза Yootheme Pro 5 и редактора CodeMirror 6Плагин для русскоязычных пользователей доступен в каталоге расширений SovMart и распространяется за символическую плату (100р). Разработчики Joomla расширений и партнеры автора могут получить плагин бесплатно.Для работы плагина необходим конструктор страниц Yootheme Pro.Разработчик плагина - участник нашего сообщества Александр Судьбинов (@alexrevo), член официальной группы поддержки Yootheme Pro. Страница расширенияОписание на сайте автора@joomlafeed#joomla #yootheme

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

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Или если таблицы связанные то в модели второго представления напишите метод с запросом из двух связанных таблиц (join) и вызовите его в преставлении.
Написать запрос - не проблема, проблема передать в него значение параметра из первого представления.
*

passer

  • Завсегдатай
  • 1013
  • 75 / 3
Так выбор не велик или через $_GET или через $_POST. Ничего другого придумывать не требуется. В ссылку в первом представлении которая открывает второе, пишете свой параметр и все. В модели ловите.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
В общем, к тому же мнению пришел, терзают сомнения только насчет корректности использования: компоненту ли самой J при наличии незнакомых параметров мозг не снесет?
И как правильно парсить URL? Встроенные в J механизмы имеются, или вновь изобретать велосипед?
*

passer

  • Завсегдатай
  • 1013
  • 75 / 3
$login = JFactory::getApplication()->input->getString('cl_login');
а это чем не устраивает?
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Не то, это из админки, уже решено.
Сейчас решаю задачу во фронте.
Юзер залогинился, в личном кабинете посмотрел договора, заключенные с конторой - это одно представление; по каждому из договоров надо ему показать пакет документов по договору - это другое представление. Из одного представления (или связанной с ним модели) в другое надо передать номер договора, документы по которому юзер желает посмотреть.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
передавай post или get
Буду изучать, спс.
Сразу - уже - по традиции: примерчиком для чайников в чайника кините?
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
get к ссылке добавляешь http://joomlaforum.ru/?order=1
post
Код: html4strict
<form action="http://joomlaforum.ru/" method="post">
    <input type="hidden" name="order" value="1">
    <input type="submit">
</form>
получаешь
Код: php
$order = JFactory::getApplication()->input->getInt('order', 0);
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Спасибо, буду ковыряться.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Вот так из бд вывожу дату:
echo JHtml::_('date'$item->bdate'd.m.Y');

А как вывести число с фиксированным кол-вом знаков после запятой? Денежный формат (#0.00), процентный формат (#0.0000)
« Последнее редактирование: 22.04.2014, 22:12:24 от AlekVolsk »
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Спасибо :)

Как узнать имя и логин зарегистрировавшегося пользователя?

upd
Сам нашел:
$user =& JFactory::getUser();
$username $user->name;
$userlogin $user->username;
« Последнее редактирование: 22.04.2014, 23:06:20 от AlekVolsk »
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Будет ли такой запрос корректным, в модели:

  
protected function getListQuery()
  {
    
$db JFactory::getDBO();
    
$query $db->getQuery(true);
    
$query->select('num, bdate, edate, term, prc, sm, rest, arest, prest, crest, srest');
    
$query->from('#__mfo_loans');
    
$query->where('client = '.$db->quote(JFactory::getUser()->username));
    return 
$query;
  }
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4

Как узнать имя и логин зарегистрировавшегося пользователя?

upd
Сам нашел:
$user =& JFactory::getUser();
$username $user->name;
$userlogin $user->username;

1. Это данные авторизированного юзера а не зарегестрировавшегося ))
2. Амперсанд перед JFactory писать не нужно просто $user = JFactory::getUser();
3. зачем создаете лишние переменные?? просто там где нужно
 $user = JFactory::getUser();
echo 'Вы вошли как '.$user->username.'. Выйти. ';
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Будет ли такой запрос корректным, в модели:
Вполне!
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
1. Это данные авторизированного юзера а не зарегестрировавшегося ))
2. Амперсанд перед JFactory писать не нужно просто $user = JFactory::getUser();
3. зачем создаете лишние переменные?? просто там где нужно
 $user = JFactory::getUser();
echo 'Вы вошли как '.$user->username.'. Выйти. ';
1. Сори, некорректно выразился, нужно именно авторизировавшегося юзера.
2. Спс
3. Да я сразу прописал, как в запросе, без переменных вообще, благо единожды в модели используется.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Вывожу данные из бд, формирую ссылку на второе представление, будет ли так корректно:
Код: html4strict
<a title="<?php echo JText::_('COM_MFO_TABLE_LOAN_HINT'); ?>" href="index.php?option=com_mfo&view=docums&loan='<?php echo $item->num; ?>'"><?php echo $item->num; ?></a>
$item->num содержит или может содержать символы / , . # - _ ( )
во второй модели параметр придет в кавычках?

upd
В общем, можно передавать без кавычек, меньше мороки с их удалением, все символы передаются корректно.
« Последнее редактирование: 23.04.2014, 00:58:22 от AlekVolsk »
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Как правильно указать в запросе несколько where с объединением and:

$query
->where('client = '.$db->quote(JFactory::getUser()->username));
$query->where('loan = '.$db->quote($loan));
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Как правильно указать в запросе несколько where с объединением and:

$query
->where('client = '.$db->quote(JFactory::getUser()->username));
$query->where('loan = '.$db->quote($loan));

Как хотите, можно как вы
можно так:
Код: php
$query->where( array( 'client = '.$db->quote( JFactory::getUser()->username ), 'loan = '.$db->quote( $loan ) ) );
или так
Код: php
$query->where( 'client = '.$db->quote( JFactory::getUser()->username )  .' AND loan = '.$db->quote( $loan )  );
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Спасибо. Оставил 1 вариант. В общем, 2 представления между собой связал.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Во втором представлении пытаюсь получить данные из первого, перед списком документов по договору вывожу данные о договоре:
Код: php
          $db =JFactory::getDBO();
          $query = 'select bdate, edate, term, prc, sm, rest, arest, prest, crest, srest from #__mfo_loans where (client = '.$db->quote(JFactory::getUser()->username).') and (num = '.$db->quote($loan).')';
          $item = $db->setQuery($query)->loadAssoc();
          $rests = $item->arest+$item->prest+$item->crest+$item->srest;
          echo '<div><span>'.JHtml::_('date', $item->bdate, 'd.m.Y').'</span></div>';
          echo '<div><span>'.JHtml::_('date', $item->edate, 'd.m.Y').'</span></div>';
          echo '<div><span>'.$item->term.'</span></div>';
          echo '<div><span>'.number_format($item->prc,4,'.','').'</span></div>';
          echo '<div><span>'.number_format($item->sm,2,'.',' ').'</span></div>';
          echo '<div><span>'.number_format($item->rest,2,'.',' ').'</span></div>';
          echo '<div><span>'.number_format($rests,2,'.',' ').'</span></div>';
Сам запрос строится корректно, в phpMyAdmin выполняется и возвращает нужные данные, а во фронт выводятся нули и все даты - текущая. Что я не так сделал?
« Последнее редактирование: 23.04.2014, 03:40:22 от AlekVolsk »
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Замените loadAssoc() на loadObject()
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Следующий офигенный вопрос.
Во фронте при нажатии на кнопку в модели вызывается функция обновления данных (все тоже самое: обмен xml-файлами по ftp, запись данных из XML в бд).
Как мне вызвать эту функцию сразу после успешной авторизации пользователя?
*

b2z

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

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Форма в представлении в компоненте, ссылка на js, в котором вызывается form.submit:
Код: html4strict
<script type="text/javascript">
  UpdateData = function()
  {
    var form = document.getElementById('adminForm');
    jQuery('#loading').css('display', 'block');
    form.worktype.value = 'ftpxml';
    form.submit();
  };

  jQuery(document).ready(function($)
  {
    var outerDiv = $('html');
    $('<div id="loading"></div>')
      .appendTo(outerDiv);
  });
</script>

<div id="mfo" class="clearfix" >
  <h1><?php echo JText::_('COM_MFO_H_LOANS'); ?></h1>
  <form action="<?php echo JRoute::_('index.php?option=com_mfo&view=loans'); ?>" method="post" name="adminForm" id="adminForm" class="form-horizontal">

    <div class="control-group mfo-upd">
      <div class="controls">
        <a class="btn a pull-right" href="javascript:UpdateData()"><?php echo JText::_('COM_MFO_FTP_UPDATE');?></a>
      </div>
    </div>

    <div>
      <input type="hidden" name="type" value="" />
      <input type="hidden" name="worktype" value="" />
      <input type="hidden" name="task" value="loans.work" />
      <?php echo JHtml::_('form.token'); ?>
    </div>

  </form>
</div>

В модели public function work() делает вызов protected function _FtpXML(), где и производятся все манипуляции по обновлению данных.
Теперь нужно вызвать work(), передав ей form.worktype.value = 'ftpxml'; или как-либо еще вызвать _FtpXML() при авторизации юзера.
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Плагин на событие onUserLogin ?
и как это реализовать?
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
и как это реализовать?
В смысле как написать свой плагин? Или как в плагине вызвать work()?
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
В смысле как обойтись без плагина, только в компоненте? Протоколируется время последнего обновления, при авторизации пользователь сразу попадает в представление, в модели которого имеется work(). Возможно, как-то можно вызвать work() в момент вызова представления, попутно проверив, а надо ли это делать: если последнее обновление было раньше, чем пользователь залогинился в активной сессии, и при этом раньше, чем с момента последнего обновления прошел час, то вызываем work(), иначе просто отображаем то, что надо.
Кстати, J хранит время последней авторизации юзера? как получить?
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Конечно можно, в представлении и проверьте и вызовите, в чем проблема?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться