Strony:

Dodatkowe pole wysyłane przy zakupie

jakub_kaczmarek

Avatar: jakub_kaczmarek

2013-06-25 08:57

Mam taki problem, otóż dodałem kilka dodatkowych pól do opisu produktu, i teraz chciałbym, aby wartość tych pól była również wysyłana na maila, podczas gdy user kliknie "zamawiam produkt"

» Quick.Cart v6.x

openzibi

Avatar: openzibi

2013-06-25 09:34

Dodatkowe pole musisz przekazać do funkcji wysyłającej mail.
Może jest prostszy sposób ale u mnie wygląda to mniej więcej tak:
1. w funkcji saveBasket dodajesz swoje zmienne
2. w funkcji addOrder równiez dodajesz swoje zmienne
3. uzupełniasz funkcje sendEmailWithOrderDetails
4. uzupelniasz _fields.php

StudioStrona - rhh.pl

jakub_kaczmarek

Avatar: jakub_kaczmarek

2013-06-26 12:45

A czy mógłbym prosić o podanie nazw plików, w których znajduje się funkcja: saveBasket, addOrder oraz sendEmailWithOrderDetails ?

jakub_kaczmarek

Avatar: jakub_kaczmarek

2013-06-26 13:12

Znalazłem już funkcje, ale nie bardzo wiem w jaki sposób dodać moje zmienne.
Mam tutaj ta funkcję: [code]public function saveBasket( $aData, $bAdd = null ){
if( isset( $aData ) && is_array( $aData ) ){
$iOrder = $_SESSION['iCustomer'.LANGUAGE];
$oFFS = FlatFilesSerialize::getInstance( );
$oProduct = Products::getInstance( );

$aBasket = $oFFS->getData( DB_ORDERS_TEMP );

foreach( $aData as $iProduct => $iQuantity ){
if( $iQuantity > 0 && $iQuantity <= $GLOBALS['config']['max_product_quantity'] && is_numeric( $iQuantity ) && isset( $oProduct->aProducts[$iProduct] ) ){
$iQuantity = trim( $iQuantity );

if( isset( $aBasket[$iOrder][$iProduct] ) ){
if( isset( $bAdd ) ){
$iSum = ( $aBasket[$iOrder][$iProduct]['iQuantity'] + $iQuantity );
if( $iSum > 0 && $iSum <= $GLOBALS['config']['max_product_quantity'] ){
$aBasket[$iOrder][$iProduct]['iQuantity'] += (int) $iQuantity;
$bChanged = true;
}
}
else{
if( $iQuantity != $aBasket[$iOrder][$iProduct]['iQuantity'] ){
$aBasket[$iOrder][$iProduct]['iQuantity'] = (int) $iQuantity;
$bChanged = true;
}
}
}
else{

$aBasket[$iOrder][$iProduct] = Array( 'iQuantity' => (int) $iQuantity, 'fPrice' => $oProduct->aProducts[$iProduct]['mPrice'], 'sName' => $oProduct->aProducts[$iProduct]['sName'], ' nip: ' => $sData2[$iProduct]);
$bChanged = true;
$bDeleteOldOrders = true;
}


}
} // end foreach

if( isset( $bChanged ) ){
if( isset( $bDeleteOldOrders ) ){
$iTime = time( );
foreach( $aBasket as $iKey => $aValue ){
if( $iTime - substr( $iKey, 0, 10 ) >= 259200 )
unset( $aBasket[$iKey] );
} // end foreach
}

if( isset( $aBasket ) )
$oFFS->saveData( DB_ORDERS_TEMP, $aBasket );
}
}

}[/code] a moje pole, któe chcę dodać nazywa się sField2, a więc wystarczy że dodam $sField2 czy muszę jeszcze w jakimś warunku to umieścić?

openzibi

Avatar: openzibi

2013-06-28 00:02

Zerknij na tablicę. Tam gdzie jest sName.

StudioStrona - rhh.pl

jakub_kaczmarek

Avatar: jakub_kaczmarek

2013-07-01 09:35

