Autor | Zpráva | ||
---|---|---|---|
juraj Profil |
#1 · Zasláno: 23. 3. 2018, 19:02:31
Zdravím ako z reťazca vytvoriť hlavné kategórie a podkategórie,ktoré sa načítavajú z xml súboru v tvare
<product product_id="1" > <kategorie>Drogerie / Domov / Autokosmetika</kategorie> </product> <product product_id="2" > <kategorie>Drogerie / Praní / Prací prostředky / Speciály</kategorie> </product> <product product_id="3" > <kategorie>Drogerie / Kuchyně / Mytí nádobí / Ruční mytí nádobí</kategorie> </product> a chcem dostať hlavná kategória Drogerie Kuchyně Mytí nádobí Ruční mytí nádobí a tu je php kód ako som sa dostal ďaleko <?include_once "connect.php";set_time_limit(0); ini_set('memory_limit', '2000M');?> <?php $xml=simplexml_load_file("....") or die("Error: Cannot create object"); $already_used = array(); foreach($xml->children() as $category) { $catname = $category->kategorie; $kategoriep = explode("/", $catname); $kategorieppp =count($kategoriep); $output[]=$kategoriep[0]; for($i=0;$i<count($kategoriep);$i++){ if(!in_array($kategoriep[$i],$output)){ print $output[]=$kategoriep[$i];echo "<br>"; } } } ?> |
||
Kajman Profil |
#2 · Zasláno: 25. 3. 2018, 01:07:12
Zkuste na řádku 12 jen
$output=array(); |
||
Časová prodleva: 6 dní
|
|||
juraj Profil |
#3 · Zasláno: 30. 3. 2018, 18:34:50
Kajman:
tu je skript, kde sa všetky podkategórie uložili k hlavnej ale k podkategóriam neviem správne priradit parent_id <?include_once "connect.php";set_time_limit(0); ini_set('memory_limit', '2000M');?> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta name="generator" content="PSPad editor, www.pspad.com"> <title></title> </head> <body> <?php $xml=simplexml_load_file("https://dedra.blob.core.windows.net/cms/xmlexport/cs_xml_export.xml?ppk=285765") or die("Error: Cannot create object"); $already_used = array(); $vsetkykat = 0; foreach($xml->children() as $category) { $catname = $category->kategorie; $catname = strip_tags($catname); $tovar = $category->text1; $product_id = $category->product_id; $kategoriep = explode("/", $catname); $kategorieppp =count($kategoriep); $output[]=$kategoriep[0]; for($i=0;$i<count($kategoriep);$i++){ foreach($kategoriep as $key=>$value){ $id=mysql_insert_id()+1; if(!in_array($kategoriep[$i],$output)){ if(!in_array($value,$output)){ $kategoriep[0]; $output[]=$kategoriep[$i]; echo "Hlavnakat" ; echo $kategoriep[0]; echo $kategoriep[$i]; echo $product_id; echo $tovar; echo "<br>"; if($kategoriep[0]){//ulozili sa hlavne kategorie $sql = "SELECT id,name,patrikhlavnejkatid from kategorie WHERE name = '$kategoriep[0]'"; $result = mysql_query($sql); $count=mysql_num_rows($result); if($count > 0) { print " Kategoria uz existuje"; } else { $sql = "SELECT id,name,patrikhlavnejkatid from kategorie WHERE name = '$kategoriep[0]'"; $sql="INSERT INTO kategorie(name,parent_id,patrikhlavnejkatid) VALUES('$kategoriep[0]','0','$id')"; $result=mysql_query($sql); } }if($kategoriep[$i]){//ulozili sa hlavne kategorie $sql = "SELECT id,name,patrikhlavnejkatid from kategorie WHERE name = '$kategoriep[$i]'"; $result = mysql_query($sql); $count=mysql_num_rows($result); if($count > 0) { print " Kategoria uz existuje"; } else { echo "juraj"; echo $kategoriep[0]; // $sql = "SELECT id,name,patrikhlavnejkatid from kategorie WHERE name = '$kategoriep[$i]'"; $sql = "SELECT id,patrikhlavnejkatid from kategorie WHERE name = '$kategoriep[0]'"; $result = mysql_query($sql); WHILE(LIST($id,$patrikhlavnejkatid) = mysql_fetch_row($result)) { //$resulti = mysql_query("INSERT INTO kategorie (name,parent_id,patrikhlavnejkatid) VALUES ('$kategoriep[$i]','55','$patrikhlavnejkatid')"); $sqlf="INSERT INTO kategorie(name,parent_id,patrikhlavnejkatid) VALUES('$kategoriep[$i]','$id','$patrikhlavnejkatid')"; $resultf=mysql_query($sqlf); echo $value;echo"fff"; } } } } } } } $vsetkykat++; } if($vsetkykat==$vsetkykat){ echo "koniec kategorii,nvlozia sa tovary"; } ?> |
||
Kajman Profil |
#4 · Zasláno: 31. 3. 2018, 00:45:09
Zkusil bych něco takového...
<?php $xml=simplexml_load_string('<root><product product_id="1" > <kategorie>Drogerie / Domov / Autokosmetika</kategorie> </product> <product product_id="2" > <kategorie>Drogerie / Praní / Prací prostředky / Speciály</kategorie> </product> <product product_id="3" > <kategorie>Drogerie / Kuchyně / Mytí nádobí / Ruční mytí nádobí</kategorie> </product></root>') or die("Error: Cannot create object"); function getCatId($nazev, $idNadrazene) { $idNadrazene=($idNadrazene===null?'null':int()$idNadrazene); // zkusi najit v databazi tento nazev s timto predkem - něco jako $sql = "SELECT id from kategorie WHERE name = '".mysql_real_escape_string($nazev)."' and parent_id=".$idNadrazene; // pokud je - vrati id // pokud neni - vlozi do db a vrati nove id // pro test jen toto static $i=1; return $i++; } $already_used = array('id'=>null, 'polozky'=>array());// případně 'id'=>0 pokud v databázi používáte nulu pro položky bez předka $produkt_kategorie = array(); foreach($xml->children() as $produkt) { $catname = (string)$produkt->kategorie; $kategoriep = explode("/", $catname); $kategorieppp =count($kategoriep); $kam= &$already_used; for($i=0;$i<$kategorieppp;$i++){ $kategoriep[$i]=trim($kategoriep[$i]); if(!isset($kam['polozky'][$kategoriep[$i]])){ $kam['polozky'][$kategoriep[$i]]=array('id'=>getCatId($kategoriep[$i], $kam['id']), 'polozky'=>array()); } $kam = &$kam['polozky'][$kategoriep[$i]]; } $produkt_kategorie[(string)$produkt['product_id']]=$kam['id']; } print_r($already_used); print_r($produkt_kategorie); ?> Po tom cyklu by měly být všechny kategorie nachystané v db a navíc v poli $produkt_kategorie bude pro každé id produktu nachystaná id kategorie. |
||
juraj Profil |
#5 · Zasláno: 31. 3. 2018, 01:41:42
Kajman:
Zdravím kód som vložil nejak takto a vypisuje chybu Warning: Illegal offset type in on line 46 a ako sa polia vkladaju do db a mena produktov nevypisuje dakujem vopred za pomoc <?php $xml=simplexml_load_file("https://dedra.blob.core.windows.net/cms/xmlexport/cs_xml_export.xml?ppk=285765") or die("Error: Cannot create object"); function getCatId($nazev, $idNadrazene) { $idNadrazene=($idNadrazene===null?'null':$idNadrazene); // zkusi najit v databazi tento nazev s timto predkem - něco jako $sql = "SELECT id from kategorie WHERE name = '".mysql_real_escape_string($nazev)."' and parent_id=".$idNadrazene; // pokud je - vrati id // pokud neni - vlozi do db a vrati nove id // pro test jen toto static $i=1; return $i++; } $already_used = array('id'=>null, 'polozky'=>array());// případně 'id'=>0 pokud v databázi používáte nulu pro položky bez předka $produkt_kategorie = array(); foreach($xml->children() as $produkt) { $catname =$produkt->kategorie; $kategoriep = explode("/", $catname); $kategorieppp =count($kategoriep); $kam= &$already_used; for($i=0;$i<$kategorieppp;$i++){ $kategoriep[$i]=trim($kategoriep[$i]); if(!isset($kam['polozky'][$kategoriep[$i]])){ $kam['polozky'][$kategoriep[$i]]=array('id'=>getCatId($kategoriep[$i], $kam['id']), 'polozky'=>array()); } $kam = &$kam['polozky'][$kategoriep[$i]]; } $produkt_kategorie[$produkt['product_id']]=$kam['id']; } print_r($already_used); print_r($produkt_kategorie); ?> |
||
Kajman Profil |
#6 · Zasláno: 1. 4. 2018, 12:52:23
Z jakého důvodu jste oddělal přetypování?
|
||
Časová prodleva: 6 let
|
0