Získání dat z konfigurátoru

jAkErCZ
Člen | 322
+
0
-

Zdravím,
mám konfigurátor který funguje na ajaxu a tahám si data z db vše se krásně vypisuje ale teď nastal takový problém na konci mám shrnutí které mi načítá js a chtěl bych aby po kliknutí na objednat vyskočilo modální okno kde uživatel vypíše jméno,mail a telefon a dá odeslat a mě na mail přijde výpis této objednávky.

ale za boha nevím jak vytáhnout ty data z té stránky kde to je shrnuté..

SCREEN

Snad mě chápete…

<li data-selection="summary" class="builder-step first-load">
    <section class="cd-step-content">
        <header>
            <h1>Summary</h1>
            <span class="steps-indicator">Step <b>4</b> of 4</span>
        </header>

        <ul class="summary-list">
            <li>
                <h2>Model</h2>

                <img n:for="$i = 0; $i < $product->images_count; $i++"
                        src="{$basePath}/configurator/products/{$product->configure_id}/{$product->configure_id}_{$i}.jpg"
                        alt="{$product->title}" class="finish-img">

                <h3>{$product->title}</h3>

                <p>
                    {$product->short_description|striptags}
                </p>
            </li>

            <li data-summary="colors">
                <h2>Barva</h2>

				<span class="summary-color">
					<em class="color-swatch" data-color="red"></em>
					<em class="color-label">Red Passion</em>
				</span>
            </li>

            <li data-summary="accessories">
                <h2>Příslušenství</h2>

                <ul class="summary-accessories">
                    <li>
                        <p>Uconnect 6.5" colour touchscreen radio navigation sytem with Bluetooth &amp; DAB ($1050)</p>
                    </li>

                    <li>
                        <p>Audio &amp; telephone controls on steering wheels ($750)</p>
                    </li>
                </ul>
            </li>
        </ul>
    </section>
</li>

To shrnutí si nějak dle vaší volby tahá nebo drží js…

Díky všem za pomoc či radu :)

Oli
Člen | 1215
+
0
-

Ono je uplně jedno jestli to je přes ajax nebo jen js. To co pošleš by měl být produkt, který si uživatel vybral, případně konkrétní varianta produktu. Cenu produktu a jeho variant víš. Takže ti v ideálním případě přijde jméno,mail, telefon a nějaký product_variant_id. To product_variant_id muzes mit jako hidden input. Pokud ti to někdo změní v kodu, tak ti to je jedno. Ty máš správnou cenu navázanou na tu produktovou variantu…

jAkErCZ
Člen | 322
+
0
-

Já potřebuji jen to shrnutí vytáhnout data a uložit nějak podobně jak třeba je
public function editorFormSucceeded($form, $values)
a ve $values mám ty hodoty co tam člověk napsal… ale tady chci aby to do něčeho takového uložil hodnoty co si člověk naklikal a jsou na konci v tom shrnutím pak klikl na objednat vyskočí okno doplní údaje a pak se to celé pošle na mail ;)

	ProductBuilder.prototype.createSummary = function() {
		var self = this;
		this.steps.each(function(){
			//this function may need to be updated according to your builder steps and summary
			var step = $(this);
			if( $(this).data('selection') == 'colors' ) {
				//create the Color summary
				var colorSelected = $(this).find('.cd-product-customizer').find('.selected'),
					color = colorSelected.children('a').data('color'),
					colorName = colorSelected.data('content'),
					imageSelected = $(this).find('.cd-product-previews').find('.selected img').attr('src');

				self.summary.find('.summary-color').find('.color-label').text(colorName).siblings('.color-swatch').attr('data-color', color);
				self.summary.find('.product-preview').attr('src', imageSelected);
			} else if( $(this).data('selection') == 'accessories' ) {
				var selectedOptions = $(this).find('.js-option.selected'),
					optionsContent = '';

				if( selectedOptions.length == 0 ) {
					optionsContent = '<li><p>Nevybráno žádné příslušenství;</p></li>';
				} else {
					selectedOptions.each(function(){
						optionsContent +='<li><p>'+$(this).find('p').text()+'</p></li>';
					});
				}

				self.summary.find('.summary-accessories').children('li').remove().end().append($(optionsContent));
			}
		});
	}

Jak mohu pomocí js/jqury vytáhnout dotyčné data?

Editoval jAkErCZ (23. 4. 2018 16:15)

Oli
Člen | 1215
+
0
-

Tak ono to může být i tak, že to co si bude vybírat, tak bude jen pěkně nastylovaný formulář. To znamená, že příslušenství bude checkbox (ale nemusí tak vypadat). Pak klikne na objednat. Otevře se modal a v něm budou ty inputy pro jméno, email, … (pořád ten samej formulář). A po odeslání to máš všechno.

Pokud prochází přes několik stránek, tak si to musíš někam uložit. Přihlášenýho uživatele asi nemáš, takže jedině co cookie nebo session. Asi bych to uložil osobně do cookie (klidně den platnost a tlačítko pro reset konfigurace).

Ale záleží jak to máš jinak napsaný. Neznám celý ten proces.

jAkErCZ
Člen | 322
+
-1
-

Oli napsal(a):

