Новости Joomla

Вышел WT Quick links v.2.4.0 - релиз модуля для Joomla

Вышел WT Quick links v.2.4.0 - релиз модуля для Joomla.Это модуль-конструктор для быстрого создания набора элементов. Это могут быть ссылки на компоненты Joomla, пункт меню или пользовательская ссылка. Есть условия для исключений показа элементов списка. Вы можете создавать собственные макеты вывода модуля, создавая таким образом почти всё, что угодно: от простого списка ссылок до стены фотографий на главную страницу или ссылки-теги для перелинковки категорий интернет-магазина, список FAQ, табы или аккордеоны. Модуль позволяет выводить изображения, адаптивные изображения, видео, адаптивные видео.v.2.4.0. Что нового?Добавлена поддержка новых компонентов. Добавлены новые типы ссылок и исключений для них: - Phoca Download, - Phoca Gallery, - RadicalMart (@radicalmart).Joomla 6. Успешно протестирована работа модуля на Joomla 6-alpha2.РазработчикамПроведён большой рефакторинг кода. Для типов ссылок созданы классы-драйверы. Теперь для того, чтобы добавить новый тип ссылки в модуль достаточно скопировать класс-образец из
modules/mod_wt_quick_links/src/Driver/Collection и наполнить его данными по образцу, а так же добавить необходимые языковые константы в панели администратора Joomla.Модуль бесплатный. Страница расширенияGitHub расширенияJoomla Extensions Directory👩‍💻 Подпишись на @joomlafeed.#joomla #разработка

Свои типы полей в Joomla.Это большая тема, о которой можно говорить очень много

Свои типы полей в Joomla.Это большая тема, о которой можно говорить очень много

👩‍💻 Свои типы полей в Joomla.Это большая тема, о которой можно говорить очень много. Самое главное, что возможности применения ограничиваются только вашей больной фантазией. Вы строите интерфейс своего модуля или плагина и вам нужно подтянуть данные из сторонней системы (список чего-нибудь по какому-нибудь API), чтобы сохранить выбранный id в Joomla. Или сделать какую-то проверку и в зависимости от неё показать то или иное сообщение пользователю. Для этого подойдут свои пользовательские типы полей. Интерфейс Joomla по большей части описан в XML-файлах. У каждого из них свои параметры. Некоторые не описаны в документации (manual.joomla.org), поэтому самым любопытным будет полезно заглянуть в собственно файлы фреймворка по пути

libraries/src/Form/FormField.php, а так же в
libraries/src/Form/Fields. У каждого класса поля перечислены его специфические свойства, которые можно описывать в XML. А в своём типе поля вы можете устанавливать эти значения программно. В моём модуле WT Quick links под капотом происходят изменения. Теперь для работы (в админке) ему нужен вспомогательный плагин. А в самом модуле нам бы проверить, а не выключен ли он? В Joomla есть тип поля Note - заметка. Его можно использовать для вывода примечаний.

<field type="note"     name="your_note_for_user"     label="Заголовок примечания"     title="Альтернативный способ для заголовка"     description="Текст примечания"     class="col-12 alert alert-info"     heading="h1"     close="true"/>
heading - указывать уровень заголовка.
close - позволяет закрыть это примечание. В классе поля
libraries/src/Form/Field/NoteField.php описана логика вывода. И в принципе оно нам подходит для нашей задачи. Но оно будет выводить сообщение всегда, а нам нужно только тогда, когда плагин отключён.Поэтому берём и создаём свой класс поля, который мы унаследуем от
NoteField. Это значит, что у нас в руках будет весь инструментарий стандартного поля
Note + то, что мы сами добавим. В XML-манифест добавляем наше поле
<field type="systempluginstatus"      name="systempluginstatus"     addfieldprefix="Joomla\Module\Wtquicklinks\Site\Fields"/>
-
type - имя файла и класса,-
addfieldprefix - указываем namespace к нашему классу, может быть любой нам нужный-
name - нельзя полю без имени...Это означает, что Joomla будет использовать класс поля из файла
modules/mod_wt_quick_links/src/Fields/SystempluginstatusField.php.А в классе поля будет написано следующее:
<?php// namespace для атрибута addfieldprefixnamespace Joomla\Module\Wtquicklinks\Site\Fields;// нельзя напрямую обращаться к этому файлуdefined('_JEXEC') or die;// подключаем родительский класс для переопределенияuse Joomla\CMS\Form\Field\NoteField;use Joomla\CMS\Language\Text;use Joomla\CMS\Plugin\PluginHelper;// имя класса и имя файла точь-в-точьclass SystempluginstatusField extends NoteField{     protected $type = 'Systempluginstatus';     protected function getLabel()          {               // если плагин не включён               if(PluginHelper::isEnabled('system','wtquicklinks')) {                    // меняем свойства родительского класса                    $this->class = 'alert alert-danger w-100';                    $this->element['label'] = '⚠️ А-а-а-а!';                    $this->element['description'] = 'Плагин не включён!!';                    // и просто рендерим его с нашими свойствами                    return parent::getLabel();               }          // А иначе всё хорошо, скрываем поле из виду.          $this->parentclass = 'd-none';          return '';     }}
Просто и удобно. И людям приятно, что о них позаботились и рассказали почему что-то не работает.@webtolkru#joomla #php #webdev #разработка

