Новости Joomla

Joomla 6: Автоматические обновления ядра в Joomla

Joomla 6: Автоматические обновления ядра в Joomla

👩‍💻 Joomla 6: Автоматические обновления ядра в Joomla. В октябрьском номере официального журнала Joomla - Joomla Community Magazine вышла статья David Jardin, где рассказывается о внедрении функционала автоматического обновления ядра Joomla.❓Почему сейчас? Joomla же жила как-то 20 лет без автоматических обновлений?Это оказалась самая востребованная за последнее время от пользователей Joomla функция. Но, основная причина внедрения - проблемы безопасности. Всякий раз, когда в новой версии Joomla устраняется уязвимость, злоумышленники начинают анализировать код, чтобы выяснить, какая именно уязвимость была исправлена. И как только они это выясняют - начинается разработка автоматизированных скриптов для взлома как можно большего количества сайтов. Затем доступы к автоматически взломанным сайтам продаются в профильных чатах и ресурсах "пачками" по несколько сотен тысяч или миллионов сайтов. Ваш сайт могли взломать несколько лет назад, но воспользоваться уязвимостью могут не сразу, а тогда, когда у злоумышленников возникнет необходимость. И только после этого вы может быть узнаете об этом.Анализ патча, понимание проблемы и разработка скрипта требуют времени. И если владелец сайта не обновит его до истечения этого срока, сайт может быть взломан. А хакеры действуют быстро! Для критических, легко эксплуатируемых уязвимостей речь идёт о временном окне в 10–12 часов — и этого времени явно недостаточно, чтобы все успели обновить свои сайты.Здесь выходят на первый план автоматизированные обновления: проект Joomla теперь может активно устанавливать обновления (и, следовательно, исправления безопасности) на сайты, чтобы гарантировать, что сайты действительно обновляются вовремя.🕘 От первых идей до реализации прошло 5 лет. И здесь можно вспомнить, как в Joomla 5.1 внедрили TUF - The Update Framework, позволяющий устанавливать защищённое соединение между сайтом и сервером обновлений и исключает возможность supply chain attack (атаки на цепочку поставок).Об особенностях реализации и требованиях к сайту читаем подробнее в статье на JCM.@joomlafeed#joomla #secutiry #jcm

Первый выпуск журнала NorrNext в честь 20-й годовщины Joomla™

Первый выпуск журнала NorrNext в честь 20-й годовщины Joomla™

Первый выпуск журнала NorrNext в честь 20-й годовщины Joomla™. Интервью с волонтёрами 🎈Ну что, друзья, вот и настал этот долгожданный момент. Мы выпустили первое издание собственного журнала под эгидой NorrNext, который включает в себя интервью с видными деятелями сообщества из разных стран и континентов.Общий нарратив: показать, что нас объединяет (Joomla) и узнать больше о людях, которые вносят свой вклад в развитие платформы в своих сообществах. 20 лет — это много. Давайте же узнаем о коллегах 🎁 Первый цикл включает такие страны, как Австрия, Испания, Латвия, Россия, Румыния, Тайланд, Черногория, Чехия.⚙️ С кем интервью: ✔️ Владимир Елисеев 🇷🇺✔️ Дмитрий Рекун 🇱🇻✔️ Дмитрий Цымбал 🇷🇺✔️ Евгений Сивоконь 🇷🇺 ✔️ Сергей Толкачёв 🇷🇺✔️ Dénes Székely 🇷🇴✔️ Jan Pavelka 🇨🇿✔️ Miljan Vujosevic 🇲🇪✔️ Sergio Iglesias 🇪🇸✔️ Sigrid Gramlinger 🇦🇹✔️ Pisan Chueatchatchai 🇹🇭‼️ Новые интервью будут добавляться до конца декабря 2025. Заходите по ссылке время от времени💡👉 Читать далее

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

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

  • Глобальный модератор
  • 7287
  • 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

  • Глобальный модератор
  • 7287
  • 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

  • Глобальный модератор
  • 7287
  • 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

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

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

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

Автор usersyslog

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

Автор eugenes

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

Автор amino_2012

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

Автор Ghash

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

Автор kik84

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