Tak ono to může být i tak, že to co si bude vybírat, tak bude jen pěkně nastylovaný formulář. To znamená, že příslušenství bude checkbox (ale nemusí tak vypadat). Pak klikne na objednat. Otevře se modal a v něm budou ty inputy pro jméno, email, … (pořád ten samej formulář). A po odeslání to máš všechno.

Pokud prochází přes několik stránek, tak si to musíš někam uložit. Přihlášenýho uživatele asi nemáš, takže jedině co cookie nebo session. Asi bych to uložil osobně do cookie (klidně den platnost a tlačítko pro reset konfigurace).

Ale záleží jak to máš jinak napsaný. Neznám celý ten proces.

Jenže tam jde o to že ten konfigurátor si to ukládá do DOMu té webovky a já potřebuji poradit na javascriptem/jquery jak posbírat ty data a poslat do nette :)

Oli
Člen | 1215
+
0
-

Asi ti úplně nerozumím. Jak to dostat do nette jsem ti napsal (snad) :-)
prostě to pošleš přes skrytý inputy. a jestli ten input naplníš přes jQuery nebo ti ho vypíše někdo jinej je přece jedno. Můžeš mít klidně pomocí stylů skrytej formulář a jak si něco vybere, tak to rovnou uloží do toho inputu.

jAkErCZ
Člen | 322
+
0
-

Oli napsal(a):

Asi ti úplně nerozumím. Jak to dostat do nette jsem ti napsal (snad) :-)
prostě to pošleš přes skrytý inputy. a jestli ten input naplníš přes jQuery nebo ti ho vypíše někdo jinej je přece jedno. Můžeš mít klidně pomocí stylů skrytej formulář a jak si něco vybere, tak to rovnou uloží do toho inputu.

No a jak z těch DOM to natáhnu do toho inputu? Někde nějaký exemple?
jelikož tady se mi vypisuje to co si uživatel vybral:

<li data-selection="summary" class="builder-step first-load">
    <section class="cd-step-content">
        <header>
            <h1>Summary</h1>
            <span class="steps-indicator">Step <b>4</b> of 4</span>
        </header>

        <ul class="summary-list">
            <li>
                <h2>Model</h2>

                <img n:for="$i = 0; $i < $product->images_count; $i++"
                        src="{$basePath}/configurator/products/{$product->configure_id}/{$product->configure_id}_{$i}.jpg"
                        alt="{$product->title}" class="product-preview">

                <h3>{$product->title}</h3>

                <p>
                    {$product->short_description|striptags}
                </p>
            </li>

            <li data-summary="colors">
                <h2>Barva</h2>

				<span class="summary-color">
					<em class="color-swatch" data-color="red"></em>
					<em class="color-label">Red Passion</em>
				</span>
            </li>

            <li data-summary="accessories">
                <h2>Příslušenství</h2>

                <ul class="summary-accessories"></ul>
            </li>
        </ul>
    </section>
</li>

Ale tam barvy a přislušenství natahuje js pomocí DOM… viz js

	ProductBuilder.prototype.createSummary = function() {
		var self = this;
		this.steps.each(function(){
			//this function may need to be updated according to your builder steps and summary
			var step = $(this);
			if( $(this).data('selection') == 'colors' ) {
				//create the Color summary
				var colorSelected = $(this).find('.cd-product-customizer').find('.selected'),
					color = colorSelected.children('a').data('color'),
					colorName = colorSelected.data('content'),
					imageSelected = $(this).find('.cd-product-previews').find('.selected img').attr('src');

				self.summary.find('.summary-color').find('.color-label').text(colorName).siblings('.color-swatch').attr('data-color', color);
				self.summary.find('.product-preview').attr('src', imageSelected);
			} else if( $(this).data('selection') == 'accessories' ) {
				var selectedOptions = $(this).find('.js-option.selected'),
					optionsContent = '';

				if( selectedOptions.length == 0 ) {
					optionsContent = '<li><p>Žadné příslušenství nebylo vybráno;</p></li>';
				} else {
					selectedOptions.each(function(){
						optionsContent +='<li><p>'+$(this).find('p').text()+'</p></li>';
					});
				}

				self.summary.find('.summary-accessories').children('li').remove().end().append($(optionsContent));
			}
		});
	}

Editoval jAkErCZ (24. 4. 2018 15:12)

CZechBoY
Člen | 3608
+
0
-

v jquery třeba takhle:

$(inputSelector).val($(domSelector).text());
jAkErCZ
Člen | 322
+
-1
-

CZechBoY napsal(a):

v jquery třeba takhle:

$(inputSelector).val($(domSelector).text());

Dobře pochopil jsem co dělá .val ale jak z toho js vytáhnu ten parametr co potřebuji?

V tom js tam mám třeba colorName = colorSelected.data(‚content‘), který bych rád dostal do toho .val

ale jak?

Editoval jAkErCZ (24. 4. 2018 15:44)

CZechBoY
Člen | 3608
+
+3
-

Zkus si pročíst nějakej js tutoriál…

$(inputSelector).val(colorSelected.data("content"));
jAkErCZ
Člen | 322
+
0
-

CZechBoY napsal(a):

Zkus si pročíst nějakej js tutoriál…

$(inputSelector).val(colorSelected.data("content"));

Super to je přesně ono určitě si pročtu nějaké js tutoriály. Díky moc všem za pomoc :)