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 - zmiana wartości przesyłanej przez submit do koszyka


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

#1
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
Witam
Chodzi o Isotope i przenoszenie do koszyka wybranego produktu
Mam taką sytuację: mam listę radiobuttonów i do każdego dokładam przycisk submit, każdy radiobutton ma swoją wartość, przenosi się jak trzeba, działa poprawnie. Każdy radiobutton to inna cena.

Musze teraz dołożyć kolumnę w której wyświetlam wartość przypisaną do atrybutu cena z radiobuttona i mnożę ją przez pewien współczynnik - otrzymuje nową wartość - większą. Po kliknięciu w submitt (koszyczek) prznosi mi nie nową wartość ale wartość pierwotną z radiobuttona (zachowanie normalne). Musze wyświetlać obie wartości. Pytanie jak zmodyfikować kod zeby do koszyka przerzucał mi nową wartość, powiększoną o współczynnik.

Wygląda to tak:

<div id="razem">
<?php
  for ($i = 0; $i < count($un); $i++){ ?>
  <div class="razem_in">
   <div class="razem_cena">
	  <?php
	    $cena_lacznie = (substr($un[$i]['price'],1) * $wspolczynnik;
	  echo number_format($cena_lacznie, 2, '.', ' ');
	  ?> zł.
	 </div>
	 <div class="koszyk_submit">
	  <?php foreach( $this->buttons as $name => $button ): ?>
	  <input type="submit" class="submit <?php echo $name; ?>" name="<?php echo $name; ?>" value="<?php echo $button['label']; ?>" />
	  <?php endforeach; ?>
	 </div>
    </div>
	 <?php } ?>
</div>

Czyli nie wysyła mi do koszyka wartości zmiennej $cena_lacznie, tylko wartość pierwotną ceny z buttona, ty wyciągniętą jako substr($un[$i]['price'],1).

Zakładam że rozwiązanie tkwi w zmodyfikowaniu linii
<?php foreach( $this->buttons as $name => $button ): ?>

??

Prosze o pomoc
  • 0

#2
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
A gdzie w tym kodzie masz radio buttony? To na pewno ten kod?
  • 0

Codefog - Contao web development


#3
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
:)
dorzucam kod (wyświetlam atrybuty produktu), dane wyciągam na templatkę w ten sposób:
Radio Button:
<div class="ilosc"><?php  echo $this->options[ilosci][html]; ?></div>

Do każdego atrybutu mam dopisaną cenę, którą wyciągam, a która składa się na cenę całościową towaru, są to: rozmiar, klej, rodzaj papieru i te ilości z góry (cena zależy od ilości). Cenę końcową muszę przemnożyć przez ilość kupowanych towarów i w ten sposób uzyskać cenę ostateczną i dodać ją do koszyka. W tym momencie wyświetlam wszystko jak należy, ale do koszyka przenosi mi tylko cenę pojedynczego towaru. W sumie to jest jedyny radio button który zaznaczam i dlatego tak się dzieje.

Mógłbym w sumie zrobić to od drugiej strony - cenę za towar obliczać odrazu jako cenę * ilość zamawianą, a wyświetlać cenę jednostkową, trochę na około, ale też by działało.

Troszkę zakręciłem, ale zerknijcie tu to troszkę się rozjaśni:
http://www.labelmark...lep-online.html

Chodzi o kolumny "cena za rolkę" i "razem" (na "zadruk" narazie nie patrzcie)
Pozdr
  • 0

#4
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
Link nie działa, a ja dalej średnio łapię. Nie wiem czy uda Ci się przemnożyć te rzeczy w templatce, bo to chyba powinno się dziać po stronie modułu.
  • 0

Codefog - Contao web development


#5
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
Faktycznie :(
http://www.labelmark...lep-online.html

Nie chcę grzebać w module, bo standardowy mi w innych miejscach odpowiada. Zrobię poprostu jak piszę - podziaąłm od drugiej strony - od razu policzę każdy wariant, a wyświetlę poprostu inaczej i tez będzie :) . W sumie to ciężki temat do wyjaśnienia jakie mam koncepcje :).
  • 0

#6
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
Ok, próbuj i daj znać jak poszło :)
  • 0

Codefog - Contao web development


