Новости Joomla

👩‍💻 События плагинов и порядок их срабатывания при работе с пользовательскими полями Joomla и использовании FieldsHelper.

👩‍💻 События плагинов и порядок их срабатывания при работе с пользовательскими полями Joomla и использовании FieldsHelper.

В процессе работы с Joomla бывает необходимо работать с пользовательским интерфейсом более тонко, чем обычно. Все формы Joomla состоят из стандартных полей, содержанием, стилем отображения, состоянием (включено/выключено, доступно для редактирования или нет и т.д.) можно управлять с помощью плагинов. Да и для нестандартных проектов хорошей практикой является создание одного системного или нескольких плагинов групп "под проект", в которых храниться весь "нестандарт".

В этой статье описаны все триггеры, которые вызываются через Event Dispatcher из administrator/components/com_fields/src/Helper/FieldsHelper.php, с привязкой к жизненному циклу (порядку этапов работы запроса), аргументам, изменяемым данным и дальнейшему распространению по Joomla. Это поможет вам работать с Joomla свободнее и не опасаясь при этом потерять изменения при очередном обновлении движка.

Подходы, описанные в статье, полезны в тех случаях, когда вы работаете с данными в com_fields - механизме создания и редактирования пользовательских полей ядра Joomla и при использовании FieldsHelper. Многие сторонние компоненты не используют эту возможность, поэтому данная статья будет полезна лишь частично.

🏆 Открыто голосование за Joomla в премии CMS Critic People’s Choice Awards 2025

🏆 Открыто голосование за Joomla в  премии CMS Critic People’s Choice Awards 2025

🗓 Голосование продлится до 27 февраля 2026 года.

👩‍💻 Проголосовать! 👩‍💻

Номинации, в которых можно проголосовать за Joomla:
⭐️ Best Free CMS
⭐️ Best Open Source CMS
⭐️ Best Enterprise CMS

Также в номинации Best e-Commerce Solution участвуют компоненты интернет-магазинов для Joomla:
⭐️ HikaShop
⭐️ Virtuemart

В номинации Best Website Builder оказались:
⭐️ YooTheme
⭐️ SP Page Builder

Что такое CMS Critic Awards?
С 2012 года премия CMS Critic Awards занимает особое место в сообществе систем управления контентом (CMS). Это единственный в своем роде сайт, который составляет рейтинг системы управления контентом и связанных с ними решений на рынке — от малого до крупного и подчеркивает их инновации и услуги.

Каждый год награда CMS Critic Awards присуждается одному победителю в различных отраслевых категориях, таких как: «Лучшая облачная CMS», «Лучший DXP», «Лучшая Headless CMS и других. Затем результаты оглашаются через СМИ вместе с выбором редакции CMS Critic.
В этом году премия вернулась к своим традициям и только TOP-5 движков по количеству номинаций попали в 2-й этап - голосование.

@joomlafeed

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

Dimonchester

  • Новичок
  • 2
  • 0 / 0
Не работает JavaScript в Joomla
« : 25.04.2021, 18:24:59 »
Есть код на JavaScript на PopUp окно:
Код
const popupLinks = document.querySelectorAll('.popup-link');
const body = document.querySelector('body');
const lockPadding = document.querySelectorAll(".lock-padding");

let unlock = true;

const timeout = 800;

if (popupLinks.length > 0) {
    for (let index = 0; index < popupLinks.length; index++) {
        const popupLink = popupLinks[index];
        popupLink.addEventListener("click", function (e) {
            const popupName = popupLink.getAttribute('href').replace('#', '');
            const curentPopup = document.getElementById(popupName);
            popupOpen(curentPopup);
            e.preventDefault();
        });
    }
}

const popupCloseIcon = document.querySelectorAll('.close-popup');
if (popupCloseIcon.length > 0) {
    for (let index = 0; index < popupCloseIcon.length; index++) {
        const el = popupCloseIcon[index];
        el.addEventListener('click', function (e) {
            popupClose(el.closest('.popup'));
            e.preventDefault();
        });
    }
}

function popupOpen(curentPopup) {
    if (curentPopup && unlock) {
        const popupActive = document.querySelector('.popup.open');
        if (popupActive) {
            popupClose(popupActive, false);
        } else {
            bodyLock();
        }
        curentPopup.classList.add('open');
        curentPopup.addEventListener("click", function (e) {
            if (!e.target.closest('.popup__content')) {
                popupClose(e.target.closest('.popup'));
            }
        });
    }
}

function popupClose(popupActive, doUnlock = true) {
    if (unlock) {
        popupActive.classList.remove('open');
        if (doUnlock) {
            bodyUnLock();
        }
    }
}

function bodyLock() {
    const lockPaddingValue = window.innerWidth - document.querySelector('.wrapper').offsetWidth + 'px';

    if (lockPadding.length > 0) {
        for (let index = 0; index < lockPadding.length; index++) {
            const el = lockPadding[index];
            el.style.paddingRight = lockPaddingValue;
        }
    }
    body.style.paddingRight = lockPaddingValue;
    body.classList.add('lock');

    unlock = false;
    setTimeout(function () {
        unlock = true;
    }, timeout);
}

function bodyUnLock() {
    setTimeout(function () {
        if (lockPadding.length > 0) {
            for (let index = 0; index < lockPadding.length; index++) {
                const el = lockPadding[index];
                el.style.paddingRight = '0px';
            }
        }
        body.style.paddingRight = '0px';
        body.classList.remove('lock');
    }, timeout);

    unlock = false;
    setTimeout(function () {
        unlock = true;
    }, timeout);
}

