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

isotope - przenoszenie danych z formularza


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

#1
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
Witam
Problem mam następujący - kupując jakiś towar w sklepie Isotope mogę się zalogować i moje dane są przenoszone do formularza koszyka (checkout) lub kontynuować zakupy bez logowania - wpisuję dane do faktury.
Teraz potrzebuję przywołać te dane w następnych krokach - ale nie z poziomu Contao używając tagów np ##billing_address## (czego używam w mailu potwierdzającym np) ale chciałbym te wartości przypisać do zmiennych php. Rozwiązanie pewnie dziecinnie proste, ale gdzieś mi to umyka.

Żeby rozjaśnić - chciałbym np Imię wpisane przez kupującego w formularzu umieścić w kolejnych krokach na innej stronie, przesłać do płatności ... cokolwiek.
Próbuję zatem pod zmienna np $imie przypisać wpisaną wartość, np:
$imie = $GLOBALS['TL_LANG']['tl_iso_addresses']['firstname'];
lub np
$imie2 = $this->Isotope->Cart->billingAddress['firstname'];
Nie działa, zmienna $imie pozostaje pusta.

proszę o podpowiedź jak mogę się do tego dobrać

Pozdrawiam
  • 0

#2
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
W pliku ModuleIsotopeCheckout.php masz taką metodę:

$arrInfo = $this->getCheckoutInfo();
print_r($arrInfo);
Wprwadzie nie wiem co ona zwraca i czy ci jakkolwiek pomoże, ale zawsze to jakiś trop :P
  • 0

Codefog - Contao web development


#3
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
a nie ma jakiegoś prostego sposobu sięgnięcia do tych danych?

Poprosił bym o coś w języku polskim, żebym zrozumiał ;)
  • 0

#4
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
Nikt nie podpowie?
Przyznaje że z programowaniem jestem na bakier, orientuję się w podstawach jedynie.

Pomocy pliss :)
  • 0

#5
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
Kolejny mój strzał to dodanie poniższego kodu zaraz na początku funkcji compile() w ModuleIsotopeCheckout.php:

$this->Template->setData($this->getCheckoutInfo());
Wtedy powinieneś w templatce mieć dostęp do danych poprzez $this->jakas_dana.
  • 0

Codefog - Contao web development


#6
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
Dzięki Kamil za podpowiedzi, niestety nie działa :(
Dodanie linijki kodu w compile powoduje że krok wcześniej czyli w order review znikają mi dane dotyczące osoby zamawiającej (billing details). Potem zmienne też nie są wpisywane :(
  • 0

#7
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
Bo czy dobrze rozumiem:
wpisuję dane do formularza z danymi - są one wrzucane wszystkie do jednego worka (this->Template->info = deserialize($arrOrder['checkout_info'], true);) i tak potem wyświetlane w orderdetails i order review :
<?php foreach( $this->info as $type => $data ): ?>
<div class="info_container <?php echo $type . $data['class']; ?>">
<h3><?php echo $data['headline']; ?></h3>
<div class="info"><?php echo $data['info']; ?></div>
</div>
<?php endforeach; ?>

A czy nie można by pójść tutaj w drugą stronę i rozbić to znów (unserialize)

Teoretyzuję, bo jak wspomniałem nie jestem programistą, ale próbuję to jakoś rozgryźć.

Pozdr
  • 0

#8
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
A spróbuj zrobić tak. W ModuleIsotopeCheckout.php w każdej metodzie, która ma taką strukturę getXxxxxInterface, odnajdź skrawek kodu:

$objTemplate = new IsotopeTemplate('iso_checkout_xxx_method');
 
// i dodaj
$objTemplate->setData($this->getCheckoutInfo());
// lub
$objTemplate->setData($this->arrCheckoutInfo);
I sprawdź czy poniższy kod wypluwa to co powinien (w iso_checkout_xxx_method):

<?php $this->showTemplateVars(); ?>

  • 0

Codefog - Contao web development


#9
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
A może przez sesję da się odczytać te dane?

print_r($_SESSION['CHECKOUT_DATA']);
echo 'Hey ' . $_SESSION['CHECKOUT_DATA']['billing_address']['firstname'];

  • 0

Codefog - Contao web development


#10
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
Hej
Kamilu dzięki za pomysły. Ostatni działa, tzn prawie :)
Wywołując te dane przez sesję ale jeszcze przed potwierdzeniem zakupu, czyli jakby w czwartym ostatnim kroku checkout (z poziomu checkout_order_review), ma dostęp do nich wszystkich, jest super. Ale chcąc użyć tej metody do wywołania danych w następnym kroku czyli już po zatwierdzeniu zakupu (w checkout_order_details) już są nieaktywne, pewnie Isotope/Contao zabija w tym momencie sesję.
Da się to jakoś prosto obejść?

Pozdrawiam
  • 0

#11
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
Dziś już nie chce mi się sprawdzać, ale te dane można pewnie uratować przez przypisanie je do innego elementu sesji, na przykład:

$_SESSION['CLIENT_DATA'] = $_SESSION['CHECKOUT_DATA'];
// i po wykonaniu płatności
echo 'Dzięki za zakupy, ' . $_SESSION['CLIENT_DATA']['billing_address']['firstname'] . '!';

  • 0

Codefog - Contao web development


#12
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
Kamilu, działa :)
Wielka dzięka - ostatnia operacja i strzał w 10 :)

