Новости Joomla

Метод registerListeners() в CMSPlugin в плагинах планируется удалить в Joomla 7.0

Метод registerListeners() в CMSPlugin в плагинах  планируется удалить в Joomla 7.0

👩‍💻 Метод registerListeners() в CMSPlugin в плагинах планируется удалить в Joomla 7.0.Этот метод регистрирует устаревшие слушатели событий в диспетчере, имитируя работу плагинов Joomla! 3.x и ниже для Joomla 4+. По умолчанию этот метод ищет все общедоступные методы, название которых начинается с on. Он регистрирует лямбда-функции (замыкания), которые пытаются преобразовать аргументы отправленного события в аргументы вызова метода и вызвать ваш метод on<Что-то>. Результат передаётся обратно событию в его аргумент result.Теперь этот слой совместимости с устаревшей Joomla 3 помечен к удалению в Joomla 7.0, которая должна выйти осенью 2027 года. Это означает, что те уникальные расширения от Joomla 2.5 / Joomla 3, которые ещё работали на Joomla 4-6 скорее всего окончательно перестанут работать на Joomla 7. Предполагается, что активные разработчики планомерно и постепенно избавляются от технического долга и обновляют свои расширения. @joomlafeed#joomla #разработка #php

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

Ренат

  • Осваиваюсь на форуме
  • 11
  • 2 / 0
Написал модуль для своего сайта. Форма заказа. При этом, если присутствует куки с именем "r", то поле (у меня это поле для промо-кода) автоматически заполняется его значением. Сделал как проще для меня: c помощью PHP. Вот что было:
Код
<form method="post" class="form-inline">
  <?php echo "<input name='session_id' type='hidden' value=".session_id().">" ?>
    ... ... ...
    <div class="control-group"><label for="promo" title="Если кто-то Вам предоставил промо-код на скидку, введите его здесь">Промо-код</label>
    <input type="text" name="promo" id="orderpromo" autocomplete="off" title="Если кто-то Вам предоставил промо-код на скидку, введите его здесь" value="<?php echo @$_COOKIE['r'] ?>"></div>
    <div class="control-group"><div class="controls"><button type="submit" tabindex="0" name="Submit" class="btn btn-large">Отправить заказ</button></div></div>
</form>
Возникла проблема. Если на сайте включить, кеширование, то код работать не будет, так как тело модуля кешируется вместе с его значением.
Соответственно возникла необходимость все-таки использовать JavaScript. Не часто его использовал, поэтому тут совсем нет опыта.
В теле модуля прописал код для добавление соответствующего скрипта. Вот мои потуги:
Код
<?php
  JHtml::_('jquery.framework', false);
  $document = JFactory::getDocument();
  $document->addScript('modules/mod_orderform/js/jquery.cookie.js');
  $document->addScriptDeclaration(
    'window.event("domready", function()
      {
        document.getElementById("orderpromo").value = $.cookie("r");
      });'
  );
?>
Код не работает. Отладчик говорит, что функции window.event не существует. Что делаю так. Могу предположить, что все :) Не подскажите как правильно реализовать такую простую задачу (автоматическое заполнение поля из куки)? Пока пришлось вернуться к своему варианту на PHP с отключенным кешированием на Joomla
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Код: javascript
jQuery(document).ready(function($){
$('#orderpromo').val($.cookie('r'));
});
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Ренат

  • Осваиваюсь на форуме
  • 11
  • 2 / 0
Спасибо большое! Так заработало!
Код
<?php
  JHtml::_('jquery.framework', false);
  $document = JFactory::getDocument();
  $document->addScript('modules/mod_orderform/js/jquery.cookie.js');
  $document->addScriptDeclaration(
    'jQuery(document).ready(function($){
$("#orderpromo").val($.cookie("r"));
     });'
  );
?>
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Пипец, чтобы вывести одну строку подключить целый файл  :laugh:
Код: javascript
function getCookie(name) {
  var matches = document.cookie.match(new RegExp(
    "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\function getCookie(name) {
  var matches = document.cookie.match(new RegExp(
    "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
  ));
  return matches ? decodeURIComponent(matches[1]) : undefined;
}
document.getElementById('orderpromo').value = getCookie('r');
alert(getCookie('r');
') + "=([^;]*)"
  ));
  return matches ? decodeURIComponent(matches[1]) : undefined;
}
document.getElementById('orderpromo').value = getCookie('r');
alert(getCookie('r');
*

Ренат

  • Осваиваюсь на форуме
  • 11
  • 2 / 0
Спасибо!
Правда все равно пришлось использовать jQuery. Если использовать window.event("domready", function(){...}, то выдается сообщение об ошибке, что такой функции нет. Использовал конструкцию, предложенную выше (jQuery(document).ready(function($){...}). Получилось вот так
Код
<?php
  JHtml::_('jquery.framework');
  $document = JFactory::getDocument();
  $document->addScriptDeclaration(
    'function getCookie(name) {
      var matches = document.cookie.match(new RegExp(
        "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, "\\$1") + "=([^;]*)"
        ));
      return matches ? decodeURIComponent(matches[1]) : undefined;
    }
    jQuery(document).ready(function($)
 {
   document.getElementById("orderpromo").value = getCookie("r")
 }
);
    ');
?>
Можно еще как-то оптимизировать сей код?
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Код: javascript
window.onload = function(){
function getCookie(name) {
 var matches = document.cookie.match(new RegExp(
"(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\window.onload = function(){
function getCookie(name) {
 var matches = document.cookie.match(new RegExp(
"(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
 ));
 return matches ? decodeURIComponent(matches[1]) : undefined;
}
document.getElementById('orderpromo').value = getCookie('r');
alert(getCookie('r');
};
') + "=([^;]*)"
 ));
 return matches ? decodeURIComponent(matches[1]) : undefined;
}
document.getElementById('orderpromo').value = getCookie('r');
alert(getCookie('r');
};
*

Ренат

  • Осваиваюсь на форуме
  • 11
  • 2 / 0
Спасибо, Fedor и Robert! Не понимаю почему тут нет кнопочки, чтобы плюсануть вашу карму.
P.S. А нет, появилось  ;D
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Получить данные из поля " file", и передать в файл обработчик

Автор Glog

Ответов: 5
Просмотров: 1711
Последний ответ 01.08.2017, 13:55:40
от Glog
Проблема с сохранением записи в БД (не все поля сохраняются)

Автор GuDeVic

Ответов: 42
Просмотров: 3038
Последний ответ 07.12.2016, 14:19:59
от b2z
Объясните как работает MVC Override с помощью плагина Joomla!

Автор kens1n

Ответов: 8
Просмотров: 2132
Последний ответ 09.10.2016, 11:00:25
от robert
Передача поля формы во view в другую модель по кнопке контроллера

Автор tm2010

Ответов: 28
Просмотров: 1969
Последний ответ 18.02.2016, 17:27:06
от tm2010
Поиск по списку значений поля как в админке. j3.3

Автор Aeliot

Ответов: 0
Просмотров: 917
Последний ответ 12.06.2014, 23:21:14
от Aeliot