Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added limit functionality & some code inspection fixes #3

Open
wants to merge 1 commit into
base: master
from
Open
Changes from all commits
Commits
File filter...
Filter file types
Jump to…
Jump to file or symbol
Failed to load files and symbols.
+62 −42
Diff settings

Always

Just for now

Copy path View file
@@ -1,7 +1,7 @@
CSV Exporter
============

Eine Sammlung von Skripten, die über einen Cronjob Shop-Produkte in eine CSV-Datei exportiert.
Eine Sammlung von Skripten, die über einen Cronjob Shop-Produkte in eine CSV-Datei exportiert.

Installieren und Konfigurieren
------------------------------
@@ -10,16 +10,16 @@ Installieren und Konfigurieren
modules/marm/csvexporter

2. Konfigurieren, erweitern oder schreiben Sie neue Exporter.
Einige Exporter sind bereits enthalten. An diesen können Sie sich orentieren.
Einige Exporter sind bereits enthalten. An diesen können Sie sich orentieren.
Die Exporter liegen im Verzeichnis `exporter`.

3. Nun können Sie Ihre Exportscripte aufrufen und die CSV-Datei erstellen.
Dies können Sie entweder manuell durchführen oder über einen Cronjob automatisieren.
3. Nun können Sie Ihre Exportscripte aufrufen und die CSV-Datei erstellen.
Dies können Sie entweder manuell durchführen oder über einen Cronjob automatisieren.
Der Aufruf lautet:

shopurl.de/modules/marm/csvexporter/exporter/IHR-EXPORTER/IHR-EXPORTER.php

4. Schon fertig. Sie können nun Ihre CSV-Datei an die Preisportale melden.
4. Schon fertig. Sie können nun Ihre CSV-Datei an die Preisportale melden.


Hinweise
@@ -40,36 +40,37 @@ Grundkonfiguration

Im oberen Bereich Ihres Exporterscripts finden Sie die Konfiguration.
Diese ist in der Variablen `$_config` als Array hinterlegt.
Folgende Optionen stehen Ihnen zur Verfügung.
Folgende Optionen stehen Ihnen zur Verfügung.

'export_parents' => Anzeigen von Eltern Produkten in der CSV-Datei
'filename' => Pfad und Dateiname
'limit' => Limit für Export
'debug' => debug Option An/Aus, für Entwickler
'silent' => debug Ausgaben An/Aus, für Entwickler
'limit' => Limit für Export
'debug' => debug Option An/Aus, für Entwickler
'silent' => debug Ausgaben An/Aus, für Entwickler
'header' => Kopfzeile An/Aus
'langid' => Sprachid, für welche Sprache Exportiert werden soll
'langid' => Sprachid, für welche Sprache Exportiert werden soll
'shippingcost' => Versand Optionen
'productLinkPrefix' => Standard Produkt URL Präfix
'productLinkPrefix' => Standard Produkt URL Präfix
'geizhalsProductLinkParameters' => Exporter spezifischer Produkt Parameter
'imageurl' => Pfad der zu Exportierenden Produkt Bilder
'inStock' => Ausgabe, wenn Produkt Lageberstand hat
'outOfStock' => Ausgabe, wenn Produkt kein Lagerbestand hat
'cutFirstPosArticlenumber' => Die ersten x Zeichen der Artikelnummer abschneiden
'generalVat' => MwSt für die Nettopreise
'generalVat' => MwSt für die Nettopreise
'netPrices' => Nettopreise An/Aus
'categoryPathSeparator' => Trennzeichen für die Kategoriepfade
'categoryPathSeparator' => Trennzeichen für die Kategoriepfade
'quote' => Felder in Anführungszeichen true/false

CSV-Konfiguration
-----------------

Nun geht es darum, die Ausgabe der Daten zu steuern.
In der Variablen `$_entry` werden die Felder, die Sie exportieren möchten, angegeben.
In der Variablen `$_entry` werden die Felder, die Sie exportieren möchten, angegeben.

Das Array enthält folgende Optionen.
Das Array enthält folgende Optionen.

'header' => Spalten Namen für die CSV-Datei.
'fields' => Spalten Inhalte für die CSV-Datei.
'header' => Spalten Namen für die CSV-Datei.
'fields' => Spalten Inhalte für die CSV-Datei.
'separator' => Trennzeichen der CSV-Datei.

Hier noch einige Tipps:
@@ -80,27 +81,27 @@ Hier noch einige Tipps:

- Die Spalteninhalte werden in Markern `#IHRER MARKER#` geschrieben und mit `|` getrennt.

- Man kann Marker miteinander verknüpft in einem Datensatz ausgeben, die werden mit `+` geschrieben.
- Man kann Marker miteinander verknüpft in einem Datensatz ausgeben, die werden mit `+` geschrieben.
Das sieht dann so aus: `#Marker 1#+#Marker 2#`.

- Oder man möchte einen Fallback haben, dann werden die Marker mit ein `/` geschrieben.
- Oder man möchte einen Fallback haben, dann werden die Marker mit ein `/` geschrieben.
Das bedeutet wenn `#Marker 1#` leer ist wird `#Marker 2#` ausgegeben.
Das sieht dann so aus: `#Marker 1#/#Marker 2#`.

- Die Operatoren können gemischt werden und einen Spalteninhalt erstellen der aus Fallback und Verknüpfung besteht.
- Die Operatoren können gemischt werden und einen Spalteninhalt erstellen der aus Fallback und Verknüpfung besteht.
zB. `#Marker 1#/#Marker 2#+#Marker 3#`, hier wird entweder Marker 1 oder Marker 2 mit Marker 3 ausgegeben.

Eigene Konfigurationen
----------------------

Im unteren Bereich Ihres Exporterscripts können Sie nun eigene Funktionen schreiben.
Alle Funktionen aus der **marmCsvExporter.php** können überschrieben und erweitert werden.
Im unteren Bereich Ihres Exporterscripts können Sie nun eigene Funktionen schreiben.
Alle Funktionen aus der **marmCsvExporter.php** können überschrieben und erweitert werden.

Eine nicht vorhandene Spalte hinzufügen, aber wie?
Eine nicht vorhandene Spalte hinzufügen, aber wie?

Bsp.: Wir wollen das Attribut **Farbe** der einzelnen Variantenprodukte in die CSV-Datei exportiert haben.

Dazu schreiben wir im `header` den neuen Spaltennamen `Farbe`. In das Feld `fields` kommt ein neuer Marker namens `#color#`.
Diesen Marker müssen wir nun dynamisch befüllen. Marker werden in der Funktion `getDataByMarker($marker)` definiert, diese müssen wir erweitern.
Hier bekommt der Marker einen eigenen Funktionsaufruf. Danach können wir die eigentliche Funktion in unserem Exporterscript schreiben,
Diesen Marker müssen wir nun dynamisch befüllen. Marker werden in der Funktion `getDataByMarker($marker)` definiert, diese müssen wir erweitern.
Hier bekommt der Marker einen eigenen Funktionsaufruf. Danach können wir die eigentliche Funktion in unserem Exporterscript schreiben,
die die Farbe der Produkte ausliest. Als Beispiel sehen Sie sich Die Funktion `getSeoUrl()` in den mitgelieferten Exportern von Geizhals oder Google.
Copy path View file
@@ -51,6 +51,7 @@ in the protected variable `$ _config`
'generalVat' => general vat value for net prices
'netPrices' => net prices true/false
'categoryPathSeparator' => category path separator
'quote' => fields in quotes true/false

CSV configurations
------------------
@@ -90,10 +91,10 @@ in the protected variable `$ _Entry`

- In `fields` comes a new marker `#color#`.

- Now has the `getDataByMarker($marker)` from the **marmCsvExporter.php** be extended in our exporter to a marker.
- Now has the `getDataByMarker($marker)` from the **marmCsvExporter.php**be extended in our exporter to a marker.

- The new marker we give a new function.

- And finally we actually function in our exporter written reads out the color of the variants products and passes the marker.
- And finally we actually function in our exporter writtenreads out the color of the variants products and passes the marker.


Copy path View file
@@ -89,12 +89,14 @@ public function start_export()
//retrieve the children and print them.
public function handleParents($parents)
{
$i = 0;
foreach($parents as $parent)
{
//check if is single (OXVARNAME is filled for parent with childs)
if($parent['OXVARNAME'] == '')
{
$this->writeEntryToFile($parent);
$i++;
}
else
{
@@ -107,11 +109,18 @@ public function handleParents($parents)
foreach($children as $child)
{
$this->writeEntryToFile($child);
$i++;
}
}
}
if (isset($this->tempParent)) unset($this->tempParent);
if (isset($this->tempMainCategoryId)) unset($this->tempMainCategoryId);
if(is_numeric($this->_config['limit'])){
if($i >= $this->_config['limit']){
break;
}
}
}
}
@@ -212,9 +221,9 @@ public function getDataByMarker($marker)
$unitMeasure = '';
break;
default:
$returnValue = preg_match('/[0-9]*/', $this->tempProduct['OXUNITNAME'], $matches, PREG_OFFSET_CAPTURE);
preg_match('/[0-9]*/', $this->tempProduct['OXUNITNAME'], $matches, PREG_OFFSET_CAPTURE);
$amount = $this->tempProduct['OXUNITQUANTITY'] * $matches[0][0];
$returnValue = preg_match('/[^0-9 ].*/', $this->tempProduct['OXUNITNAME'], $matches, PREG_OFFSET_CAPTURE);
preg_match('/[^0-9 ].*/', $this->tempProduct['OXUNITNAME'], $matches, PREG_OFFSET_CAPTURE);
$unitMeasure = $matches[0][0];
break;
}
@@ -290,13 +299,12 @@ public function getDataByMarker($marker)
/**
* replace the values from the template and write article to file
*
* @param string oxid
* @return void
*/
public function writeEntryToFile($oxarticle)
{
$col=0;
$conc=0;
$fb=0;
$this->tempProduct = $oxarticle; //to get values for the markers
$dataarray = $this->entryFields;
@@ -474,6 +482,8 @@ public function cacheGoogleCategoriesTitles()
/**
* Get the shipping cost
*
* @param string $sCountryId
* @return string
*/
public function getShippingcost($sCountryId = 'de')
@@ -512,6 +522,8 @@ public function getShippingcost($sCountryId = 'de')
/**
* Get an Attribute
*
* @param $attr
* @return string
*/
public function getAttribute($attr)
@@ -632,7 +644,8 @@ public function getParentProducts()
/**
* Selects the basic entries (oxarticles + oxartextends) from the database
*
* @return array with products
* @param $parentid
* @return array|null
*/
public function getChildren($parentid)
{
@@ -664,7 +677,7 @@ public function getChildren($parentid)
/**
* Replaces the placeholders of a single product
*
* @return void
* @return mixed
*/
public function getCondition()
{
@@ -675,7 +688,7 @@ public function getCondition()
/**
* Replaces the placeholders of a single product
*
* @return void
* @return mixed
*/
public function getImageLink()
{
@@ -782,7 +795,8 @@ public function getManufacturesTitle()
/**
* get content page text
*
* @return string
* @param $ident
* @return mixed
*/
public function getContentPageText($ident)
{
@@ -1025,7 +1039,8 @@ public function getUVP()
/**
* exchange [{ oxcontent ident="..." }] in long description
*
* @return string
* @param $description
* @return mixed
*/
public function exchOxContent($description)
{
@@ -27,7 +27,7 @@ class marmGeizhalsExporter extends marmCsvExporter
'export_parents' => 0, // Should parents be shown in file (not available !!!)
'filename' => '../../../../../export/geizhals.txt', // Export filename relative to this file
// 'filename' => '../geizhals.txt', // Export filename relative to this file (for local test)
'limit' => 500, // limit for export (not available !!!)
'limit' => 500, // limit for export
'debug' => false, // enable / disable debug-output
'silent' => true, // enable / disable regular messages
'header' => true, // enable / disable headerline
@@ -45,8 +45,8 @@ class marmGeizhalsExporter extends marmCsvExporter
'cutFirstPosArticlenumber' => 3, // cut the first n position from the article number
'generalVat' => 19, // general vat value for net prices
'netPrices' => true, // net prices true/false
'categoryPathSeparator' => '>'); // category path separator
'categoryPathSeparator' => '>' // category path separator
);
protected $_entry = array(
'header' => "Bezeichnung;Hersteller;Herst.Nr.;Preis;Verfügbarkeit;VersandDE;EAN;Deeplink;Artikelnummer;Beschreibung;Kategorie;Bildlink",
@@ -28,7 +28,7 @@ class marmGoogleExporter extends marmCsvExporter
'filename' => '../../../../../export/ggex-6b66d82af984e5ad46b9cb27b1ef8aae.txt', // Export filename relative to this file
// 'filename' => '../../../../../export/google.txt', // Export filename relative to this file
// 'filename' => '../google.txt', // Export filename relative to this file (for local test)
'limit' => 500, // limit for export !!!not available
'limit' => 500, // limit for export
'debug' => false, // enable / disable debug-output
'silent' => false, // enable / disable regular messages
'header' => true, // enable / disable headerline
@@ -65,6 +65,8 @@ class marmGoogleExporter extends marmCsvExporter
/**
* google specific
* Calls the method from marmCsvExporter and replaces the value
*
* @param string $sCountryId
* @return string
*/
public function getShippingcost($sCountryId = 'de')
@@ -28,7 +28,7 @@ class marmPreisroboterExporter extends marmCsvExporter
'export_parents' => 0, // Should parents be shown in file (not available !!!)
'filename' => '../../../../../export/prex-05848170643ab0deb9914566391c0c63.txt', // Export filename relative to this file
// 'filename' => '../preisroboter.txt', // Export filename relative to this file (for local test)
'limit' => 500, // limit for export (not available !!!)
'limit' => 500, // limit for export
'debug' => false, // enable / disable debug-output
'silent' => false, // enable / disable regular messages
'header' => true, // enable / disable headerline
@@ -46,7 +46,8 @@ class marmPreisroboterExporter extends marmCsvExporter
'cutFirstPosArticlenumber' => 0, // cut the first n position from the article number
'generalVat' => 19, // general vat value for net prices
'netPrices' => false, // net prices true/false
'categoryPathSeparator' => '>'); // category path separator
'categoryPathSeparator' => '>' // category path separator
);
protected $_entry = array(
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.