HTML часть:

Код
<div class="popup__form">
    <a href="#popup" class="popup-link"><button>Заявка</button></a>
    <div id="popup" class="popup">
        <div class="popup__body">
            <div class="popup__content">
                <a href="#header" class="popup__close close-popup">X</a>
                <div class="popup__title">Модальное окно №1</div>
                <div class="popup__text">
                    <form action="">
                        <table>
                            <tr>
                                <td>
                                    <p>Введите имя</p>
                                </td>
                                <td>
                                    <input type="text" size="40" class="edit__box"
                                        placeholder="Введите имя">
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <p>Введите имя</p>
                                </td>
                                <td>
                                    <input type="text" size="40" class="edit__box"
                                        placeholder="Введите имя">
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <p>Введите имя</p>
                                </td>
                                <td>
                                    <input type="text" size="40" class="edit__box"
                                        placeholder="Введите имя">
                                </td>
                            </tr>
                        </table>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>

CSS часть:

Код
.popup__form
{
    display: flex;
    justify-content: center;
}
.popup-link button
{
    font-size: 20px;
font-weight: 700;
color: white;
text-decoration: none;
padding: .8em 1em calc(.8em + 3px);
border-radius: 3px;
border:none;
outline:none;
background: gray;
transition: 0.2s
}
.popup-link button:hover
{
    background: #000;
}

body.lock
{
    overflow:hidden;
}
.popup
{
    position: fixed;
    width: 100%;
    height: 100%;
    background-color: rgba(0, 0, 0, 0.61);
    top: 0;
    left: 0;
    opacity: 0;
    visibility: hidden;
    overflow-y: auto;
    overflow-x: hidden;
    transition: all 0.8s ease 0s;
}
.popup.open
{
    opacity: 1;
    visibility: visible;
    z-index: 1;
}
.popup.open .popup__content
{
    /* transform: perspective(600px) translate(0px, 0%) rotateX(0deg); */
    transform: translate(0px, 0px);
    opacity: 1;
}
.popup__body
{
    min-height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 30px 10px 30px 10px;
    transition: all 0.8s ease 0s;
}
.popup__content
{
    background-color: #fff;
    color: #000;
    max-width: 800px;
    padding: 30px;
    position: relative;
    transform: translate(0px, -100%);
    transition: all 0.8s ease 0s;
    opacity: 0;
}
.popup__close
{
    position: absolute;
    top: 10px;
    right: 20px;
    font-size: 20px;
    color: #000
}
.popup__title
{
    font-size: 40px;
    margin: 0px 0p 1em 0px;
}

Данный код(js) никак не хочет работать, когда я переношу его на свой шаблон в Joomla. Все файлы подключены и работают (в этих файлах есть и другой код, который полностью работает), консоль никаких ошибок не выдаёт (если допустить ошибку в js коде, тогда уже выдаёт)

На моём шаблоне (который не подключён к серверу) всё прекрасно работет.

Почему js код не работет? И как сделать так, чтобы он начал работать?
*

sivers

  • Живу я здесь
  • 2606
  • 361 / 0
Re: Не работает JavaScript в Joomla
« Ответ #1 : 25.04.2021, 18:55:51 »
попробуйте отрабатывать код после загрузки всей страницы. для этого можно добавить атрибут defer если код подключается внешним файлом, либо обернуть код (весь, который до функций) в обработчик события загрузки страницы (в примере это функция onLoad:
Код
if(window.addEventListener){
    window.addEventListener('load', onLoad, false);
}else{
    if(window.attachEvent){
        window.attachEvent('onload', onLoad);
    }else{
        window.onload = onLoad;
    }
}

function onLoad(){
    console.log('Страница загружена!');
}
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Dimonchester

  • Новичок
  • 2
  • 0 / 0
Re: Не работает JavaScript в Joomla
« Ответ #2 : 25.04.2021, 22:35:36 »
попробуйте отрабатывать код после загрузки всей страницы. для этого можно добавить атрибут defer если код подключается внешним файлом, либо обернуть код (весь, который до функций) в обработчик события загрузки страницы (в примере это функция onLoad:
Код
if(window.addEventListener){
    window.addEventListener('load', onLoad, false);
}else{
    if(window.attachEvent){
        window.attachEvent('onload', onLoad);
    }else{
        window.onload = onLoad;
    }
}

function onLoad(){
    console.log('Страница загружена!');
}

Добавил атрибут defer и всё заработало. Спасибо большое! ^-^
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Ошибка Missing field in database: Joomla\CMS\Table\Extension &#160; extension_id

Автор Ragivort

Ответов: 1
Просмотров: 1816
Последний ответ 25.12.2025, 21:10:01
от fbr
Joomla 3 не пускает в админку (просто перезагружается страница) (гуглил, нашёл решение, не помогло)

Автор lifelover2b

Ответов: 11
Просмотров: 6532
Последний ответ 05.06.2025, 04:48:29
от andrey222
По поводу сессий Joomla 3

Автор azm1n

Ответов: 0
Просмотров: 2573
Последний ответ 25.05.2025, 09:26:17
от azm1n
Не работает мобильная версия сайта

Автор jeans

Ответов: 4
Просмотров: 2475
Последний ответ 21.05.2025, 12:44:06
от jeans
Стоит ли ставить плагин rel="canonical" на Joomla 3

Автор azm1n

Ответов: 2
Просмотров: 3053
Последний ответ 09.05.2025, 12:39:18
от azm1n