Новости Joomla

Вышли релизы Joomla 6.0.3 и Joomla 5.4.3

Релиз Joomla 6.0.3 и Joomla 5.4.3

Проект Joomla рад сообщить о выпуске Joomla 6.0.3 и Joomla 5.4.3. Это релиз исправлений ошибок и улучшений для серии Joomla 6.0 и Joomla 5.4.

👩‍💻 События плагинов и порядок их срабатывания при работе с пользовательскими полями 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 Гость просматривают эту тему.
  • 15 Ответов
  • 1213 Просмотров
*

Ragnarok

  • Захожу иногда
  • 64
  • 1 / 0
Всем привет!
А как добавить поле с чекбоксом? У меня что-то не получается...

Что делал я?
По аналогии с чекбоксом "Публикация" в файл administrator/components/com_jshopping/views/manufacturer/tmpl/edit.php добавил:
Код
<input type = "checkbox" class = "inputbox" id = "free_del" name = "free_del" value = "1" <?php if ($row->free_del) echo 'checked = "checked"'?>  />

В файл administrator/components/com_jshopping/controllers/manufacturers.php в функцию save(); добавил:
Код
if (!$post['free_del']){
     $post['free_del'] = 0;
}

В базе создал поле free_del по аналогии с полем manufacturer_publish.

По идее сейчас значение должно сохраняться и браться из БД.
Если ставлю галочку, то в базу во вновь созданное поле сохраняется "1". Как бы, тут все ок. И при повторном заходе в производителя - галочка стоит. Это значит, что из БД он тоже берет значение.
НО! Когда снимаю галочку и сохраняю, то галочка все равно стоит, и в БД "1" как была, так и осталась.

В чем может быть проблема?
*

Ragnarok

  • Захожу иногда
  • 64
  • 1 / 0
Re: Добавить поле с чекбоксом
« Ответ #1 : 14.05.2019, 21:09:53 »
Спасибо большое модераторам за создание темы. Извиняюсь за то, что не в той теме задал вопрос.

Значит, по теме.
Понял, что, когда удаляешь вот это:
Код
<?php if ($row->free_del) echo 'checked = "checked"'?>
из этого:
Код
<input type = "checkbox" class = "inputbox" id = "free_del" name = "free_del" value = "1" <?php if ($row->free_del) echo 'checked = "checked"'?>  />

То все отлично работает. Если галочку отмечаем, то в базу пишется "1", если галочка не отмечена, то в базу пишется "0". НО! При заходе в производителя чекбокс остается не отмеченным даже, если в БД стоит "1". Оно и понятно, т.к. строку, которая за это отвечает я удалил (выше).

Удивительно то, что в поле "Публикация" такого нет.
Что-то я где-то явно упустил...
*

Ragnarok

  • Захожу иногда
  • 64
  • 1 / 0
Re: Добавить поле с чекбоксом
« Ответ #2 : 14.05.2019, 21:19:47 »
И еще странная штука. Когда в контроллере пишу:
Код
if (!$post['free_del']){
    $post['free_del'] = 1;
}else{
    $post['free_del'] = 0;
}
То есть, как бы наоборот — записывать в БД "1", если чекбокс НЕ отмечен, иначе записывать "0".

И, если оставить:
Код
<?php if ($row->free_del) echo 'checked = "checked"'?>
То работает на УРА! ))) Если поменять "0" и "1" местами в конструкции выше, то уже не работает... Чудеса какие-то...
« Последнее редактирование: 14.05.2019, 21:27:22 от Ragnarok »
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Добавить поле с чекбоксом
« Ответ #3 : 14.05.2019, 21:37:34 »
Что-то я где-то явно упустил...
посмотрите на примере других чекбоксов, например в конфигурации, в паре с чем они выводятся. это должно помочь
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Ragnarok

  • Захожу иногда
  • 64
  • 1 / 0
Re: Добавить поле с чекбоксом
« Ответ #4 : 14.05.2019, 22:09:31 »
посмотрите на примере других чекбоксов, например в конфигурации, в паре с чем они выводятся. это должно помочь
Выводятся в паре с td class="key", но у меня это есть. Я просто, чтобы отсечь все лишнее показал голый инпут:
Код
<tr>
 <td  class="key">
   <?php echo "Лэйбл";?>
 </td>
 <td>
   <input type = "checkbox" class = "inputbox" id = "free_del" name = "free_del" value = "1" <?php if ($row->free_del) echo 'checked = "checked"';?> />
 </td>
