Autor Zpráva
soego
Profil
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
[#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
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("&", "&amp;", $row['name']).'</PRODUCT>
    <DESCRIPTION>'.str_replace("&", "&amp;",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
soego: tento skript pravdepodobne funguje ako doplnok pre prestashop, takže pokiaľ používaš iný systém tak ti nepôjde.
soego
Profil
[#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
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
řá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
[#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
Ještě doplním ten špatně kódovaný text - příklad: &nbsp;je nepěniv&yacute; př&iacute;pravek pro zimn&iacute; &uacute;držbu baz&eacute;nů ve formě roztoku. Zabraňuje tvorbě řas a sr&aacute;žen&iacute; v&aacute;penat&yacute;ch usazenin na stěn&aacute;ch baz&eacute;nu. T&iacute;m napom&aacute;h&aacute; jarn&iacute;mu či&scaron;těn&iacute; baz&eacute;nu.D&aacute;vkov&aacute;n&iacute;: 50&nbsp;ml/m3 vody.

Díky za reakci.
soego
Profil
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
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 &amp;, což zajišťuje volání htmlspecialchars
takže text &nbsp;je nepěniv&yacute; př&iacute;pravek pro zimn&iacute; &uacute;držbu
bude převeden na
&amp;nbsp;je nepěniv&amp;yacute; př&amp;iacute;pravek pro zimn&amp;iacute; &amp;uacute;držbu
soego
Profil
nightfish:
Moc děkuji za pomoc.
soego
Profil
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ě "&nbsp;" - bez amp; Ale když si zobrazím kód té stránky - ukázat zdrojový kód - tak tam mám: "&amp;nbsp;"

Dotaz zní: je to takhle správně, nebo musí být ten &amp; vidět i v náhledu stránky? Teď tam mám jen & a ve zdrojovém kódu mám &amp;

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
soego:
Dotaz zní: je to takhle správně, nebo musí být ten &amp; vidět i v náhledu stránky? Teď tam mám jen & a ve zdrojovém kódu mám &amp;
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
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
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&yacute; čtyřfunkčn&iacute; př&iacute;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
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
nightfish:
Ještě doplnění - zdá se, že chybné zobrazení je jen ve výrazech - š a -. (&scaron; , &ndash)
soego
Profil
nightfish:
Jak je to možné, že se znaky "š" a "-" nepřeloží dobře jako jediné a zbytek ano?
Díky
soego
Profil
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')

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: