#5 peter
Hele ok chápu, však já budu rád když se to vyřeší jelikož js není má silná stránka. Kdybys cokoliv potřeboval poslat stačí říct.
#2 peter
To znamená že na každý ten item co tam mám si udělám ten onclink a na konci v tom shrnutí budu mít vypsáno co si dotyčný vybral a jak to pošlu na presenter? třeba do té mé funkce na form jelikož tam mám udělané že na konci když kliknu na objednat vyskočí modal a tam vyplní člověk své údaje a pak dá odeslat a chci aby to vzalo data jak z modalu ( Což funguje ) tak zároveň i ty data co si člověk naklikal.
a to všechno se mi poslalo sem
/**
* Funkce se vykonaná při úspěsném odeslání kontaktního formuláře a odešle email.
* @param Form $form kontaktní formulář
* @param ArrayHash $values odeslané hodnoty formuláře
*/
public function configureFormSucceeded($form, $values)
{
try {
bdump($values);
/* $mail = new Message;
$mail->setFrom($values->email)
->addTo(self::EMAIL)
->setSubject('Poptávka z webu')
->setBody($values->message);
$mailer = new SendmailMailer;
$mailer->send($mail);*/
$this->flashMessage('Nezávazná poptávka úspěšně odeslána obchodníkům.', self::MSG_SUCCESS);
$this->redirect('this');
} catch (InvalidStateException $ex) {
$this->flashMessage('Poptávku se nepodařilo odeslat! Chybu nahlašte na webmaster@ryzidomov.cz', self::MSG_ERROR);
}
}
Zdravím,
mám konfigurátor ve kterém načítám data z db do js a tam si uživatel dle svých požadavků vybere co se mu líbí a poslední step je kompletní soupis toho co si uživatel vybral viz: https://ctrlv.cz/shots/2018/04/23/VXzN.png
Ale problém je v tom že si tuto volbu ukládá do DOM a já za boha nevím jak získat data tak abych je mohl předat to presenteru a mohl s nimi pracovat.
Tohle je detail.lette ( ve kterém pracuji s stepy jako barva,příslušenství )
<li data-selection="colors" class="builder-step first-load">
<section n:foreach="$colors as $color" class="cd-step-content">
<header>
<h1>Barva</h1>
<span class="steps-indicator">Step <b>2</b> of 4</span>
</header>
<ul class="cd-product-previews">
<li class="selected" n:for="$i = 0; $i < $color->images_count; $i++"><img
src="{$basePath}/configurator/products/{$product->configure_id}/col_{$color->img_color_id}_{$i}.jpg"
alt="Product Preview" class="product-preview"></li>
</ul>
<ul class="cd-product-customizer">
<li data-content="{$color->title} - {$color->price}" data-price="{$color->price}" class="selected"><a data-color="white" href="#0">{$color->title} - CZK {$color->price}</a>
</li>
</ul>
</section>
</li>
<li data-selection="accessories" class="builder-step first-load">
<section class="cd-step-content">
<header>
<h1>Accessories</h1>
<span class="steps-indicator">Step <b>3</b> of 4</span>
</header>
<ul n:foreach="$acess as $ace" class="accessories-list options-list">
<li class="js-option" data-price="{$ace->price}">
<p>{$ace->title}</p>
<span class="price">CZK {$ace->price}</span>
<div class="check"></div>
</li>
</ul>
</section>
</li>
<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>
Tohle je js který na konci vypíše co si člověk vybral.
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));
}
});
}
A potřeboval bych aby mi to vrátilo všechny data co si tam člověk vybral a nějak je poslal do presenteru něco jako u formu je hodnota $values a v ní mám dané data které si pak můžu vypsat.
DEMO: https://codyhouse.co/demo/product-builder/index.html
Díky moc za případnou pomoc :)
Zdravím, mám model který pracuje s feedem dodavatele.
public function zpracujXmlZbozi($xml) {
foreach ($xml->StoItem as $item) {
$idKat = $this->connection->query(sprintf("SELECT product_id FROM product WHERE code = '%s' LIMIT 1", $item->Code))->fetch();
$nazev = $idKat ? $this->connection->query(sprintf("SELECT title FROM product WHERE product_id = %s LIMIT 1", $idKat->product_id))->fetch() : false;
if (!$nazev) {
Debugger::log($item->Id . ': ' . $item->Name, 'import');
$dataCatalog = [
'product_id' => intval($item->Id),
'code' => (string) ($item->Code),
'url' => Strings::webalize($item->Name),
'title' => (string) $item->Name,
'short_description' => (string) $item->Note,
'description' => (string) $item->Note,
'price' => intval($item->PriceEU),
'old_price' => intval($item->PriceDea),
'rating_sum' => 0,
'ratings' => 0,
'stock' => intval($item->QtyFree),
'images_count' => 1,
'hidden' => 0
];
$this->connection->query('INSERT INTO product', $dataCatalog);
$lastId = $this->connection->getInsertId();
/* katerogie */
foreach (['Level1', 'Level2', 'Level3'] AS $_level) {
$tmp = explode(' ', $item->SPresentTree->{$_level});
unset($tmp[0]);
$level = implode(' ', $tmp);
$kategorieId = $this->connection->query(sprintf('SELECT category_id FROM category WHERE title = "%s" LIMIT 1', $level))->fetch();
if ($kategorieId) {
$dataKat = [
'product_id' => $lastId,
'category_id' => $kategorieId->category_id
];
$this->connection->query('INSERT INTO product_category', $dataKat);
}
}
if ($item->ImgUrl) {
$count = count(\Nette\Utils\Finder::findFiles(intval($item->Id) . '_*.jpg')->in($this->slozka));
$imageId = preg_replace("/(.*)stiid=(.*)/", "$2", (string) $item->ImgUrl);
$filename = intval($item->Id) . '_1.jpg';
if (!file_exists($this->slozka . '/' .$filename)) {
$components = $this->slozka . '/' . $lastId;
mkdir($components, 0777, true);
copy($item->ImgUrl, $this->slozka . $lastId . '/' . $filename);
$count++;
$this->connection->query('UPDATE product SET images_count= ' . $count . ' WHERE product_id = ' . $lastId);
}
$this->createThumb($item->Id, $this->slozka . $lastId . '/' . $filename);
}
} else {
$lastId = $this->connection->query(sprintf("SELECT product_id FROM product WHERE product_id = %s LIMIT 1", $idKat->product_id))->fetch()->product_id;
foreach (['Level1', 'Level2', 'Level3'] AS $_level) {
$tmp = explode(' ', $item->SPresentTree->{$_level});
unset($tmp[0]);
$level = implode(' ', $tmp);
if ($level) {
$kategorieId = $this->connection->query(sprintf('SELECT category_id FROM category WHERE title = "%s" LIMIT 1', $level))->fetch();
if ($kategorieId) {
$bindCat = $this->connection->query(sprintf("SELECT product_id FROM product_category WHERE product_id = %s AND category_id = %s LIMIT 1", $lastId, $kategorieId->category_id))->fetch();
if (!$bindCat) {
$dataKat = [
'product_id' => $lastId,
'category_id' => $kategorieId->category_id
];
$this->connection->query('INSERT INTO product_category', $dataKat);
}
}
}
}
/* UPDATE */
$this->connection->query(sprintf('UPDATE product SET stock = %s WHERE product_id = %s',intval($item->QtyFree), $lastId));
}
}
}
A mám tam udělaný i update skladových zásob ale všiml jsem si že můj dodavatel už některé produkty které já v databízi mám již nemá... Potřeboval bych tedy poradit jak udělat kontrolu že pokud není produkt v xml feedu tak se z db vymaže.. jelikož tam mám pak problém že mi haprujou Idčka a hádají se...
Nebo nějaký jiný nápad?
Díky všem za pomoc
Zdravím mám na e-shopu menu https://www.bellugio.cz ale potřeboval bych ho upravit že když se člověk divá na telefonu bude skryto a člověk si ho může rozkliknout tak jak je to vrchní menu...
<div class="side-menu animate-dropdown outer-bottom-xs">
<div class="head"> Bellugio
</div>
<nav class="yamm megamenu-horizontal menu-tree" role="navigation">
<ul class="nav nav-list tree out">
{foreach $categories as $categoryArray}
{* Deklarace pomocných proměných. *}
{var $category = $categoryArray['category'], $subcategories = $categoryArray['subcategories']}
{if $subcategories}
{* Vykreslení kategorie se sub-kategoriemi. *}
<li><a class="tree-toggler nav-header" data-path="{$category->url}" style="color: #f39c12;">{$category->title}</a>
{control categories, $subcategories}
</li>
{else}
{* Vykreslení kategorie bez sub-kategorií. *}
<li><a href="{plink :Eshop:Product: $category->url}" data-path="{$category->url}">{$category->title}</a></li>
{/if}
{/foreach}
</ul>
</nav><!-- /.megamenu-horizontal -->
</div><!-- /.side-menu -->
Používám v nette přímo výpis z db do treeview ale potřebuji to upravit na responzivitu..
Díky všem za rady :)
Aha, stačilo zaremovat v konfiguraci Apache AddDefaultCharset a je hotovo. Já truhlík :smile13: Díky.
Ahoj,
mám podobný problém. Na locahostu (Win XP) mi běží Apache 2.2. Jednoduchá stránka:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Pokus</title>
</head>
<body>
ěščřžýáíéúůťň
ĚŠČŘŽÝÁÍÉÚŮŤŇ
</body>
</html>