</tr>
А какая особая роль у этого td? Или я вас неправильно понял и не туда и не то смотрю? ))
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Добавить поле с чекбоксом
« Ответ #5 : 14.05.2019, 22:23:56 »
Или я вас неправильно понял и не туда и не то смотрю?
посмотрите например тут /administrator/index.php?option=com_jshopping&controller=config&task=otherconfig в паре с чем выводится input type = "checkbox"
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Ragnarok

  • Захожу иногда
  • 64
  • 1 / 0
Re: Добавить поле с чекбоксом
« Ответ #6 : 15.05.2019, 09:41:56 »
посмотрите например тут /administrator/index.php?option=com_jshopping&controller=config&task=otherconfig в паре с чем выводится input type = "checkbox"
Ага, вижу, что у одного из чекбоксов вот так:
Код
<input type="hidden" name="create_alias_product_category_auto" value="0">
<input type = "checkbox" name = "create_alias_product_category_auto" value = "1" <?php if ($jshopConfig->create_alias_product_category_auto) echo 'checked = "checked"';?> />
В паре со скрытым input со значением "0". Если его просто добавить, то передается два значения - "0" и "1". Но не пойму, как передавать нужное значение в зависимости от того, отмечен чекбокс или нет. Вы уж извиняйте, но в php я не особый спец.

В принципе, я могу изменять value и при помощи JS:
К input добавить onChange="deleteAttr();" и:
Код
function deleteAttr()
{
checkBB = document.getElementById("free_del");
if (!checkBB.checked)
{
checkBB.value = 0;
}
else
{
checkBB.value = 1;
}
}
Но не работает. Если зайти в Производителя, у которого стоит этот чекбокс и снять его, скрипт делает value=0 (это видно в HTML через инструменты разработчика). Но все равно отправляется "1" почему-то. То есть, если в базе был "1", то при снятии чекбокса все равно отправляется "1".
Причем, если в базе "1", а я в коде насильно пропишу value = 0 и отправлю форму:
Код
<input type = "checkbox" class = "inputbox" id = "free_del" name = "free_del" value = "0" <?php if ($row->free_del) echo 'checked = "checked"';?> />
То передается "0". Следовательно, метод со скрытым input может помочь, но знать бы, как передавать нужное значение...
« Последнее редактирование: 15.05.2019, 10:08:05 от Ragnarok »
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Добавить поле с чекбоксом
« Ответ #7 : 15.05.2019, 10:22:23 »
В паре со скрытым input со значением "0". Если его просто добавить, то передается два значения - "0" и "1".
вы что то путаете. никакие 2 значения не передаются.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Ragnarok

  • Захожу иногда
  • 64
  • 1 / 0
Re: Добавить поле с чекбоксом
« Ответ #8 : 15.05.2019, 10:37:25 »
вы что то путаете. никакие 2 значения не передаются.
У меня передаются ))
Вот мой код:
Код
<input type = "hidden" class = "inputbox" id = "free_delivery" name = "free_delivery" value = "0" />
<input type = "checkbox" class = "inputbox" id = "free_delivery" name = "free_delivery" value = "1" <?php if ($row->free_delivery) echo 'checked = "checked"';?> />
Обработчик:
Код
if (!$post['free_delivery']){
$post['free_delivery'] = 0;
}
Когда чекбокс отмечен:


Когда не отмечен:


Причем, когда не отмечен, вроде передается "0", а в базе так и остается "1"...
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Добавить поле с чекбоксом
« Ответ #9 : 15.05.2019, 10:39:14 »
У меня передаются ))
сервер получит только 1 значение - последнее

Причем, когда не отмечен, вроде передается "0", а в базе так и остается "1"...
вопрос в вашем обработчике. удалите его вообще, он не нужен абсолютно
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Ragnarok

  • Захожу иногда
  • 64
  • 1 / 0
Re: Добавить поле с чекбоксом
« Ответ #10 : 15.05.2019, 11:04:33 »
вопрос в вашем обработчике. удалите его вообще, он не нужен абсолютно
Удалил, при отправке - в базе ничего не меняется. Если было "1", то так и остается "1" даже, если снимаю галочку. Если "0", то так и остается даже, если ставлю галочку.
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Добавить поле с чекбоксом
« Ответ #11 : 15.05.2019, 11:24:57 »
у вас название поля в базе и name инпута совпадают? поле в таблице jshopping_products ?
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Ragnarok

  • Захожу иногда
  • 64
  • 1 / 0
