За последние 24 часа нас посетили 21885 программистов и 1092 робота. Сейчас ищут 747 программистов ...

добавление в корзину с помощью чекбокса

Тема в разделе "Сделайте за меня", создана пользователем gw1516, 7 мар 2018.

  1. gw1516

    gw1516 Активный пользователь

    С нами с:
    4 май 2017
    Сообщения:
    29
    Симпатии:
    0
    Здравствуйте всем!
    Есть страница товаров в виде списка.
    Хочу к каждому товару добавить чекбокс для добавления в корзину.
    Нажатие на чекбокс добавляет товар в корзину и делает чекбокс активным.
    Повторное нажатие на чекбокс удаляет товар из корзины и делает чекбокс неактивным.
    Все это должно происходить без перезагрузки страницы.

    Помогите пожалуйста это реализовать. Хотя бы какими то краткими набросками кода
     
  2. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    gw1516 нравится это.
  3. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    ajax запрос вешаешь на переключение и всё
     
  4. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    gw1516 нравится это.
  5. gw1516

    gw1516 Активный пользователь

    С нами с:
    4 май 2017
    Сообщения:
    29
    Симпатии:
    0
    Спасибо! буду разбираться
     
  6. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    https://ru.vuejs.org/v2/guide/ (английская версия более актуальна)
    https://lodash.com/docs/4.17.5 - набор разных полезных плюшек

    Если захотите углубиться, то нужно будет ещё разобраться с webpack и установить nodejs. Vue, как показано в примере может работать и так, но webpack удобен для сборки проекта, после него на выходе получится один js-файл и один css-файл, при чем все будет собрано в кучу, минифицировано и готово к работе. В довесок есть ещё babel, который умеет переделывать js для старых браузеров, sass, с которым css становится проще и логичнее, всё это интегрируется в webpack, работает незаметно и налету. Можете так же ознакомиться с nuxtjs, с помощью которого можно делать полноценные SPA или даже обычные сайты, т.к. он умеет рисовать страничку на сервере и отдавать уже в готовом виде (поисковиками индексируется нормально).

    Короче, тема обширна, по началу вас могут одолевать вопросы типа "тут столько всего, как в этом разобраться" и "зачем это нужно", но как только разберетесь, поймете что это в разы удобнее и быстрее, да и толковых разработчиков умеющих во всё это чуть меньше чем хотелось бы. Дерзайте ))
     
    gw1516 нравится это.
  7. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    Преуменьшаешь ты сильно .... там две очень обширные темы по фронту и енду, даже сделать так же как ты в примере не просто, я кое-как осваиваю маленькую библу джиквыри :)
     
  8. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    *экскурс в старые добрые времена * Только сильно не увлекайся. jQuery появилась в те смутные времена, когда api отличалось от браузера к браузеру и вообще было не слишком удобно. Чувак привел всё к единому стандарту, добавил кучу полезностей и в целом все было круто, но появился целый класс jquery-программистов, которые на чистом js действительно не способны ничего написать )

    Сейчас же многие jquery-фичи уже вполне реализованы нативно (.querySelector() умеет выбирать по DOM`у почти так же), некоторые лучше (axios предоставляет единый интерфейс для http-запросов как на клиенте, так и на сервере), совместимость со стандартами решается babel`ем и т.д.. Короче, знать полезно, т.к. хрен когда эта ваша джиквыри помрет, но приучать себя к нему не надо, он как php, не слезешь потом )

    А вообще, тут всё не так страшно как кажется. Последние стандарты js действительно удобны и значительно улучшили язык, sass с его миксинами, переменными и прочими плюшками делает css намного мощнее и гибче, главное правильно приготовить вебпак и бонусом у тебя ещё и live reload будет, отрисовывая каждое изменение сразу в браузере, а когда надо - соберет всё, приведет к браузерному js/css, минифицирует и сложит в пару файликов.

    Тут просто важно понять, что фронт перерос View из MVC и стал полноценным таким приложением ))
     
    gw1516 и keren нравится это.
  9. gw1516

    gw1516 Активный пользователь

    С нами с:
    4 май 2017
    Сообщения:
    29
    Симпатии:
    0
    Не знаю правильно это или нет, но что бы вывести все товары из БД, я изменил часть кода в вашем примере примерно так:
    Код (Text):
    1.  
    2. items: [<?
    3. foreach ($products as $prod) {
    4. ?>
    5. {name: '<?=$prod['model']?>',id: '<?=$prod['id']?>', total: 6, price: <?=$prod['price']?>, amount: 0},<?}?>],
    И нашел функцию для чекбокса, которая отправляет айдишник товара для добавления или удаления из БД при нажатии на чекбокс

    Код (Text):
    1. $('.cid').change(function(){
    2.    
    3. if(this.checked) {            
    4. var  cid = $(this).attr("cid");
    5.  
    6. $.ajax({
    7.   type: "POST",
    8.   url: "/test.php",
    9.   data: "cid="+cid,
    10.   dataType: "html",
    11.   cache: false,
    12.   success: function(data) {
    13.   return false;
    14.       }
    15. });
    16. }
    17. else{
    18.      var  kid = $(this).attr("cid");
    19.  
    20. $.ajax({
    21.   type: "POST",
    22.   url: "/test.php",
    23.   data: "kid="+kid,
    24.   dataType: "html",
    25.   cache: false,
    26.   success: function(data) {
    27.   return false;
    28.       }
    29. });  
    30.    
    31. }
    32. });
    Все хорошо работает, но опять же не знаю, может быть это можно было сделать как то более грамотно, без использования jquery или ajax.
    Осталась 1 проблема: нужно что бы при перезагрузке страницы выбранные чекбоксы оставались выбранными. Если я правильно понимаю, то нужно проверить какие товары добавлены в БД, и сделать выделенными соответствующие чекбоксы. Но как это сделать не совсем понимаю. Подскажите пожалуйста. И еще вопрос, как вообще средствами Vue.js сделать чекбокс выделенным по умолчанию?
     
  10. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    gw1516 и TeslaFeo нравится это.
  11. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    Да просто там лишь по дифолту, а в двух словах - плясать с dom и локальным хранилищем :)
     
  12. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    не, localstorage я взял потому, что поднимать для примера серверное api - это как то перебор ))

    А вообще, суть примера в том, что как раз с DOM плясать и не надо. Шаблон - декларативен на основе данных, меняешь их - меняется отображение.
     
    gw1516 нравится это.
  13. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    Да понятно что так что этак гемор :) C пхп и куками все намного проще, да и связаться с сервером через аякс ничего особо поднимать не надо :)
     
  14. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    поднимать не надо, а сервер я тебе где возьму, что бы к нему аяксом стучаться? )
     
    gw1516 и keren нравится это.
  15. gw1516

    gw1516 Активный пользователь

    С нами с:
    4 май 2017
    Сообщения:
    29
    Симпатии:
    0
    Cделал все, что хотел, еще раз спасибо! Единственный минус, это то, что не работает в Internet explorer =(
     
  16. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    от IE даже майкрософт отказался )
     
  17. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    осталось дождаться, когда люди откажутся)