Обновлена информация в Плане развития Joomla

👩‍💻 Обновлена информация в Плане развития Joomla.Здесь собрана информация о датах релизов, описаны принципы версионирования, указаны ответственные за релизы, а так же даты окончания поддержки релизов. Опираясь на эту информацию вы можете планировать развитие ваших интернет-проектов.👩‍💻 Что нового?⛔️ Joomla 4.Дата окончания исправления ошибок безопасности в версии 4.x - 14 октября 2025г. ⚠️ После этой даты Joomla 4 прекратит получать какие-либо обновления, в том числе безопасности - вообще. Рекомендуем обновить ваши сайты до актуальной Joomla 5.✅ Joomla 5.- Дата окончания исправления ошибок в версии 5.x - 13 октября 2026г.- Дата окончания исправления ошибок безопасности в версии 5.x - 12 октября 2027 года.- Текущая актуальная (на момент написания заметки) версия - 5.3.1.- Опубликовано расписание выхода релизов Joomla 5.4. Стабильный релиз ожидается 14 октября 2025 года.✅ Joomla 6.- Дата окончания исправления ошибок в версии 6.x - 17 октября 2028г.- Дата окончания исправления ошибок безопасности в версии 6.x - 16 октября 2029г.- Опубликовано расписание выхода релизов Joomla 6.0. Стабильный релиз ожидается 14 октября 2025 года.- Для разработчиков уже доступна Joomla 6.0.0-alpha1.✅ Joomla! Framework.Обновлена информация о Joomla! Framework - полноценном PHP-фреймворке для разработки. Он в версиях 1.х и 2.х был самостоятельным параллельным проектом, однако начиная с версии Joomla 4.0 стал её основой. Добавлена информация о Joomla! Framework 3.x, который вышел 6 октября 2023 года. Его можно использовать в тех случаях, когда вам в проекте не нужна CMS Joomla целиком.Подробнее на сайте Joomla-сообщества Joomlaportal.ru#joomla #community

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

tm2010

  • Захожу иногда
  • 76
  • 0 / 0
Не ругайте строго, в php и веб программировании слаб
имею view в котором по тулбару делаю кнопку задача которой связатся по Google API с календарем Google и загрузить события для отмеченного мышкой во view cid

cid в $REQUEST вижу, есть, то есть есть возможность поднять из базы этот рекорд, чтобы взять данные для доступа к календарю

(CALENDAR_ID в данном случае). 
Но ведь я в этом view (а это FORM) имею, или могу иметь этот CALENDAR_ID от предыдущего чтения GetListQuery сделав его невидимым поскольку он длинный  и неинформативный.
Для меня абсолютно неясен вопрос возможно ли это поле ( в строке выделенной мышкой) передать как то по кнопке, так чтобы оно появилось в переменной $REQUEST в модели скажем другого контроллера, или я слишком многого хочу от Joomla ?
Вся затея - чтобы повторно не читать базу данных по cid записи, или не маятся дурью и просто сделать select по cid?


*

passer

  • Завсегдатай
  • 1013
  • 75 / 3
Запишите в сессию или используйте состояние модели, что в общем-то одно и то же.
*

tm2010

  • Захожу иногда
  • 76
  • 0 / 0
