- Брояч
WT форуми -> PHP MySQL ASP.NET -> Брояч
Създайте нова тема Напишете отговор 
Автор Съобщение
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 80
Bonus: 172
Мнения: 1577
Мнение 26/09/2017 9:47 am     Брояч Отговорете с цитат


Здравейте, извинявам се за заглавието, но не можах да измисля нещо което описва проблема.

Имам view в което визуализирам продукти и всеки продукт има брояч(не знам дали това е правилно наименование) за количество. Ето пример.

Id: 1 | Title: Product 1 | Quantity: -1+
Id: 2 | Title: Product 2 | Quantity: -1+

Искам когато се натисне плюс на дадения продукт, броячът да се увеличава с едно и да се упдейтва поле в базата данни. За минус обратното.

Принципно го бях направил така.

View
PHP code:

<form method="post"">

<?php
foreach ($this->_image as $value)
{
?>

<input name="idProduct" type="hidden" value="<?php echo $value['id']; ?>"/>
<input name="minus" type="submit" value="-"/>
<span id="counter"><?php echo $value['counter']; ?></span>
<input name="plus" type="submit" value="+"/>

<?php
}
?>

</form>


Controller
PHP code:

$id = $this->_normalize->post('idProduct');
$plus = $this->_normalize->post('plus');
$minus = $this->_normalize->post('minus');

if (isset($plus))
{
$this->_cartModel->cartUpdatePlus($id);
}
if (isset($minus))
{
$this->_cartModel->cartUpdateMinus($id);
}



Проблемът е че работи само за единия продукт. В смисъл не идва ид-то според това на кой продукт натискам плюса или минуса, ами идва само последното ид. Как да оправя този проблем?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
djman
Активен
Активен

Регистриран на: 12/09/2009 10:07 am

Support: 103
Bonus: 196
Мнения: 2768
Мнение 26/09/2017 9:56 am      Отговорете с цитат


<form action="/url/to/update/$id" method="post">
твоето вю с бутоните за + и - тук
</form>

всичко това в for loop-a, който имаш. Съответно в контролера вече ще имаш $id.

Съвет 1 - ID-тата трябва да са уникални в една страница - <span id="counter">

Съвет 2: не използвай { } когато работиш в темплейта. Ето така е по-красиво Smile

<?php foreach($this as $that): ?>
<html tags><?=$that ?>
<?php endforeach; ?>
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Fakeheal
Support
Support

Регистриран на: 17/04/2010 8:37 am

Support: 341
Bonus: 680
Мнения: 2562
Мнение 26/09/2017 10:03 am      Отговорете с цитат


Това, което написа @djman е много яко.

Само ще добавя, че всъщност ти се ъпдейтва един продукт, защото имаш много полета с едно и също име (name="idProduct") и взима последното такова поле, когато събмитваш формата.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 80
Bonus: 172
Мнения: 1577
Мнение 26/09/2017 10:06 am      Отговорете с цитат


Edit:

Благодаря получи се.
Оправих и нещата за които ми даде съвет. Наистина е по-прегледно Smile .
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
deam0n
Tourist Defender

Регистриран на: 01/10/2005 6:33 pm

Support: 198
Bonus: 949
Мнения: 2939
Мнение 27/09/2017 8:28 pm      Отговорете с цитат


Ето едно по-различно решение с vue.js (https://vuejs.org/)

Малко по-опростена версия ( без ajax ) можеш да видиш тук - https://jsfiddle.net/wv74matg/1/ .

Зареждаме vuejs
<script src="http://cdnjs.cloudflare.com/ajax/libs/vue/1.0.24/vue.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue-resource/0.7.0/vue-resource.js"></script>


Използваме м v-for, за да създадем списък с данни от масив. ( https://vuejs.org/v2/guide/list.html ). Това един вид foreach цикъл, но във vue.js .

<table id="template-item">
    <tr v-for="item in items" is="item" :key="item.id">
      <td class="col-md-6">
        {{ item.title}}
      </td>
      <td>
        {{ item.count }}
      </td>                           
      <td> 
        <a @click="plusItem(item.id)" href="#" title="+">+</a>
        <a @click="minusItem(item.id)" href="#" title="-">-</i></span></a>
<a @click="deleteItem(item.id)" href="#" title="-">Delete</i></span></a>
  </td>
  </tr>
</table>


Данните подаваме чрез метода fetchItems ( в случая http://site.com/api/items връща json масив в данните от db ), който се изпълнява при зареждане или като отговор при извикването на другите методи. addItem и removeItem съответно добавят/изваждат предмет. deleteItem трие предмета.


<script type="text/javascript">
                    new Vue({
                        el: '#template-item',
                        data: {
                            items: []
                        },
                        ready: function () {
                            this.fetchItems()
                        },
                        methods: {
                            fetchItems: function () {
                                let vm = this;
                                items_url = '/api/items'
                                this.$http.get(items_url)
                                    .then(function (response) {
                                        vm.$set('items', response.data.data)
                                    });
                            },
                            plusItem: function (item_id) {
                                let vm = this;
                                item_url = "/api/plus/"+item_id
                                this.$http.get(item_url)
                                    .then(function (response) {
                                        this.fetchItems();
                                    });
                            },
                            minusItem: function (item_id) {
                                let vm = this;
                               item_url = "/api/minus/"+item_id
                                this.$http.get(item_url)
                                    .then(function (response) {
                                        this.fetchItems();
                                    });
                            },
                            deleteItem: function (item_id) {
                                let vm = this;
                               item_url = "/api/delete/"+item_id
                                this.$http.get(item_url)
                                    .then(function (response) {
                                        this.fetchItems();
                                    });
                            }
                        }
                    });   
</script>


Само трябва да си навържеш PHP-то да ти прави съответните действия на добавяне, изваждане и триене спрямо ид-то на записа ( /api/items, /api/plus, /api/minus, /api/delete )
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
lam3r4370
Активен
Активен

Регистриран на: 20/08/2008 6:12 pm

Support: 131
Bonus: 244
Мнения: 3410
Мнение 27/09/2017 9:22 pm      Отговорете с цитат


Защо не променяш масива директно, а правиш заявка всеки път?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
Покажи мнения от преди:    
Създайте нова тема   Напишете отговор    web-tourist.net Форуми -> PHP MySQL ASP.NET Часовете са според зоната GMT + 2 Часа
Страница 1 от 1


 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети