In diesem Artikel wird beschrieben, wie man aus Herstellerdaten mit Hilfe von PHP und mySQL-Datenbanken Scripte erzeugt, welche diese Herstellerdaten in GDL-Scripte konvertiert.
Der Vorteil dieser Methode ist, dass man die Herstellerdaten immer 1:1 übertragen bekommt und dass es nicht durch falsche Abschreiben zu Fehlern kommen kann.
Das Prinzip besteht aus folgenden Schritten: Export der Exceldatei, Import in die mySQL-Datenbank, PHP-Script zum Auslesen der Datenbankinhalte in Kombination mit GDL-Script-Schnipseln.
Folgende Schritte sind im Einzelnen notwendig, um Herstellerdaten aus einer Excel automatisiert in ein GDL-Script zu überführen:
- Hersteller-Excel in Open Office öffnen, da Excel beim CSV-Export Sonderzeichen falsch ausgibt
- Das ® (Registered) Symbol (und andere Sonderzeichen) muss entfernt werden, falls vorhanden.
- ACHTUNG: manchmal klappt der Export nicht. Aus Open Office klappt es aber in jedem Fall.
- PHPadmin auf Deinem Server öffnen, auf den Reiter „Operationen“ gehen und Inhalt der entfernen CSV-Tabelle von vorhin in Datenbank importieren, dabei einen TAB als Spaltentrenner (aus Coda, Sublime Text oder einem anderen Texteditor) reinkopieren.
Manchmal muss man den Import in SQL auch mehrfach versuchen. - PHP Script schreiben, welches auf die Datenbank zugreift, und welches die benötigten Werte in der richtigen Reihenfolge ausgibt. Dazu die notwendigen GDL-Codeabschnitte zwischen die abgefragten Datenbankabschnitte einfügt.
- PHP-Webseite im Browser aufrufen und den angezeigten Text aus dem Browser herauskopieren und in das entsprechende GDL-Script einfügen.
Ein Beispielscript (alter PHP-Code: gilt nicht mehr für PHP 7 aufwärts) für den Aufruf der Datenbank „connect_database.inc.php“
<?php
$dp = @mysql_connect("localhost", "root", "******");
@mysql_select_db("Hersteller_Update_2019", $dp) ;
function da_ba_fra($was, $von, $id)
{
$sql = "SELECT $was FROM $von WHERE id='$id'";
$result = mysql_query($sql) or die(mysql_error());
while ($row = mysql_fetch_assoc($result)) {
return "$row[$was]";
}
}
?>
Und das dazugehörige Script zum Auslesen der Datenbank und Erzeugen des GDL-Codes „Master_GDL.php“:
<!doctype html>
<html>
<head>
<title>Hersteller GDL EXPORT</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" type="text/css" href="gdl.css" />
</head>
<body>
<?php
error_reporting (E_ALL);
include ("includes/connect_database.inc.php");
$comment = "! ---------------------------------------------------------------------- !<br>";
// ANZAHL SPALTEN + ZEILEN
$tablename = "Update_2019";
$sql = "SELECT * FROM $tablename";
$result = mysql_query($sql) or die(mysql_error());
$anzahlspalten = mysql_num_fields($result) ;
$datensaetze = mysql_num_rows($result);
//echo $datensaetze;
// $datensaetze = 4;
// AUSGABE DER SPALTENTITEL
for ($zal = 1; $zal <= $anzahlspalten - 1; $zal = $zal + 1){
$sql = "SELECT * FROM $tablename";
$result = mysql_query($sql) or die(mysql_error());
$fieldname[$zal] = mysql_field_name($result, $zal);
}
// SCHLEIFE durch die DATENSÄTZE
for ($id = 1; $id <= $datensaetze; $id = $id + 1){
echo $comment;
$zal = $zal + 1;
// = DATEINAME DEFINTION : SPALTE 24
$groesse = da_ba_fra($fieldname[6], $tablename, $id);
$groesse = array_values(preg_split("#\ns*\n#Uis", $groesse))[0];
$dateiname = da_ba_fra($fieldname[24], $tablename, $id);
$dateiname = substr($dateiname, 0, -4);
$bezeichnung = da_ba_fra($fieldname[2], $tablename, $id);
$produkt = da_ba_fra($fieldname[3], $tablename, $id);
$artikel = da_ba_fra($fieldname[4], $tablename, $id);
$farbnummer = da_ba_fra($fieldname[9], $tablename, $id);
$bezeichnung_lang = $bezeichnung . "_" . $produkt . "_" . $artikel . "_" . $farbnummer;
// RGB-Wert : SPALTE 25, 26. 27
$RGB_R = number_format(da_ba_fra($fieldname[28], $tablename, $id)/255, 4);
$RGB_G = number_format(da_ba_fra($fieldname[29], $tablename, $id)/255, 4);
$RGB_B = number_format(da_ba_fra($fieldname[30], $tablename, $id)/255, 4);
// TEXTUR
echo "DEFINE TEXTURE '" . $bezeichnung_lang ."_tex' '". $dateiname;
echo ".jpg', " . da_ba_fra($fieldname[25], $tablename, $id)/1000 .", " . da_ba_fra($fieldname[26], $tablename, $id)/1000 . ", 5, 0 <br>" . "\r\n" ;
// MATERIAL
$zal = $zal + 1;
echo "DEFINE MATERIAL '" .$bezeichnung_lang ."' 24, " . $RGB_R .", ". $RGB_G .", ". $RGB_B . ", " . "ind(fill, '" . $groesse . "'), 0, ind(texture, '" .$bezeichnung_lang . "_tex')<br>" . "\r\n";
}
?>
</body>
</html>
Und ein Teil der Ausgabe:
! ---------------------------------------------------------------------- !
DEFINE TEXTURE 'hersteller_xyz_00_tex' 'hersteller_xyz_00.jpg', 0.3, 0.3, 5, 0
DEFINE MATERIAL 'hersteller_xyz_00' 24, 0.8941, 0.8667, 0.7922, ind(fill, '15,00 m x 1,22 m'), 0, ind(texture, 'hersteller_xyz_00_tex')
! ---------------------------------------------------------------------- !
DEFINE TEXTURE 'hersteller_xyz_01_tex' 'hersteller_xyz_01.jpg', 0.3, 0.3, 5, 0
DEFINE MATERIAL 'hersteller_xyz_01' 24, 0.7961, 0.7765, 0.7529, ind(fill, '15,00 m x 1,22 m'), 0, ind(texture, 'hersteller_xyz_01_tex')
! ---------------------------------------------------------------------- !
DEFINE TEXTURE 'hersteller_xyz_02_tex' 'hersteller_xyz_02.jpg', 0.3, 0.3, 5, 0
DEFINE MATERIAL 'hersteller_xyz_02' 24, 0.5569, 0.5255, 0.5137, ind(fill, '15,00 m x 1,22 m'), 0, ind(texture, 'hersteller_xyz_02_tex')
! ---------------------------------------------------------------------- !
DEFINE TEXTURE 'hersteller_xyz_03_tex' 'hersteller_xyz_03.jpg', 0.3, 0.3, 5, 0
DEFINE MATERIAL 'hersteller_xyz_03' 24, 0.3529, 0.3216, 0.3098, ind(fill, '15,00 m x 1,22 m'), 0, ind(texture, 'hersteller_xyz_03_tex')
! ---------------------------------------------------------------------- !
DEFINE TEXTURE 'hersteller_xyz_04_tex' 'hersteller_xyz_04.jpg', 0.3, 0.3, 5, 0
DEFINE MATERIAL 'hersteller_xyz_04' 24, 0.9490, 0.9098, 0.8039, ind(fill, '15,00 m x 1,22 m'), 0, ind(texture, 'hersteller_xyz_04_tex')
! ---------------------------------------------------------------------- !
DEFINE TEXTURE 'hersteller_xyz_05_tex' 'hersteller_xyz_05.jpg', 0.3, 0.3, 5, 0
DEFINE MATERIAL 'hersteller_xyz_05' 24, 0.9255, 0.8745, 0.7490, ind(fill, '15,00 m x 1,22 m'), 0, ind(texture, 'hersteller_xyz_05_tex')
! ---------------------------------------------------------------------- !