Masz na myśli ten fragment:
else{

$aBasket[$iOrder][$iProduct] = Array( 'iQuantity' => (int) $iQuantity, 'fPrice' => $oProduct->aProducts[$iProduct]['mPrice'], 'sName' => $oProduct->aProducts[$iProduct]['sName'], ' nip: ' => $sData2[$iProduct]);
$bChanged = true;
$bDeleteOldOrders = true;
}

?

Zmieniłem na ten, czyli dodałem moje pole:

else{

$aBasket[$iOrder][$iProduct] = Array( 'iQuantity' => (int) $iQuantity, 'fPrice' => $oProduct->aProducts[$iProduct]['mPrice'], 'sName' => $oProduct->aProducts[$iProduct]['sName'], 'sField2' => $oProduct->aProducts[$iProduct]['sField2'], ' nip: ' => $sData2[$iProduct]);
$bChanged = true;
$bDeleteOldOrders = true;
}

jakub_kaczmarek

Avatar: jakub_kaczmarek

2013-07-01 10:38

Nie wiem tylko w jaki sposób uzupełnić funkcję sendEmailWithOrderDetails

jakub_kaczmarek

Avatar: jakub_kaczmarek

2013-07-01 12:04

Widzę że wgl moje pole sField2 nie jest przekazywane dalej (w tym podsumowaniu zamówienia) wyświetlam: <dt class="email">$lang[sField2]:</dt><dd class="email">$aOrder[sField2]</dd> ale się nie wyświetla, a więc tak jakby coś źle zrobiłem w funkcji saveBasket

openzibi

Avatar: openzibi

2013-07-01 20:52

Pełnego rozwiązania nie mogę Ci podać. Była to płatna modyfikacja dla innego klienta i byłoby nie w porządku gdybym podał tu pełne rozwiązanie.
Mała podpowiedź.
1. Zerknij na mój pierwszy post. Tam są cztery punkty, w tym ważny 2 i 4
2. W _fields.php zmianę zrobiłem nie w jednym ale w 2 lub 3 miejscach.

StudioStrona - rhh.pl

jakub_kaczmarek

Avatar: jakub_kaczmarek

2013-07-02 10:48

Nie, nie. Nawet bym nie chciał pełnego rozwiązania, bo bym miał zero frajdy ;)
Nie rozumiem takiego zapisu: $oProduct->aProducts[$iProduct]['sField3'] tzn. dlaczego nieraz jest o, a lub i przed Product?

Wydaje mi się że w _fields.php podaję dobrze, tak samo w funkcji saveBasket, natomiast w funkcji addOrder, dodaję tak: 'sField3' => $aData['sField3']

I dodałem, aby wyświetlało wartość tego pola (wartość jest podawana przez admina w momencie dodawania produktu), w kroku 3 przy składaniu zamówienia, ale tam też nie wyświetla.

openzibi

Avatar: openzibi

2013-07-02 11:41

Wcześniej pisałeś sField2 a teraz sField3

StudioStrona - rhh.pl

jakub_kaczmarek

Avatar: jakub_kaczmarek

2013-07-03 10:12

Wiem, wiem. Ale w każdym pliku podaję sField3 - wcześniej po prostu nie to pole chciałem wysłać.

jakub_kaczmarek

Avatar: jakub_kaczmarek

2013-07-08 09:32

A w plikach typu database/pl_product_files.php nic nie trzeba dodawać?

jakub_kaczmarek

Avatar: jakub_kaczmarek

2013-07-08 10:16

Cały czas mam problem z funkcją saveBasket.
Ogólnie sprawdziłem na przykładzie fPrice - faktycznie jak usunę to pole z funkcji saveBaket - cena nie idzie do koszyka, dodaje więc do tej tablicy moje pole sField3, dokładnie w tych samych miejscach w pliku _field.php gdzie znajduje się fPrice, dodaję sField3, ale mimo to moje pole nie jest przekazywane do kroku order_step3.tpl

jakub_kaczmarek

Avatar: jakub_kaczmarek

2013-07-08 11:11

