|
[ nemchus @ 17.12.2015. 20:40 ] @
| Ćao svima! :D
Pokušavam da napravim web shop. Podatke koje preko php-a primam i koji su u json formatu želim da transformišem tako da mogu lakše da ih prikažem na sajtu.
Ono što dobijam od php-a je:
{name: "product 1", price: "150", picture_path: "product-img1.png", color: "white",…}
{name: "product 1", price: "150", picture_path: "product-img1.png", color: "beige",…}
{name: "product 1", price: "150", picture_path: "product-img1.png", color: "orange",…}
{name: "product 2", price: "55", picture_path: "product-img2.png", color: "white", …}
{name: "product 3", price: "155", picture_path: "product-img3.png", color: "beige",...}
a želim da izgleda ovako:
{name: "product 1", price: "150", picture_path: "product-img1.png", color1: "white", color2:"beige", color3:"orange", colorX:....…}
{name: "product 2", price: "55", picture_path: "product-img2.png", color1: "white", …}
{name: "product 3", price: "155", picture_path: "product-img3.png", color1: "beige",...}
Ili
{name: "product 1", price: "150", picture_path: "product-img1.png", colors: { color1:"white", color2:"beige", color3:"orange"},..…}
Kako bi to moglo da se odradi u jQuery? |
[ jablan @ 17.12.2015. 21:11 ] @
Šta radiš kad nije ista cena za plavi i narandžasti product1? Zašto hoćeš da radiš u JS a ne u PHP?
[ nemchus @ 17.12.2015. 21:25 ] @
U ovom konkretnom slučaju, jedan produkt može da ima samo različite boje. Zamisao je da se po prelasku mišem preko izlistane boje, promeni slika artikla. Nešto na ovu foru: http://prntscr.com/9ehh3a. Mislio sam da će lakše da mi ide ako u javascriptu na osnovu podataka iz json napravim novi objekat sa podacima. Ono što meni pada na pamet je otprilike ovako:
Code:
function formData(data) {
var id = {};
for (var i = 0; i < data.length - 1; i++) {
for (var j = 1; j < data.length - 1; j++) {
if (data[i].naziv == data[j].naziv) {
} else {
id.naziv = data[i].naziv;
id.cena = data[i].cena;
id.slika = data[i].slika;
id.boje = data[i].boja_naziv;
id.format_naziv = data[i].format_naziv;
id.brand_naziv = data[i].brand_naziv;
}
}
}
[ jablan @ 17.12.2015. 21:36 ] @
[ nemchus @ 17.12.2015. 21:46 ] @
To je to, sad sam razgledao.  Hvala ti puno! Par sati se već mačujem sa tim, šta da radim kada sam početnik...Sad ću da razložim sebi i da pokušam da skapiram kako funkcioniše.
[ nemchus @ 08.01.2016. 20:54 ] @
Imam još jednu početničku nedoumicu. Ajaxom dovlačim sve podatke i imam funkciju koja mi formatira te podatke onako kako ja želim. Zanima me kako te formatirane podatke mogu da izvučem i iskoristim u drugoj funkciji koja će služiti za filtriranje u odnosu na boju, brand, format itd. U ovom slučaju, Ajax bi samo jedno opalio. Funkcijom globalContent sam hteo da izvučem podatke za dalje filtriranje, a funkcija makeContent pravi html template.
Code:
function fetchData (){
$.ajax({
type: 'post',
url: 'submit.php',
dataType : 'json',
cache: false,
success: function(records){
globalContent(formatData(records));
}
});
}
function formatData(data) {
var newdata = {};
data.forEach(function(e){
newdata[e.naziv] = newdata[e.naziv] || {name: e.naziv, price: e.cena, colors: [],
photos: [], brand: e.brand_naziv, format: e.format_naziv};
newdata[e.naziv].colors.push(e.boja_naziv);
newdata[e.naziv].photos.push(e.slika);
});
return(
JSON.stringify(
Object.keys(newdata).map(
function(key){return newdata[key]}
)));
}
function globalContent (result) {
}
$('.products-section').html(makeContent(jQuery.parseJSON(FILTRIRANO)));
[ nemchus @ 10.01.2016. 18:43 ] @
Ovo je ono do čega sam došao i što koliko toliko funkcioniše. Pitanje je kako mogu da ga prepravim tako da se ova funkcija uključuje svaki put kada ubacim novi element u niz filterOpts. On se puni sa id čekiranih polja na UI...
Code:
function fetchData (){
$.ajax({
type: 'post',
url: 'submit.php',
dataType : 'json',
cache: false,
success: function(records){
globalContent(jQuery.parseJSON(formatData(records)));
}
// success: callback
});
}
Array.prototype.contains = function(obj) {
var i = this.length;
while (i--) {
if (this[i] == obj) {
return true;
}
}
return false;
}
function globalContent (result) {
var results = [];
var filterOpt = [];
filterOpt.push("beige");
for (var x = 0; x < result.length; x++) {
for (var i = 0; i < filterOpt.length; i++) {
if (result[x].colors[i] !== null) {
if (result[x].colors.contains(filterOpt[i]) || filterOpt[i] == result[x].brand || filterOpt[i] == result[x].format) {
if (results.contains(result[x]) === false) {
results.push(result[x]);
}
}
}
}
}
$('.products-section').html(makeContent(results));
}
[ jablan @ 10.01.2016. 20:33 ] @
Ja ti ne mogu pomoći, imam mentalnu blokadu čim naiđem na C-ovsku for petlju. :) Mogu samo da ti preporučim da vidiš sa moderatorom da prebaci poruku u adekvatni podforum (za JS), kao i da postaviš primer koji funkcioniše na jsfiddle.
[ nemchus @ 10.01.2016. 21:07 ] @
Ma opušteno, ja sam u međuvremenu sam došao do nekog rešenja ;) Hvala ti u svakom slučaju. Trebalo bi da prebacim ovu diskusiju u JS podforum, definitivno.
[ luke6 @ 06.11.2017. 07:59 ] @
Kipróbálhatja ezt az eszközt: json formatter
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|