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

Ragnarok

  • Осваиваюсь на форуме
  • 40
  • 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

  • Осваиваюсь на форуме
  • 40
  • 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

  • Осваиваюсь на форуме
  • 40
  • 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

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

Ragnarok

  • Осваиваюсь на форуме
  • 40
  • 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

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

Ragnarok

  • Осваиваюсь на форуме
  • 40
  • 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

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

Ragnarok

  • Осваиваюсь на форуме
  • 40
  • 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

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

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

Ragnarok

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

dmitry_stas

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

Ragnarok

  • Осваиваюсь на форуме
  • 40
  • 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

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

Ragnarok

  • Осваиваюсь на форуме
  • 40
  • 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

  • Осваиваюсь на форуме
  • 40
  • 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 »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Добавить класс к аттрибуту которого нет в наличии

Автор bantell

Ответов: 0
Просмотров: 175
Последний ответ 18.03.2019, 13:50:43
от bantell
За что отвечает поле hits

Автор leha111

Ответов: 1
Просмотров: 78
Последний ответ 07.03.2019, 16:19:15
от effrit
Добавить изображение товара в счет

Автор Dolphin4ik_1

Ответов: 7
Просмотров: 522
Последний ответ 28.12.2018, 18:00:28
от Dolphin4ik_1
Добавить кнопки Предыдущий/Следующий товар?

Автор a1exfr

Ответов: 45
Просмотров: 8219
Последний ответ 20.12.2018, 21:18:56
от effrit
Добавить кнопку 'В корзину'

Автор Indexxx

Ответов: 14
Просмотров: 326
Последний ответ 18.12.2018, 19:59:08
от Indexxx