Запишите в сессию или используйте состояние модели, что в общем-то одно и то же.
Подскажите где копать? Судя по всему JRequest::Setvar, но как это сделать по кнопке, если на кнопке на js стоит сразу submit контроллер и task,  а в контроллере этих данных уже наверное нет.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
JModel::setState(), JSession::set(). Ну или $_SESSION, если она вам больше нравится.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
тут насколько я понял вопрос в другом.
ТС, вам надо в форме помимо input name="cid[]" сделать еще один input hidden name="calendar_id[]", в котором как раз передавать нужный CALENDAR_ID. и тогда зная какой cid (какой элемент в массиве), вы сможете получить такой же ключ, но массива calendar_id.
возможно, сумбурно, но надеюсь поняли. в общем надо в форме передавать calendar_id тоже.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

tm2010

  • Захожу иногда
  • 76
  • 0 / 0
Да, именно это,  единственное я не нашел или плохо искал как cid передается по кнопке, с тем чтобы сделать аналогично.
Поищу
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
а что там искать? чекбокс имеет name=cid[]. передается массив cid, поскольку это чекбокс, то передаются только отмеченные. никакой абсолютно магии, обыкновенная форма. в чем сложность?
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
По-моему, ТС озадачил принцип работы кнопок на toolbar: эти кнопки одновременно передают параметр task и отправляют форму, как будто там были <input name="task" value="значение_кнопки"/><input type="submit"/>.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
как будто там были <input name="task" value="значение_кнопки"/><input type="submit"/>.
а ведь по сути так и есть :) Joomla.submitbutton так ведь и делает, пишет в task значение, и отправляет форму.

ТС, так в чем именно проблема?
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

tm2010

  • Захожу иногда
  • 76
  • 0 / 0
в отсутствии опыта работы с php, формами и тд
Как вы поражаетесь, как этого можно не знать, так я поражен, как вы это делаете ), и откуда вам это все известно

я поставил в view <input type="hidden" name = "calendar_id[]" value='<?php echo $row->Google_id; ?>'>
и о чудо, массив передался
Наверное последний вопрос в этой теме, можно ли передавать только те элементы массива которые соответствуют выбраным чекбоксам, или это грошовая экономия ?

>
>По-моему, ТС озадачил принцип работы кнопок на toolbar: эти кнопки одновременно передают параметр task и отправляют форму, как будто там были <input name="task" value="значение_кнопки"/><input type="submit"/>.

Да это тоже чудо чудное, полагал что только одна или какие-то избранные кнопки могут делать POST с передачей введенных данных
Базовых знаний маловато, но усваиваются они только когда пробуешь это все сделать ручками.

*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
Да это тоже чудо чудное, полагал что только одна или какие-то избранные кнопки могут делать POST с передачей введенных данных
Базовых знаний маловато, но усваиваются они только когда пробуешь это все сделать ручками.
Ну все когда с этого начинали. Нужно просто сделать мини расследвование  ^-^

Например, вот как выглядит HTML стандартной кнопки "Опубликовать":
Код: html4strict
<button class="btn btn-small" onclick="if (document.adminForm.boxchecked.value==0){alert('Пожалуйста, выберите объект из списка');}else{ Joomla.submitbutton('articles.publish')}">
<span class="icon-publish"></span>
Опубликовать
</button>

При клике вызывается Joomla.submitbutton('articles.publish') - контроллер articles и задача (task) publish.

Смотрим /media/system/js/core-uncompressed.js и видим, что Joomla.submitbutton вызывает Joomla.submitform( pressbutton ), которая записывает <input name="task" value="значение_кнопки"/> и отправляет форму.
Вот и вся магия  ;)
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
кстати если вам cid нужен только для того, чтобы получить calendar_id, то зачем вам вообще cid? сделайте чекбоксом именно calendar_id, и передавайте только его. тогда будут передаваться только отмеченные.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

tm2010

  • Захожу иногда
  • 76
  • 0 / 0
кстати если вам cid нужен только для того, чтобы получить calendar_id, то зачем вам вообще cid? сделайте чекбоксом именно calendar_id, и передавайте только его. тогда будут передаваться только отмеченные.
Обалдеть, не знал, но к сожалению по чекбоксу работает и edit и delete, хотя наверное можно их заставить работать по calendar_id ?
Или если совсем хорошо делать, можно ли к cid прикрепить значения календаря ?
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
но к сожалению по чекбоксу работает и edit и delete, хотя наверное можно их заставить работать по calendar_id ?
В каком смысле?
*