Wielka dzięka
Pozdrawiam
  • 0

#13
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
Kamilu jeszcze jedno - razem z tymi danymi muszę przesyłać dane "z templatki" czyli kwotę, nr zamówienia itp. Jeśli umieszczam swój kod php bezpośrednio w templatce to mam dostęp również do tych danych. Jeśli jednak includuję plik *.php (przez Twój moduł "custom module") to do zminnych sesji jak najbardziej mam dostęp ale do templatkowych już nie. Chciałbym pozostać przy wersji includowania pliku ponieważ jeśli wpiszę kod na stałe powiedzmy w order_details.php to to co tam wpisze pojawi mi się nie tylko we front endzie ale również w podglądzie zamówień w backendzie w panelu osoby zarządzającej zamówieniami - widocznie używają tej samej templatki :(

Podpowiesz jak to obejść?

Dzięki z góry i pozdrawiam
  • 0

#14
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
A czy w templatce nie możesz sobie przypisać tych danych do sesji?

$_SESSION['SKLEP_ABC'] = $this->price;
Nie wiem czy akurat price istnieje, ale to tylko tak do zobrazowania.
  • 0

Codefog - Contao web development


#15
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
aaa jasne
dzięka. Pójdę tą drogą
Pozdrawiam
  • 0

#16
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
Pojawił się jeszcze jeden problem - przypisuję sobie
$_SESSION['ORDER_ID'] = $this->order_id;
$_SESSION['KWOTA'] = $this->grandTotal;
bo te dwie zmienne mnie interesują, wywołuję je potem tam gdzie potrzbuję
I na dzieńdobry mi tych zmiennych nie przypisuję, ale jak odświeżę stronę "ręcznie" to są przypisywane poprawnie, tyle tylko że w FX i IE pozostałe zmienne są pamiętane to w Operze zmienne które przypisałem wcześniej czyli
$_SESSION['CLIENT_DATA'] = $_SESSION['CHECKOUT_DATA'];

są czyszczone.

??

pozdr
  • 0

#17
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
Wiem gdzie leży problem.

Żeby usystematyzować w moim sklepie procesy zachodzą następująco:

1. przed ostatecznym potwierdzeniem zakupów z poziomu templatki iso_checkout_order_review przypisuje sobie zmienne do sesji
$_SESSION['CLIENT_DATA'] = $_SESSION['CHECKOUT_DATA'];
tak abym miał później dostęp do danych klienta dokonującego zakupy
oraz już z tąd mogę przypisać kwotę do zmiennej sesji:
$_SESSION['KWOTA'] = $this->grandTotalPrice;
pozwalającą mi na operacje na sumie zamówienia w późniejszym etapie (która z tego poziomu jest przypisana właśnie jako grandotalprice a nie jak w następnym kroku grandtotal - tu był mój pierwszy błąd)

dzięki temu mam dane użytkownika dokonującego zakupów oraz z zmiennej przypisaną kwotę którą spokojnie odczytam w dołączonym pliku

Do pełni szczęści brakuje mi tylko jeszcze zapisania do sesji zmiennej numeru zamówienia - order_id, ponieważ z tego poziomu ona nie istnieje!!

Numer zamówienia pojawia się dopiero w następnym kroku czyli po potwierdzeniu zamówienia z poziomu mod_iso_orderdetails i dlatego nie mam do niego dostępu w pierwszym kroku. Dlatego też pojawił się problem z tym odświeżaniem ręcznym o którym pisałem w poprzednim poście.

Jakie rozwiązanie? Nie wiem - ponieważ muszę z poziomu jednej strony - mod_iso_orderdetails (bez odświeżania jej) przypisać zmienną order_id coby była widoczna w dołączanym pliku.

W tym momencie na stałe do templatki dopinam plik php więc dostęp do zmiennych mam od ręki, ale rozwiązanie takie nie jest dobre ponieważ jak pisałem wyżej frontend i backend używa tych samych templatek i w panelu po stronie zamówień wszystkie te operacje występują również.

Rozwiązaniem byłoby może rozróżnianie czy tempatka jest wyświetlana we frontendzie czy w panelu w backendzie, ale czy jest to możliwe??

Proszę o jakieś podpowiedzi
  • 0

#18
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
Aby rozróżnić, czy jest to tryb front end czy back end, wystarczy taki kawałek kodu:

<?php if (TL_MODE == 'FE'): ?>
front end
<?php elseif (TL_MODE == 'BE'): ?>
back end
<?php endif; ?>

  • 0

Codefog - Contao web development


#19
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
I to mi się podoba :)

Wielkie dzięki, działa jak trzeba :)

Pozdrawiam
  • 0




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

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