Ich hatte ja mal überlegt dafür ein Plugin zu schreiben. Aber jetzt wurde es nach langer Zeit einfach mal richtig implementiert. Alle Attribute-Felder des Artikels stehen beim Export direkt zur Verfügung.
Int-Index und selbst ein Array, dadurch ist ein einzelner Artikel darin zu erkennen. Id gibt es in den Params direkt auch noch, also ist das kein Indikator für eine Batch-Request.
Falls man mal wie in der REST-API ein Bild per URL importieren möchte. Das kann der Fall sein, wenn man sich einen eigenen Importer für ein Format wie BMECat oder so geschrieben hat.
/** @var $media Media */
$media = $this->getMediaResource()->internalCreateMediaByFileLink(
$imageData['imgUrl']
);
$image->setMain(1); //1 is primary image, 2 is the rest
$image->setMedia($media);
$image->setArticle($article);
$image->setPath($media->getName());
$image->setExtension($media->getExtension());
$image->setDescription($media->getDescription());
Oft will man irgendwelche Aufgaben erledigen, nach dem ein Artikel gespeichert wurde. Z.B. kann es sein, dass man diesen Artikel prüfen und zu irgendwas hinzufügen möchte oder auch einfach mit dem Artikel verknüpfte andere Artikel mit updaten muss.
Es gibt ein entsprechendes Event, um auf das Speichern eines Artikel im Backend zu reagieren. Dabei wird ein allgemeines Controller-Event verwendet, wie es für jeden Controller erzeugt wird und gegen die dort aufgerufene Action geprüft.
public static function getSubscribedEvents(){
return [
'Enlight_Controller_Action_PostDispatch_Backend_Article' => 'articleRefresh',
];
}
public function articleRefresh(\Enlight_Event_EventArgs $args){
/** @var $subject \Enlight_Controller_Action */
$subject = $args->getSubject();
$request = $subject->Request();
if ($request->getActionName() === 'save') {
$params = $request->getParams();
//TODO do something
}
}
Nun fehlt noch, dass wir auch Änderungen mit bekommen, wenn ein Artikel über die REST-API geändert wird.
Der Controller ist "Articles" und das Module ist "Api". Also ist unser Event "Enlight_Controller_Action_PostDispatch_Api_Articles". Die Action ändern sich natürlich auch, weil wir bei der REST-API Actions wie PUT und POST haben.
public static function getSubscribedEvents(){
return [
'Enlight_Controller_Action_PostDispatch_Backend_Article' => 'articleRefresh',
'Enlight_Controller_Action_PostDispatch_Api_Articles' => 'articleRefresh',
];
}
public function articleRefresh(\Enlight_Event_EventArgs $args){
/** @var $subject \Enlight_Controller_Action */
$subject = $args->getSubject();
$request = $subject->Request();
if (in_array($request->getActionName(), ['save', 'put', 'post'])) {
$params = $request->getParams();
//TODO do something
}
}
Damit sollte man jede Änderung an einem Artikel mitbekommen.
Das gleiche Prinzip sollte entsprechend auch für alle anderen Controller funktionieren.
Wenn man bei Shopware über die REST-API einen Artikel lädt und dann wieder speichern möchte, kann es dazu kommen, dass ein Fehler auftritt, dass der Preis mit der Id X unbekannt sei. Das scheint wohl so gewollt sein. Deswegen sollte man beim Mappen auf Klassen die Id des Prices aus dem mainDetail des Artikeln einfach unterlassen.
//persist failed if a id is present
@JsonIgnore
private int id = 0;
Hier findet meine Post im Shopware-Forum zu dem Thema
Ein paar Dinge auf die Ich geachtet habe und am Ende wohl auch etwas gebracht haben. Jedensfalls gehen Klicks und Impressions seit den Änderungen weiter nach oben. Jetzt nicht so dass man dieSeiten als erfolgreich bezeichnen könnte.
Aber die Seiten werden gefunden!
* ist der Viewport über ein <meta>-Tag gesetzt? (Wegen Mobile-frundlichern Setien und Google)
* Hat der Title alle 4-5 wichtigen Keywords und ist auf für Menschen noch gut lesbar? (kein zu langer Name am Anfang!)
* enthalten Links als Text und Title Keywords?
* Wird Mapping über Rewrites verwendet um nciht immer auf index.php oder zu verlinken? (in der URL Keywords verwenden)
* werden <nav>-Tags verwendet?
* werden <article>,<header>,<section> Tags verwendet? (Gerade bei Blogs und Newsseiten)
* Ist der meta-Description Text für Besucher ansprechend? (Der Text ist eher für Menschen als für die Suchmaschinen-Bots)
* Wurde eine Sitemap bei Google eingereicht?
* sind die Ladezeiten der Seite ok? (nicht so wichtig, aber ist für die Besucher schöner. Zur Not.. Profiling und Code-Analyse)
Blog-entries by search-pattern/Tags:
Möchtest Du AdSense-Werbung erlauben und mir damit helfen die laufenden Kosten des Blogs tragen zu können?