#7
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
Nic z tego :(. Dołożyłem kolejny atrybut z ilościami rolek jakie chcemy kupić, ale okazuje się że wartość przenoszona do koszyka jest jedynie z aktywnych atrybutów (czytaj klikniętych radiobuttonów). Musze zatem zrobić tak żeby klikając w jeden radiobutton automatycznie zaznaczać inny, w tym przypadku klikając na "ilośc" równocześnie musi zostać zaznaczony "rolka". Czy taką operację dałoby rade zrobić java script ?
  • 0

#8
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
Tak, jeśli będziesz robił to w mootools to wyjdzie coś takiego (pi razy drzwi):

$('id_radiobutton_ilosc').addEvent('click', function(){
	if ($(this).get('checked'))
	{
		$('id_radiobutton_rolka').set('checked', true);
	}
	else
	{
		$('id_radiobutton_rolka').set('checked', false);
	}
});

  • 0

Codefog - Contao web development


#9
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
Tak, to jest to, tyle że ...
templatkaskąłda się z tych atrybutów, a każdy ma kilka opcji, co za tym idzie każdy kolejny radio button ma inne ID, a konkretnie:

"Ilosci" :
<input type="radio" name="ilosci" id="opt_ilosci_fmd11_product_1_0" class="radio" value="1" />
<input type="radio" name="ilosci" id="opt_ilosci_fmd11_product_1_1" class="radio" value="2" />
<input type="radio" name="ilosci" id="opt_ilosci_fmd11_product_1_2" class="radio" value="3" />
itd
i odpowiadające temu radio rolka:

<input type="radio" name="rolka" id="opt_rolka_fmd11_product_1_0" class="radio" value="1" />
<input type="radio" name="rolka" id="opt_rolka_fmd11_product_1_1" class="radio" value="2" />
<input type="radio" name="rolka" id="opt_rolka_fmd11_product_1_2" class="radio" value="3" />
itd

jak w takim razie zautomatyzować kod podany przez Ciebie, żeby łączył odpowiedni radio "ilosci" z "rolka".
??
  • 0

#10
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
Rozumiem, że ma łączyć po tym członie?
id="opt_rolka_fmd11_product_1_0"
  • 0

Codefog - Contao web development


#11
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
Dokładnie tak. Tylko ta końcówka jest zmienna, i po nich trzeba raiobuttony "parować"...
  • 0

#12
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
No to od biedy można zrobić coś takiego:

 
$('div_z_ilosciami').getElements('input[type="radio"]').addEvent('click', function(){
var rolka = $(this).get('id').replace('ilosci', 'rolka');
 
    if ($(this).get('checked'))
    {
     $(rolka).set('checked', true);
    }
    else
    {
     $(rolka).set('checked', false);
    }
});

  • 0

Codefog - Contao web development


#13
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
I to mi się podoba :)
Działa jak ta lala :)

Dzięki i pozdrawiam
  • 0

#14
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
Witam
Odgrzewam "kotleta" :)
Powyższy kod działa i sprawdza się u mnie świetnie.
Teraz zaszła potrzeba żeby rozszerzyć funkcjonalność, najprościej zrobić to właśnie wykorzystując ten patent, czyli dokładam atrybut X, ukrywam go CSSem, ale chcę jak poprzednio by zaznaczał się z automatu jeśli odpowiednie pole zostanie zaznaczone, dodam inne niż pierwsze z postu wyżej.
Stosując ten sam tok myślenia i dodając:
$('div_z_zaznaczającym_Z').getElements('input[type="radio"]').addEvent('click', function(){
var X = $(this).get('id').replace('Z', 'X');

    if ($(this).get('checked'))
    {
	 $(X).set('checked', true);
    }
    else
    {
	 $(X).set('checked', false);
    }
});
nie zaznacza mi pola X, a jak wyświetlam sobie windows.alert z id zaznaczanego checkboxa, ale w pierwotnej funkcji, to również klikając w checkbox Z wyświetla mi info z id-kiem, czyli to rozwiązanie nie rozróżnia divów z różnymi opcjami do zaznaczenia, wszystko traktuje jak zaznaczane z div_z_ilosciami ...

Prosze o podpowiedź jak najprościej to obejść, bo jak wspomniałem to proste rozwiązanie oszczędza mi bardzo dużo pracy z rozbudową funkcjonalności...
  • 0

#15
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
Sprawdź co daje:

var X = $(this).get('id').replace('Z', 'X');
console.log(X);
console.log($(X));

  • 0

Codefog - Contao web development


#16
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
To jst coś na zasadzie
window.alert($(this).get('id')); ?

Niestety to co podaleś Kamil nie powoduje mi żadnej akcji, nic się mi nie wyswietla...
  • 0

#17
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
A używasz konsoli? Możesz zamienić na alert() jeśli wolisz :)

http://glui.me/?i=7t...9_at_18.26.png/
  • 0

Codefog - Contao web development


#18
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
W konsoli dostaje :
--
[18:33:20.773] Odwołanie do elementu przez ID/NAME w zasięgu globalnym. Należy korzystać z metody document.getElementById() ze standardu DOM W3C. @ http://localhost/lm/...zakupy.html:633

ale dokładnie to samo pisze mi w przypadku poprzedniej procedury z tą różnicą że w poprzedniej działa a drugiej nie

window.alert($(this).get('id'));
zwraca mi ID tego konkretnego "radio" ...
  • 0

#19
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
Okej, dałem
var X = $(this).get('id').replace('Y', 'X');
window.alert($(X));
i mam w konsoli [18:39:20.631] $("zadruk") is null @ http://localhost/lm/...zakupy.html:641

"zadruk" to u mnie
div_z_zaznaczającym_Z

czyli nie znajduje mi radio z tego diva?
  • 0

#20
kylu123

kylu123

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 203 postów
No i mam winowajce...
Błąd polega na tym że "div_z_zaznaczającym_Z" to u mnie klasa diva a nie jego id. Poprawione na id i juz wydaje się że działa...
Nie ma wyjścia :)
Dzięki Kamilu za pomoc...
  • 0




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

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