Udało mi się zrobić z funkcją saveBasket, pole sField3 jest przekazywane, jednak co w przypadku gdy klient dokona zakupu 2 lub więcej produktów, które mają pole sField3? Bo wtedy idzie tylko wartość pola ostatniego produktu dodanego do koszyka, a musiałby iść z wszystkich produktów.

openzibi

Avatar: openzibi

2013-07-08 22:46

Coś źle zrobiłeś lub ja nie rozumiem Twoich zmian. Zerknij na to zdjęcie http://www.rhh.pl/files/mahla_sku.jpg
Tu Klient zamówił dodatkowe pole o nazwie SKU (indywidualny kod towaru) Każdy produkt ma swój własny kod SKU nadawany przez Klienta w momencie tworzenia produktu (lub później)
Ten kod przechodzi przez cały proces zamówienia (ilość produktów w koszyku nie ma tu znaczenia). Mało tego, "idzie" dalej bo widać go na generowanej fakturze (dodatkowa opcja w tym projekcie)
To wszystko (za wyjątkiem generowania faktury pdf) zostało zrobione w ramach opisanych na początku 4 punktów.

StudioStrona - rhh.pl

jakub_kaczmarek

Avatar: jakub_kaczmarek

2013-07-12 08:51

Ja z kolei dodaję to pole (numer porównawczy) w tym miejscu: http://jakubkaczmarek.unixstorm.org/forumweb/ag.jpg czyli trzeba kliknąć na konkretny produkt.
I teraz tak: (sField3)
1. W funkcji saveBasket zmodyfikowałem tylko linijkę z tablicą, czyli:
$aBasket[$iOrder][$iProduct] = Array( 'iQuantity' => (int) $iQuantity, 'fPrice' => $oProduct->aProducts[$iProduct]['mPrice'], 'sName' => $oProduct->aProducts[$iProduct]['sName'], 'sField3' => $oProduct->aProducts[$iProduct]['sField3'], 'nip: ' => $sData2[$iProduct]);

2. W funkcji addOrder zmodyfikowałem również tylko tablicę:
file_put_contents( DB_ORDERS_PRODUCTS, serialize( compareArrays( $this->aOrdersProductsFields, Array( 'iElement' => (int) $iElement++, 'iOrder' => $aForm['iOrder'], 'iProduct' => $aData['iProduct'], 'iQuantity' => $aData['iQuantity'], 'fPrice' => $aData['fPrice'], 'sName' => $aData['sName'], 'sField3' => $aData['sField3'] ) ) )."\n", FILE_APPEND );

3. Na razie pomijam.

4. W plik _fields.php dodałem do następujących tablic:
$aPaymentsShippingFields
$aOrdersFields
$aOrdersExtFields
$aOrdersProductsFields
$aOrdersTempFields

5. W podsumowaniu (czyli tam gdzie wyświetla się tylko jeden numer porównawczy), wyświetlam go w taki sposób:
<dt class="email">$lang[sField3]:</dt><dd class="email">$aData[sField3]</dd> - i może tu jest pies pogrzebany?

jakub_kaczmarek

Avatar: jakub_kaczmarek

2013-07-12 09:36

No tak... mój błąd. Po prostu w złym miejscu wyświetlałem numer. Czyli wszystko działa, oprócz puszczania numeru na maila.

openzibi

Avatar: openzibi

2013-07-12 11:48

Wyświetla się na stronie a nie ma w mailu? Ja bym nie rezygnował z punktu 3, który podałem :)

StudioStrona - rhh.pl

jakub_kaczmarek

Avatar: jakub_kaczmarek

2013-07-12 12:45

Tzn. podzieliłem to Sobie na dwa etapy, a wiec najpierw niech chociaż uda mi się zapisywać i przekazywać dalej - udało się, dzięki Twojej pomocy :)
A drugi etap - wysyłanie, no właśnie domyślam się, że musiałbym przekazać tą zmienną do zmiennych funkcji e-mail w pierwszej linii:
public function sendEmailWithOrderDetails($sFile, $iOrder, $bSendToCustomer = null ){

No ale jak dodam $aData[sField3] to na stronce wyskakuje error, a jak dodam samo $aData to i tak to nic nie daje.

Strony:
Do góry
o nas | kontakt