Re: Добавить поле с чекбоксом
« Ответ #12 : 15.05.2019, 11:34:33 »
у вас название поля в базе и name инпута совпадают? поле в таблице jshopping_products ?
Да, названия совпадают. Поле типа INT, длина значения 1. Пробовал менять на VARCHAR, но эффект тот же.
Поле в таблице _jshopping_manufacturers, т.к. я хочу, чтобы это в производителях работало, соответственно, HTML пишу в файле:
/administrator/components/com_jshopping/views/manufacturer/tmpl/edit.php

Я уже добавлял текстовое поле в Производители. Оно работает. А вот с чекбоксом что-то не заладилось...
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Добавить поле с чекбоксом
« Ответ #13 : 15.05.2019, 11:51:19 »
та ну нет никакой принципиальной разницы что сохранять - чекбокс или текстовое поле. может быть вы добавляли эти переназначения в POST в нескольких местах и забыли где то убрать? смените на type="text" - будет сохраняться значение?
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Ragnarok

  • Захожу иногда
  • 64
  • 1 / 0
Re: Добавить поле с чекбоксом
« Ответ #14 : 15.05.2019, 12:05:50 »
та ну нет никакой принципиальной разницы что сохранять - чекбокс или текстовое поле. может быть вы добавляли эти переназначения в POST в нескольких местах и забыли где то убрать? смените на type="text" - будет сохраняться значение?
Не сохраняется type="text" тоже. Но все остальные поля в Производителе нормально функционируют. Посмотрел - значений одинаковых нет.
Там разница в том, что языки добавляются и переменная объявляется в начале файла /administrator/components/com_jshopping/views/manufacturer/tmpl/edit.php
Текстовое добавлял по вот этой инструкции: Дополнительное поле описания в карточке товара
Я просто не знаю - это принципиальная разница или нет.
Кстати, поле с этим чекбоксом идет сразу после моего добавленного текстового поля.

И еще, когда я убираю из input вот это (проблема как-то связана с ним):
Код
<?php if ($row->free_delivery) echo 'checked = "checked"';?>
И добавляю рядом с input вот это:
Код
<?php if ($row->free_delivery) {echo 'Да';}else{echo 'Нет';}?>
То все работает, только, если в базе "1", то чекбокс не отмеченный, но рядом стоит "Да". Если в базе "0", то "Нет". В базу все пишется нормально.
« Последнее редактирование: 15.05.2019, 12:16:11 от Ragnarok »
*

Ragnarok

  • Захожу иногда
  • 64
  • 1 / 0
Re: Добавить поле с чекбоксом
« Ответ #15 : 15.05.2019, 12:42:20 »
В общем, пришлось сделать небольшой "костылик", хотя, может и не "костылик", ведь суть та же, что и была, просто добавляется не атрибут checked, а класс:

Код
<input type = "checkbox" id="free_delivery" class="free_delivery<?php if ($row->free_delivery) {echo ' checked';}?>" name = "free_delivery" value = "1" />

<script>
checkBB = document.getElementById("free_delivery");
if (checkBB.classList.contains('checked'))
{
checkBB.checked = 1;
}
</script>
В обработчике:
Код
if (!$post['free_delivery']){
$post['free_delivery'] = 0;
}
Все работает.
dmitry_stas, огромное вам спасибо за то, что помогали!   :D
« Последнее редактирование: 15.05.2019, 12:48:31 от Ragnarok »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Добавить кнопку 'В корзину'

Автор Indexxx

Ответов: 16
Просмотров: 3682
Последний ответ 13.09.2023, 10:42:25
от kit2m2
Как добавить Title при загрузки картинки?

Автор art22

Ответов: 16
Просмотров: 2018
Последний ответ 04.05.2023, 17:21:50
от art22
Как добавить код в <head> в отдельные товары JoomShopping?

Автор Hugo

Ответов: 3
Просмотров: 3241
Последний ответ 01.03.2023, 12:07:42
от Hugo
Как добавить кнопки сортировки в модуль Sj Extra Slider for JoomShopping?

Автор Ravil

Ответов: 3
Просмотров: 1715
Последний ответ 14.06.2022, 16:37:53
от kit2m2
Под атрибуты или как добавить разделы в атрибуты?

Автор itbc

Ответов: 12
Просмотров: 1608
Последний ответ 19.02.2022, 15:15:03
от itbc