tm2010

  • Захожу иногда
  • 76
  • 0 / 0
В каком смысле?
Был неправ, видимо cid слишком важная переменная, которая применяется во многих джумловских методах по которые работают умолчанию, когда мы методы не переопределяем, и ее чекбокс должен называться cid
но можно ли cid сделать скажем двумерным, с тем чтобы дополнительно присваивать к его элементам значения calendar_id  ?
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
но можно ли cid сделать скажем двумерным, с тем чтобы дополнительно присваивать к его элементам значения calendar_id  ?
Нельзя. Если хотите использовать calendar_id, то придётся переопределять методы и отлавливать массив. А в чём проблема выводить ваши calendar_id в cid? Всё никак уловить не можем - вы используете и то и то на странице?
*

tm2010

  • Захожу иногда
  • 76
  • 0 / 0
Нельзя. Если хотите использовать calendar_id, то придётся переопределять методы и отлавливать массив. А в чём проблема выводить ваши calendar_id в cid? Всё никак уловить не можем - вы используете и то и то на странице?
Дмитрий,
1)если честно я не вижу у себя в форме cid , в тол не возьму, где она объявляется, и какое отношение к checkbox имеет
она присутствует в линке, но это уже последствия а не причина ее появления
2) calendar_id я по вашему общему совету объявил, и все нормально, вопрос такой - если передается только checked cid , то можно ли к нему прилепить значения calendar_id как то, там же в форме, и если можно то как, если я в самой форме этот cid не вижу даже

вот форма, вернее лэйаут
Спойлер
[свернуть]
*

tm2010

  • Захожу иногда
  • 76
  • 0 / 0
видимо эта строка разворачивает и объявляет этот cid как массив и значения calendar_id туда не прилепишь никак.
<?php echo JHtml::_('grid.id', $i, $row->id); ?>
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
в смысле не прилепишь? :) вы бы хоть попробовали вместо $row->id вставить $row->Google_id. и будет у вас в cid сразу ваш CALENDAR_ID, и будут передаваться только чекнутые.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
в смысле не прилепишь? :) вы бы хоть попробовали вместо $row->id вставить $row->Google_id. и будет у вас в cid сразу ваш CALENDAR_ID, и будут передаваться только чекнутые.
Решение как бы очевидное ;)

Если нужно решение вот этого
Цитировать
передается только checked cid, то можно ли к нему прилепить значения calendar_id
то применяем JS.

Сначала добавляем ID к инпуту calendar_id:
Код: php
<input id="cal<?php echo $row->id; ?>" type="hidden" name="calendar_id[]" value="<?php echo $row->Google_id; ?>">

ну и потом JSом отмечаем нужные чекбоксы при клике на cid[]:

Код: javascript
$("input[name = 'cid[]']").on( "click", function() {
  $('#cal'+this.value).attr('checked', 'checked');
});

Правда тогда ещё нужно отлавливать, если с cid[] убрали кексик, то убирать и в calendar_id[]  ^-^
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
та я так понимаю нужно вообще только $row->Google_id
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

tm2010

  • Захожу иногда
  • 76
  • 0 / 0
Решение как бы очевидное ;)

Если нужно решение вот этогото применяем JS.

Сначала добавляем ID к инпуту calendar_id:
Код: php
<input id="cal<?php echo $row->id; ?>" type="hidden" name="calendar_id[]" value="<?php echo $row->Google_id; ?>">

ну и потом JSом отмечаем нужные чекбоксы при клике на cid[]:

Код: javascript
$("input[name = 'cid[]']").on( "click", function() {
  $('#cal'+this.value).attr('checked', 'checked');
});

Правда тогда ещё нужно отлавливать, если с cid[] убрали кексик, то убирать и в calendar_id[]  ^-^
Хотел протестировать, но еще раз распишусь в  безграмотности, с JS вообще слаб
поставил Ваш  <input id="cal<?php echo $row->id; ?>" type="hidden" name="calendar_id[]" value="<?php echo $row->Google_id; ?>

