Autor | Zpráva | ||
---|---|---|---|
soego Profil |
#1 · Zasláno: 17. 2. 2010, 13:21:40
Prosím o radu. Mám tabulku v databázi - zbozi. Potřeboval bych nějakým způsobem převést data z této tabulky do XML - aby odpovídala specifikaci na stránkách http://napoveda.seznam.cz/cz/specifikace-xml.html. (Potřebuju se nějak zaregistrovat na www.zbozi.cz) Ručně přepsat by to bylo peklo. Zkoušel jsem jednoduše vyexportovat data z tabulky do souboru XML přímo v MySQL, ale to neodpovídalo té specifikaci a proto mi to bylo k ničemu. Jsem v tomto začátečník a těmhle věcem moc nerozumím. Prosím o Vaší pomoc. Díky
|
||
soego Profil |
#2 · Zasláno: 18. 2. 2010, 12:00:12
[#1] soego
Budu vděčný za jakýkoliv nápad. Z rad co jsem tady na fóru vyčetl moc moudrý nejsem... Díky |
||
tiso Profil |
#3 · Zasláno: 18. 2. 2010, 12:02:42
soego: potrebuješ nejaký serverový skript (php), ktorý ti vytiahne dáta z databázy a výsledné xml poskladá.
|
||
soego Profil |
Našel jsem na netu tenhle script, ale pořád ho nějak nechápu. v databázio mám více tabulek. Jak zajistím aby si tento script všímal pouze tabulky zboží? a co ty proměnné v tomto scriptu? musím si je přejmenovat podle svých stránek? Díky za každou radu.
<?php /* Prestashop česky www.prestashopcesky.cz info@prestashopcesky.cz ************ Spolupracujeme: www.eshopsnadno.cz www.web-snadno.cz www.designsnadno.cz www.weboveprojekty.com ************ Tento sript je pro vyhledávač http://zbozi.cz Místo http://VASEDOMENA.cz vložte URL Vašeho internetového obchodu */ $shopUrl = 'http://www.sosmodelar.cz'; // adresa shopu včetně [url=http://]http://[/url] include(dirname(__FILE__).'/../config/config.inc.php'); // cesta ke config souboru error_reporting(0); $p=Product::getProducts(3, 0, 0, 'id_product', 'desc', false); // ceština je v databázi zapsaná pod číslem 3 $products=Product::getProductsProperties(3, $p); // ceština je v databázi zapsaná pod číslem 3 header("Content-Type: text/xml"); echo '<?xml version="1.0" encoding="utf-8"?> <SHOP>'; foreach ($products as $row) { $img=Product::getCover($row['id_product']); echo ' <SHOPITEM> <PRODUCT>'.str_replace("&", "&", $row['name']).'</PRODUCT> <DESCRIPTION>'.str_replace("&", "&",strip_tags($row['description_short'])).'</DESCRIPTION> <URL>'.$shopUrl.''.$row['link'].'</URL> <IMGURL>'.$shopUrl.'/img/p/'.$row['id_product'].'-'.$img['id_image'].'.jpg</IMGURL> <PRICE_VAT>'.($row['price']*1).'</PRICE_VAT> <AVAILABILITY>0</AVAILABILITY> </SHOPITEM>'; } echo '</SHOP>'; ?> |
||
tiso Profil |
#5 · Zasláno: 18. 2. 2010, 13:17:38
soego: tento skript pravdepodobne funguje ako doplnok pre prestashop, takže pokiaľ používaš iný systém tak ti nepôjde.
|
||
soego Profil |
#6 · Zasláno: 19. 2. 2010, 08:50:14
[#5] tiso
Dík za reakci. Mohl by si mě navést jak bych měl postupovat? Mám v databázi tabulku "zbozi" a potřeboval bych nějaký script který by to xml poskládal. Bohužel, nevím ani jak začít. Dekuju. |
||
nightfish Profil |
#7 · Zasláno: 19. 2. 2010, 10:01:14
soego:
„Mohl by si mě navést jak bych měl postupovat?“ musíš zjistit, které sloupce v tabulce odpovídají kterým položkám té XML specifikace a potom vytvořit nějaký skript, který načte údaje z databáze a vypíše je v té XML struktuře možná jednodušší bude obětovat pár stokorun a nechat to někoho naprogramovat (pokud nebude nutné data složitě dolovat a struktura databáze bude lehce pochopitelná, je to otázkou tak 20-40 minut práce) |
||
soego Profil |
[#7] nightfish
Díky za reakci. Už jsem se teď pokoušel o nějaký postup, který by byl pro mě dostatečný. Na lokální databázi mi fungoval, ale na doméně už ne. Je to sice hodně lamácký, ale mě by to prozatím i stačilo. Bohužel na doméně to napsalo toto: Chyba parsování XML: Dokument není dobře zformátován Adresa: http://www.sosmodelar.cz/xml_feed.php Číslo řádku 265, sloupec 54:<PRODUCT> CEN - Matrix 5 Monster Truck 1:5 4WD Plug & Drive</PRODUCT> Tady píšu script: <? $db_server = "xxx"; $db_login = "xxx"; $db_password = "xxx"; $db_database = "xxx"; mysql_connect($db_server, $db_login, $db_password); mysql_select_db($db_database); mysql_query("SET NAMES cp1250"); $vysledek = mysql_query ("SELECT * FROM zbozi"); header("Content-Type: text/xml"); echo("<?xml version=\"1.0\" encoding=\"windows-1250\" ?>\n"); echo("<SHOP>\n \n"); while ($row = mysql_fetch_assoc ($vysledek)) { echo ("<SHOPITEM>\n"); echo ("<PRODUCT>"); echo "".$row["nazev"].""; echo ("</PRODUCT>\n"); echo ("<PRICE_VAT>"); echo "".$row["cena"].""; echo ("</PRICE_VAT>\n"); echo ("</SHOPITEM>\n \n"); } echo("</SHOP>\n"); ?> Díky za pomoc Moderátor nightfish: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
|
||
nightfish Profil |
#9 · Zasláno: 19. 2. 2010, 10:54:32 · Upravil/a: nightfish
řádek 26 změň na
echo htmlspecialchars($row['cena']); EDIT: podle specifikace je nutné ještě uvést pár dalších značek, konkrétně DESCRIPTION, URL a DUES |
||
soego Profil |
#10 · Zasláno: 19. 2. 2010, 11:34:09
[#9] nightfish
Díky za radu. Opravdu se to rozběhlo. Ještě bych potřeboval jednu věc. Ten text hlavně v poli <description> se ukazuje dost blbě. Asi je to blbým kódováním. Nevíš jak bych to mohl vyřešit aby se mi ten text zobrazoval korektně? Díky za pomoc. Ještě přikládám script: <? $db_server = "xxx"; $db_login = "xxx"; $db_password = "xxx"; $db_database = "xxx"; mysql_connect($db_server, $db_login, $db_password); mysql_select_db($db_database); mysql_query("SET NAMES cp1250"); $vysledek = mysql_query ("SELECT * FROM zbozi"); header("Content-Type: text/xml"); echo("<?xml version=\"1.0\" encoding=\"windows-1250\" ?>\n"); echo("<SHOP>\n \n"); while ($row = mysql_fetch_assoc ($vysledek)) { echo ("<SHOPITEM>\n"); echo ("<PRODUCT>"); echo htmlspecialchars($row['nazev']); echo ("</PRODUCT>\n"); echo ("<DESCRIPTION>"); echo htmlspecialchars(strip_tags($row['popis'])); echo ("</DESCRIPTION>\n"); echo ("<URL>"); echo "http://www.sosmodelar.cz/index.php?art=".$row["id"].""; echo ("</URL>\n"); echo ("<DUES>"); echo htmlspecialchars($row['cena']); echo ("</DUES>\n"); echo ("</SHOPITEM>\n \n"); } echo("</SHOP>\n"); ?> |
||
soego Profil |
#11 · Zasláno: 19. 2. 2010, 11:45:12
Ještě doplním ten špatně kódovaný text - příklad: je nepěnivý přípravek pro zimní údržbu bazénů ve formě roztoku. Zabraňuje tvorbě řas a srážení vápenatých usazenin na stěnách bazénu. Tím napomáhá jarnímu čištění bazénu.Dávkování: 50 ml/m3 vody.
Díky za reakci. |
||
soego Profil |
#12 · Zasláno: 19. 2. 2010, 12:07:39
nightfish:
A ještě upřesním, že v databázi mám kódování cp1250_czech_cs a text se tam vkládá přes javascriptový editor tinyMCE. V databázi vypadá text tak jako ten co jsem uvedl do příkladu, ale ve výpisu na stránky už vypadá normálně. |
||
nightfish Profil |
#13 · Zasláno: 19. 2. 2010, 12:15:07 · Upravil/a: nightfish
soego:
ano, je to forma, kdy znaky s diakritikou jsou uloženy pomocí entit to ničemu nevadí, v XML souboru akorát bude potřeba všechny & nahradit za &, což zajišťuje volání htmlspecialchars takže text je nepěnivý přípravek pro zimní údržbu bude převeden na &nbsp;je nepěniv&yacute; př&iacute;pravek pro zimn&iacute; &uacute;držbu |
||
soego Profil |
#14 · Zasláno: 19. 2. 2010, 12:22:26
nightfish:
Moc děkuji za pomoc. |
||
soego Profil |
#15 · Zasláno: 19. 2. 2010, 13:26:33
nightfish:
Ještě mám přeci jen jeden dotaz. Když se mi vygeneruje ten xml kód a otevře se mi v IE jako běžná stránka - tak mám v textu například ve slově " " - bez amp; Ale když si zobrazím kód té stránky - ukázat zdrojový kód - tak tam mám: "&nbsp;" Dotaz zní: je to takhle správně, nebo musí být ten & vidět i v náhledu stránky? Teď tam mám jen & a ve zdrojovém kódu mám & Ještě připojím kus scriptu kterým ten úsek textu ošetřuju: echo ("<DESCRIPTION>"); echo htmlspecialchars(strip_tags($row['popis'])); //strip_tags na odstranění html značek... echo ("</DESCRIPTION>\n"); Díky |
||
nightfish Profil |
#16 · Zasláno: 19. 2. 2010, 13:43:59 · Upravil/a: nightfish
soego:
„Dotaz zní: je to takhle správně, nebo musí být ten & vidět i v náhledu stránky? Teď tam mám jen & a ve zdrojovém kódu mám &“ jak tak nad tím přemýšlím, tak jsem se zřejmě dopustil dezinformace, protože nemá smysl nahrazovat & v platných entitách správně tedy bude nejspíš echo htmlspecialchars(html_entity_decode(strip_tags($row['popis']))); html_entity_decode nahradí entity, které se načtou z databáze za příslušné znaky, a htmlspecialchars potom převede na entity jen ty znaky, u kterých je to potřeba (větší než, menší než, ampersand, ...) |
||
soego Profil |
#17 · Zasláno: 19. 2. 2010, 13:50:53
nightfish:
Díky za odpověď. Nemá smysl - jako že je to v tomto případě jedno? bude to fungovat tak jak to mám teď já? Raději napíšu odkaz na náhled xml souboru... http://www.sosmodelar.cz/xml_zbozi.xml Díky za reakci. |
||
nightfish Profil |
#18 · Zasláno: 19. 2. 2010, 13:53:45 · Upravil/a: nightfish
soego:
„jako že je to v tomto případě jedno? bude to fungovat tak jak to mám teď já?“ věřím, že soubor tak jak je teď, tak je sice syntakticky správné XML, avšak ve zbozi.cz by se místo "je nový čtyřfunkční přípravek" psalo "je nový čtyřfunkční přípravek" takže je potřeba provést úpravu, kterou jsem navrhnul v [#16] EDIT: je nutné, aby při otevření XML souboru v Internet Exploreru byl obsah "DESCRIPTION" bez problémů čitelný |
||
soego Profil |
#19 · Zasláno: 19. 2. 2010, 14:06:46
nightfish:
Udělal jsem tu opravu co si mi doporučil a opravdu se ten text hodně zpravil. Ale né úplně. Jestli na to ještě jednou mrkneš: http://www.sosmodelar.cz/xml_zbozi.xml Chybka je už v prvním produktu na 3. větě. První a druhá věta je ok. Díky moc |
||
soego Profil |
#20 · Zasláno: 19. 2. 2010, 14:17:14
nightfish:
Ještě doplnění - zdá se, že chybné zobrazení je jen ve výrazech - š a -. (š , &ndash) |
||
soego Profil |
#21 · Zasláno: 19. 2. 2010, 15:05:02
nightfish:
Jak je to možné, že se znaky "š" a "-" nepřeloží dobře jako jediné a zbytek ano? Díky |
||
soego Profil |
#22 · Zasláno: 19. 2. 2010, 15:06:43
nightfish:
Jak je to možné, že se znaky "š" a "-" nepřeloží dobře jako jediné a zbytek ano? Díky |
||
Kajman_ Profil * |
Asi neexistuje adekvátní byte v latin1 viz. http://www.php.net/function.html_entity_decode
Možná by pomohlo nastavit set names na utf-8 stejně tak encoding u xml a pak něco jako html_entity_decode(strip_tags($row['popis']),ENT_QUOTES,'UTF-8') |
||
Časová prodleva: 15 let
|
0