Skocz do zawartości

Witamy na polskim forum Contao
Zarejestruj się teraz, aby skorzystać ze wszystkich funkcji forum. Kiedy się zalogujesz, będziesz mógł tworzyć tematy, pisać posty, rozdawać punkty reputacji, korzystać z prywatnych wiadomości i zarządzać swoim profilem. Jeśli posiadasz już konto, zaloguj się - w przeciwnym wypadku zarejestruj się już teraz!
Zdjęcie

Update pola w bazie


  • Zaloguj się, aby dodać odpowiedź
48 odpowiedzi w tym temacie

#1
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
Witam
Mam w module Isotope stworzony atrybut pt "Ilość w magazynie". Jest to pole tekstowe. Mam to w BE przy obsłudze towarów, a wyswietlam w FE. Taka informacja dla klienta. I to na razie wystarcza. Chciałbym jednak żeby ilość danego produktu była automatycznie aktualizowana po zakupie, coby nie trzeba z ręki tego pilnować i poprawiać. Nie chce pisać jakeigoś modułu pt "Warehouse managenent" chodzi tylko o update tego jednego pola w bazie po zakupie.

Jak mogę to rozwiązać?

Pozdr
  • 0

#2
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
Coś takiego:

<?php
 
// config/config.php
$GLOBALS['ISO_HOOKS']['postCheckout'][] = array('MyIsotope', 'udpateQuantity');
 
// MyIsotope.php
class MyIsotope extends System
{
   public function updateQuantity($objOrder, $arrItemIds, $arrData)
   {
	  $this->Database->execute("UPDATE tl_iso_products SET quantity=quantity-1 WHERE id IN (" . implode(',', array_map($arrItemIds)) . ")");
   }
}

  • 0

Codefog - Contao web development


#3
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
Dzięki Kamil za podpowiedź. Siadłem własnie do tego, niestety dostaje komunikat:
"Fatal error: Call to undefined method MyIsotope::udpateQuantity() in D:\WWW\lm\system\modules\isotope\IsotopeOrder.php on line 359"

zupdatowałem pliki:
system/config/config.php
a tą nową klasę MyIsotope wrzuciłem zarówno do nowego pliku MyIsotope.php jak i do Isotope.php, i bez skutku :( (raz tak, raz tak)

Nie zna takiej metody jak update Quantity :(
  • 0

#4
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
1. Tworzysz nowy folder /system/modules/isotope_myisotope
2. Tworzysz w nim plik config/config.php o treści w poprzednim poście
3. Tworzysz w nim plik MyIsotope.php o treści w poprzednim poście
  • 0

Codefog - Contao web development


#5
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
Ok, a muszę po tych operacjach robić update bazy?
  • 0

#6
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
Zrobione, nawet profilaktycznei zaktualizowałem bazę i niestety ciągle to samo:
"Fatal error: Call to undefined method MyIsotope::udpateQuantity() in D:\WWW\lm\system\modules\isotope\IsotopeOrder.php on line 359"

:(
  • 0

#7
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
Miałem literówkę w pierwszym poście ;)

 
// config/config.php
$GLOBALS['ISO_HOOKS']['postCheckout'][] = array('MyIsotope', 'updateQuantity');
 

  • 0

Codefog - Contao web development


#8
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
poprawione i teraz mam:
"Fatal error: Call to a member function execute() on a non-object in D:\WWW\lm\system\modules\isotope_myisotope\MyIsotope.php on line 7"
  • 0

#9
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski

 

// MyIsotope.php

class MyIsotope extends System

{

   public function updateQuantity($objOrder, $arrItemIds, $arrData)

   {

          Database::getInstance()->execute("UPDATE tl_iso_products SET quantity=quantity-1 WHERE id IN (" . implode(',', array_map($arrItemIds)) . ")");

   }

}


  • 0

Codefog - Contao web development


#10
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
:)
Dalej błędy: dwa warningi:
"Warning: array_map() expects at least 2 parameters, 1 given in D:\WWW\lm\system\modules\isotope_myisotope\MyIsotope.php on line 7"
"Fatal error: Uncaught exception Exception with message Query error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 (UPDATE tl_iso_products SET iloscwmagazynie=iloscwmagazynie-1 WHERE id IN ()) thrown in D:\WWW\lm\system\libraries\Database.php on line 686"
  • 0

#11
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
i drugi warning:
"Warning: array_map() expects at least 2 parameters, 1 given in D:\WWW\lm\system\modules\isotope_myisotope\MyIsotope.php on line 7"
  • 0

#12
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski

 

// MyIsotope.php

class MyIsotope extends System

{

   public function updateQuantity($objOrder, $arrItemIds, $arrData)

   {

          Database::getInstance()->execute("UPDATE tl_iso_products SET quantity=quantity-1 WHERE id IN (" . implode(',', array_map('intval', $arrItemIds)) . ")");

   }

}


  • 0

Codefog - Contao web development


#13
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
Juz nie rzuca błędami :)
Problem jest inny - nie działa warunek wyszukujący id danego produktu :(
implode(',', array_map('intval', $arrItemIds));
w związku z czym nie updatuje odpowiednich pól...
  • 0

#14
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
zobacz co wypluwa

print_r($arrItemIds);exit;

  • 0

Codefog - Contao web development


#15
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
coś takiego:
Array ( [148] => 26 )
i nic z tego nie jest ID kupowanego produktu ...
  • 0

#16
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
To może spróbuj tak

// MyIsotope.php
class MyIsotope extends System
{
   public function updateQuantity($objOrder, $arrItemIds, $arrData)
   {
          Database::getInstance()->execute("UPDATE tl_iso_products SET quantity=quantity-1 WHERE id IN (" . implode(',', array_map('intval', array_keys($arrItemIds))) . ")");
   }
}

  • 0

Codefog - Contao web development


#17
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
Też nic :(
teraz dostałem
Array ( [0] => 151 [1] => 152 )
przejrzałem bazę (tabele tl_iso_orders, tl_iso_order_items, tl_iso_order_downloads, tl_iso_products), niestety nie mam podobnych wartości :(,
W której tabeli przechowywane są dane dotyczące zamówień?
  • 0

#18
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
A sprawdź czy to nie są czasem ID rekordów z tl_iso_cart_items.
  • 0

Codefog - Contao web development


#19
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
tak, dokładnie tak.
są to ID rekordów z tej tabeli. :)
Jak patrze w bazę to są one widoczne przez cały czas zakupów, a znikają z bazy w momencie potwierdzenia zakupu... Dlatego nie mogłem ich namierzyć...
  • 0

#20
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
Czyli kod powinien wyglądać chyba tak

 
// MyIsotope.php
class MyIsotope extends System
{
   public function updateQuantity($objOrder, $arrItemIds, $arrData)
   {
          Database::getInstance()->execute("UPDATE tl_iso_products SET quantity=quantity-1 WHERE id IN (SELECT product_id FROM tl_iso_cart_items WHERE id IN (" . implode(',', array_map('intval', array_keys($arrItemIds))) . "))");
   }
}

  • 0

Codefog - Contao web development





Użytkownicy przeglądający ten temat: 1

0 użytkowników, 1 gości, 0 anonimowych użytkowników