Szybka zmiana pozycji produktów w kategorii – PrestaShop 1.5
Zdjęcie opisuje to co robią poniższe linijki kodu… Zamienia strzałeczki na inputy oraz dodaje przycisk „Zapisz pozycje”. Modyfikacja w znacznym stopniu potrafi przyśpieszyć przeorganizowanie produktów kategorii…
Instrukcja „instalacji”…
Ten fragment kodu powinien wylądować w pliku /js/admin.js w bloku $(document).ready(function() { który zaczyna się mniej więcej w linii 662. Chodzi po prostu o to żeby ten kod wykonał się wtedy kiedy dokument się załaduje. jQuery nam w tym pomaga.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
var posChange = false; $('input[name=submitBulkupdatepositionsproduct]').hide(); $('table#product tr').each(function() { var id = $(this).attr('id'); if (id == undefined) return; $(this).unbind(); if (id.match(/tr_[0-9]+_[0-9]+_[0-9]+/)) { // tr_2_2_0 id = id.split('_'); $td = $(this).find('#td_' + id[1] + '_' + id[2]+'.dragHandle'); if ($td.length == 0) return; $td.wrapInner('<div style="display:none" />'); $td.append('<input type="text" style="width:30px" name="pp[' + id[1] + '][' + id[2] + ']" value="' + id[3] + '" />'); posChange = true; } }); if (posChange) { $('table#product').removeClass('tableDnD').unbind(); $('input[name=submitBulkupdatepositionsproduct]').show().css({ float: 'right', margin: '0 50px 0 0' }); } |
Teraz trzeba jeszcze zmodyfikować plik AdminProductsController. Można to zrobić albo bezpośrednio w tym kontrolerze (nie polecam) albo utworzyć odpowiedni plik w katalogu /override. W konstruktorze trzeba dodać coś takiego…
1 |
$this->bulk_actions['updatepositions'] = array('text' => $this->l('Save positions')); |
Linijka ta dodaje ten przycisk „Save positions” oraz zapewnia obsługę kodu zapisującego nowe pozycje czyli:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
protected function processBulkUpdatepositions() { $products_positions = Tools::getValue('pp'); if (!empty($products_positions) && is_array($products_positions)) { foreach($products_positions as $id_category => $category) { foreach($category as $id_product => $position) { Db::getInstance()->execute(' UPDATE `'._DB_PREFIX_.'category_product` SET `position` = '.(int)$position.' WHERE `id_product` = '.(int)$id_product.' AND `id_category`='.(int)$id_category); } Product::cleanPositions($id_category); } } } |
Tę funkcje należy dodać i w sumie tyle… Nie jest to najładniejsze rozwiązanie i sam z niego dumny nie jestem… Ale działa! I jest w miarę bezpieczne… Więc jeżeli ktoś ma ochotę i potrzebę proszę śmiało korzystać z moich doświadczeń…
1 Komentarz
Mariusz
7 stycznia 2014A tą druga część opsiu można prosić jaśniej ? Jak plik stworzyć i gdzie go umieścić?