Jump to content
  • 0

Potwierdzenie zamówienia - dopisanie wartości zamówienia do innej tabeli


mudol

Question

Witam, potrzebuję info, w którym pliku jest dokładnie zapisywanie zamówienia z wszystkimi informacjami, potrzebuje pod tym dopisać kolejne zapytania, które mi te informacje o zamówieniu zapiszą do kolejnej tabeli.

 

Z góry dzięki za pomoc.

 

presta 1.5

Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 0

raczej takiej zmiany kontroerow bym nie polecal. bardziej bezpiecznie bedzie stworzenie modulu, ktory w hook np. orderConfirmation wywolywalbym osobne zapytanie (updade czy insert). prostsze, bezpieczniejsze i nie kolidujace np. przy upgrade do nowszych wersji. (bo i nieraz zachowe pewne funkcje w ./override beda wymagaly tez aktualizacji, tym bardziej te 'zakupowe')

Link to comment
Share on other sites

  • 0

Aktualizacja jest najmniejszym problemem, sklep już jest tak zmieniony, że jest odgórny zakaz ;) Niestety nie potrafię modułów pisać więc zostaje właśnie ten sposób aby dodać kolejne linie w miejscu gdzie zamówienie jest zapisywane do bazy.

Link to comment
Share on other sites

  • 0

jest to na tyle prodty modul, ze wystarczy jakikolwiek z tuttariali podstawowych aby rozgrysc jak to ugrysc :D

 

podstawowe function(): typu _install() i hook($params), niemasz tutaj zadnego displaya, wiec nie ma potrzeby kobinacji. dane do odczytu ciagniesz z $params, jak dobrze pamietam $params->id_order  i tyle.

 

uwierz mi, prosciej, szycbiej i bezpieczniej bedzie napisac taki modul (banalnie prosty) niz poszukiwac zapytania (a przy samym zamowieniu jest ich chyba pare w paru funkcjach, w zaleznosci od tego co i kiedy chcesz zapisac do bazy), grzebac sie w kodzie, robic bledy i pozniej je mozolnie wyszukwiac, a modul... zawsze mozna wylaczyc albo zaczac od poczatku ;)

 

EDIT:

a poznaj chamskie serce ;) mam dzisiaj dobry dzien, oj, chyba bardzo dobry bo to moj pierwszy gotowiec od setek postow, nie tylko na tym forum :D

 

tworzysz katalog 'ordertomysql', tworzysz plik .'ordertomysql.php', wrzucasz co ponizej

<?php

if (!defined('_PS_VERSION_'))
	exit;


class OrderToMySQL extends Module
{
 	function __construct()
 	{
 	 	$this->name = 'ordertomysql';
 	 	$this->tab = 'other';
		$this->need_instance = 0;

		parent::__construct();

		$this->displayName = $this->l('Order to MySQL');
		$this->description = $this->l('Save data from order to MySQL');

		$this->version = '1.0';
		$this->author = 'design4VIP';
		$this->error = false;
		$this->valid = false;
 	}

 	function install()
 	{
 	 	Db::getInstance()->execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'ordertomysql`');
		Db::getInstance()->execute('
		CREATE TABLE `'._DB_PREFIX_.'ordertomysql` (
		`id_order` int(10),
		`more` int(10) NULL,
		PRIMARY KEY (`id_order`)
		) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8;');

		if (parent::install() == false OR $this->registerHook('orderConfirmation') == false)
 	 		return false;
        return true;
  	}

	function hookdisplayOrderConfirmation($params)
	{
		global $cookie, $smarty;

		$id_order= $_GET['id_order'];

		$id_cart=$params['objOrder']->id_cart;


		if(count($is) == 0)
		{
			Db::getInstance()->insert('ordertomysql', array(
							'id_order' => $id_order,
							'more' => $more,
			));
		} else {
			Db::getInstance()->execute('UPDATE `'._DB_PREFIX_.'ordertomysql` SET
							`more` = \''.$more.'\',
							WHERE `id_order` = \''.$id_order.'\'');
		}
 	}
}

teoretycznie tyle ;)

 

powyzej masz jeszcze wzbokacenie o utworzenie nowej tabeli i rozpoznanie zapisu czy INSERT czy UPDATE. to juz mysle, ze ewentualnie przyda sie potomnym ;) zmieniasz tylko 'more' na swoje dane do odczytu i zapisu i powinno starczyc.

 

czy nie prosciej niz mozolne poszukiwania i edycje skomplikowanych JOIN w kontrolerach?

 

 

PS. pewne rzeczy kodu pisane na szybko z glowy, wiec jakby cos nie dzialalo to daj znac, bede przegladal dokladniej co i jak ;)

Edited by deejay3 (see edit history)
  • Like 1
Link to comment
Share on other sites

  • 0

Bóg Ci w dzieciach wynagrodzi ;)

 