добавил в этот же Layout
<?php
JHtml::script(JUri::base(). 'components/com_rentflat/assets/test.js', true);
?>
в HTML скрипт есть
в test.js ваш код на JS
Не умею добавлять обработчики на js


в консоли отладчика TypeError: $(...) is null

*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
$ на jQuery замените
Да.

Ну и зачем в отдельный JS файл? Прямо в макете:
Код: javascript
<script>
jQuery("input[name = 'cid[]']").on( "click", function() {
  jQuery('#cal'+this.value).attr('checked', 'checked');
});
</script>

Или так:
Код: javascript
<script>
(function($) {
  $("input[name = 'cid[]']").on( "click", function() {
  $('#cal'+this.value).attr('checked', 'checked');
  });
})(jQuery);
</script>
*

tm2010

  • Захожу иногда
  • 76
  • 0 / 0
при рефреше после загрузки index.php
Пустая строка не может быть аргументом метода getElementById(). jquery.min.js:2:24487
при клике на checkbox - несколько (8) таких же ошибок
Пустая строка не может быть аргументом метода getElementById(). jquery.min.js:2:24487
если ставлю точку останова на обработчике, не тормозит
при перезагрузке тоже


Пробовал и в тело layout ставить и $document->addScriptDeclaration во view , были эти ошибки
*

b2z

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

tm2010

  • Захожу иногда
  • 76
  • 0 / 0
Ха, я тупо списал Ваш код input , там нет checkbox  и я даже смысла кода не понимал
теперь понял смысл, включать невидимый checkbox календаря
Спасибо, поборю ошибку скрипта и проверю
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Ха, я тупо списал Ваш код input , там нет checkbox  и я даже смысла кода не понимал
вот я иногда задумываюсь о таком... если написать откровенно дырявый код и дать вставить его на сайт... :) то кто будет виноват? :)
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

tm2010

  • Захожу иногда
  • 76
  • 0 / 0
Удалось  просто копировать содержимое главного cid, в cal
$("input[name = 'cid[]']").on("click", function() {
      $('#cal' + this.value).attr('checked', $("input[name = 'cid[]']").prop("checked"));
});
Спасибо, но беда скрипт не работает везде в шаблоне
ставлю над <form> не работает и дебагер его не видит
ставлю в конце </form> - тарахтит и отлаживается
на всех броузерах

по этой причине я сутки убил на поиск  ответа на вопрос на другую беду, как это всегда бывает, вылезаешь с благими намерениями чтото сделать и чемуто научится, и упираешься в стену своего же непонимания

Ошибка Пустая строка не может быть аргументом метода getElementById(). jquery.min.js:2:24487
не зависит от моего кода, по всей Joomla куда бы я не ткнул в экран, я ее имею
Поставил новую Joomla другой версии в голую директорию, ошибка сохраняется
Только в Firefox , и только по ctrl-shift-I, FireBug ничего не кажет
ошибку имею такуюже как на сайте http://demo.t3-framework.org/joomla30/index.php/en/ если открыть по ctrl-shift-I
Побороть я ее хочу потому что думаю что в этом причина несрабатывания скрипта когда он находится условно не в нужном месте
строка кода где вырабатывается ошибка - 2827 -    elem = document.getElementById( match[2] ); при замененом jquery.min на полный.
Мне интересно у меня одного такая ошибка на этом сайте, локальны ли мои проблемы, глянте пожалуйста
такое ощущение что DOM документа как то разрушен, и jquery неверно все понимает.
кеш куки чистил
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

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

Автор Glog

Ответов: 5
Просмотров: 1564
Последний ответ 01.08.2017, 13:55:40
от Glog
Передача переменной из hel-per.php в default.php

Автор ChervonStudio

Ответов: 6
Просмотров: 1145
Последний ответ 13.06.2017, 15:57:43
от SmokerMan
Проблема с сохранением записи в БД (не все поля сохраняются)

Автор GuDeVic

Ответов: 42
Просмотров: 2838
Последний ответ 07.12.2016, 14:19:59
от b2z
Параноидальная защита формы

Автор zomby6888

Ответов: 2
Просмотров: 1357
Последний ответ 26.02.2016, 17:27:21
от zomby6888
Запись в БД из формы в плагине (модуле). Как!

Автор Sergeyy

Ответов: 13
Просмотров: 1556
Последний ответ 13.11.2015, 11:01:18
от Sergeyy