Ogólnie to obecnie grzebie w controllers/front/OrderConfirmationController.php ale spróbuję Twojego sposobu co by mieć wiedzę na później. Jedna rzecz tylko jeszcze mnie nurtuje, powiedzmy że tą tabelę ordertomysql mam auto increment więc jak do tego zapytania Db::getInstance() dopisuję, 'id' => NULL, ?

Link to comment
Share on other sites

  • 0

Bóg Ci w dzieciach wynagrodzi ;)

 

Ogólnie to obecnie grzebie w controllers/front/OrderConfirmationController.php ale spróbuję Twojego sposobu co by mieć wiedzę na później. Jedna rzecz tylko jeszcze mnie nurtuje, powiedzmy że tą tabelę ordertomysql mam auto increment więc jak do tego zapytania Db::getInstance() dopisuję, 'id' => NULL, ?

 

oj, z tymi dziecmi to nie przesadzac bo skonczy sie "dzien dziecka" :D;)

 

 

patrzac na:

CREATE TABLE `'._DB_PREFIX_.'ordertomysql` (
		`id_order` int(10),
		`more` int(10) NULL,
		PRIMARY KEY (`id_order`)
		) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8;');

ustawiasz sobie tabele wedle uznania czystym zapytaniem mySQL. tyko pozniej musisz, jak chcesz 'auto', zmienic ponizsze zapytania insert i update pamietajac o increment. ale to juz czyste zapytania do bazy.

 

acha, powyzej masz jeszcze w kodzie dwie zmienne $id_order i $id_cart w zaleznosci od tego co chcesz odczytac (zapisac do bazy z zamowienia) zasadnoczo wszystkie dane zamowienia sa w koszykach, dlatego tez ta zmienna wyszczegolnilem ale w samym kodzie nie jest uzywana. no i jeszcze jedno, bo juz widze miny innych deweloperow odnosnie "brzydkiego' odczytu $id_order, ale ten jest najrostszy, biorac pod uwage, ze ta zmienna przekazywana jest linia adresowa orderconfirmation. mozna by tu jeszcze owarunkowac itd. ale nie chcialem juz za wiele mieszac w kodzie. z czasem jak sie tym pobawisz to sam dojdziesz do tego co i skad ;) 

 

a odnosnie nauki pisania modulow zaniast grzebania sie w kontrolerach... oj, ulatwia zycie i srednio skraca czas takich drobnicowek o kilkadziesiat procent. ja np. praktykuje takie cos, ze robie sobie takiego ogolnego modula i w nim wrzucam wszelkie zmiany tego typu. a hookow jest tyle do wyboru w presta, ze prawie w kazde miejsce mozna sie zdalnie dostac.

  • Like 1
Link to comment
Share on other sites

  • 0

Id_cart się przyda bo chcę poszczególne produkty dorzucać do tej tworzonej tabeli i właśnie, jest jakiś łatwy sposób na wyechowanie wszystkich produktów wraz z cenami z tego zamówienia?

 

A co do modułu, Twój sposób działa, moduł się zainstalował i zapisał dane do tabeli tak więc wypiję za Twoje zdrowie dziś wieczorem ;) Wiedza nie gryzie ale czasem trudno się za to zabrać szczególnie od podstaw. Choć pewnie z czasem jak głowa coś łyknie tej wiedzy to będzie łatwiej to wykorzystywać.

Edited by mudol (see edit history)
Link to comment
Share on other sites

  • 0

z produktami to wrzuc sobie 'dumpa' w module na $params np. var_dump($params); i gdzies zwracane beda w array(). dalej odczytasz je przez foreach(), ewentualnie mozsz pokombinowac (i to by byla porapwna wersja, ale bardziej wymagajaca ale poznana o wiele prostsza :D ) z Products::getProducts() i tu odniesc sie do $cart (jak wynika z przedrostka funckja dostepna w kontrolerze Products.php - tu zobacz jakie paramtry sa potrzebne do wywolania).

 

a co do nauki, na to nigdy nei jest za pozno. ja nie jestem programista, nie konczylem zadnych tego typu szkol itp... jestem geodeta :D ale zawzietym ;) programowanie zaczynam od celu - ustalam sobie w glowie czy na kartkach jakis cel, ze to ma dzialac tak a nie inaczej no i... google... google... uporczywie szukam wskazowek itp... pozniej chwila kombinacji - i nie ma mozliwosci, zeby nie dzialalo po mojemu ;) tak nauczylem sie wszystkiego co umiem... i to wcale nie przez dlugo czas, bo zasadnoczo takie "profesjonalne" spotkanie z programowaniem to zaczynalem wraz z presta jakies 3 lata temu? gdzies na przelomie wersji 1.4.4.1 ;) i nprawde, gdziebanie w kontrolerach to ostatecznosc. a jak juz to delikatne zmiany wrzucane w override. 90% takich zmian mozna zalatwic hookami (czyt. dzieki uzyciom modulow)

Edited by deejay3 (see edit history)
  • Like 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...