Hallo, Ich möchte jede verfügbare Variante mit einem eigenen Zusatz in der SEO Url versehen. Am einfachsten fände ich, wenn man das Feld ‘Zusätzlicher Text’ in den Stammdaten der Variante verwenden könnte. Die Variable habe ich aber in dieser Liste (http://wiki.shopware.de/SEO-Router-Einstellungen_detail_912.html) nicht gefunden. Dort steht aber, das z.B. Freitext-1 als Variable zur Verfügung steht. Also habe ich dort einen Eintrag gemacht und unter Grundeinstellungen/Storefront/SEO-Routereinstellungen im ‘SEO-Urls Artikel Template’ am Ende die entsprechende Variable hinzugefügt. Im Ergebnis bekomme ich zwar beim Aufruf der ersten Variante des Artikels im Frontend die Variable an den Url angehangen, aber beim Auswahl einer anderen Variante, bleibt die Adresse genauso bestehen, wie auch bei der ersten. Mache ich etwas falsch, oder kann man das System dazu bewegen, für jede Variante eine eigene SEO freundliche Adresse auszugeben?? Vielen Dank für Eure Hilfe!!
Hallo, das wird vom System nicht unterstützt. Shopware generiert je Artikel eine URL. Also unabhängig von den ggf. vorhandenen Varianten. Die Variaten werden von der SEO-Engine nicht herangezogen, da auch je Variante kein eigener Aufruf möglich ist.
Danke für die Info! Das erscheint aber sehr unpraktisch. Beispiel: Ich verkaufe Shirts als Produkte mit verschiedenen Größen, Farben und augfgedruckten Motiven. Wenn ich das dann das Shirt No.1 in rot, XL und mit Aufdruck “Blume” besonders bewerben will, per Deeplink, Newsletter, Adwords, Google Shopping – dann geht das garnicht ?? Es muss doch irgendeine Variable übertragen werden, sonst würde doch die Seite mit verschiedenen Varianten nicht angezeigt werden können? Ist es also evtl. mit wenig Aufwand möglich, der SEO-Engine diese Variante mitzugeben?
Hallo, wir haben ein ähnliches Problem. Einer unserer Kunden hat viele Produkte in unterschiedlichen Farben im Angebot. Beim Export wird aber nur der Link zum Hauptartikel exportiert. Dadurch blocken Preissuchmaschinen alle anderen Varianten, da diese ja scheinbar Duplikate sind. Shopware-Intern muss aber eine Unterscheidung zwischen den Artikeln bekannt sein, sonst könnte man diese ja nicht bestellen. Diese Unterscheidung müsste man jetzt irgendwie auf den Deeplink übertragen können, sei es durch eine eigene Artikel-ID oder durch ein Anhängsel an der URL. Falls jemand eine Lösung für das Problem hat, oder zumindest einen Ansatz, immer her damit
Hallo, nachdem ich ebenfalls dort hängen geblieben bin, habe ich mir das ganze etwas genauer angeschaut und habe für den ersten Step ein kleines Plugin geschrieben, welches zumindest ein Deep-Link ermöglicht und das Formular bei der Auswahl der varianten auf den entsprechenden Deep-Link weiterleitet. Zumindest wäre das ein erster Schritt in die gewünschte Richtung. Was noch fehlt ist ein Umschreiben der Links im Warenkorb, Merkzettel etc. , dazu kenne ich den Shop jedoch noch zu wenig. Die URLs werden dann entsprechend umgewandelt, z.B. vom Hauptartikel (ID=1) /detail/index/sArticle/1
zum Variantenartikel (ID=6) /detail/index/sArticle/1/dl/6
Update: Im Warenkorb werden jetzt ebenfalls die Links auf die Variante verwendet. [code]<?php /**
-
Shopware Plugin DeepLinks for article variants
-
testet on version shopware CE 4.1 with basic article items and simple variants like color and size
-
@todo Rewrite URLs on basket, wish list and other, I don’t know how this can do…
*/
class Shopware_Plugins_Frontend_DeepLinks_Bootstrap extends Shopware_Components_Plugin_Bootstrap
{/**
*-
@return string
*/
public function getLabel()
{
return ‘DeepLinks to articles variants’;
}
/**
*-
@return string
*/
public function getVersion()
{
return ‘0.0.2’;
}
/**
*-
@return array
*/
public function getInfo()
{
return array(
‘version’ => $this->getVersion(), ‘autor’ => ‘Peter Lachmund’, ‘label’ => $this->getLabel(), ‘license’ => ‘free’, ‘copyright’ => ‘Copyright © 2013, Peter Lachmund’, ‘support’ => ‘peter.lachmund@gmail.com’ ); } /** * Install plugin method * * @return bool */ public function install() { //we hook us in controller predispatch to change parameters as we need it $this->subscribeEvent( ‘Enlight_Controller_Action_PreDispatch’, ‘onPreDispatch’ ); //hook into basket article generator to add deep link parameter $this->subscribeEvent( ‘Shopware_Modules_Basket_GetBasket_FilterItemEnd’, ‘onShopware_Modules_Basket_GetBasket_FilterItemEnd’ ); return TRUE; } /** * * @param Enlight_Event_EventArgs $args * @return void */ public function onPreDispatch(Enlight_Event_EventArgs $args) { $request = $args->getRequest(); if ($this->checkVariantAndForward($request, $args->getSubject())) { return; } if ($this->checkDeepLinkAndConvert($request)) { return; } } /** * Here we check if we get a requested variant, forward to deep link url if we found what we are looking for. * * @param type $request * @param type $subject * @return boolean */ private function checkVariantAndForward($request, $subject) { if ($request->getControllerName() == ‘detail’ && $request->getActionName() == ‘index’ && $request->getPost(‘group’)) { $id = (int) $request->sArticle; if (empty($id)) { return FALSE; } $article = Shopware()->Modules()->Articles()->sGetArticleById($id); if (empty($article) || empty($article[“articleName”])) { return FALSE; } //if found an article now we redirect to our own deeplink $url = $request->getPathInfo(); $newurl = preg_replace(’~/sArticle/\d+~i’, ‘$0/dl/’ . $article[‘articleDetailsID’], $url); if ($newurl == $url) { return FALSE; } $subject->redirect($newurl); return TRUE; } } /** * Check request if deep link is requested. * Convert request to group parameters. * * @param type $request * @return boolean */ private function checkDeepLinkAndConvert($request) { $url = $request->getPathInfo(); $deepLink = (int) $request->getParam(‘dl’, 0); $matches = array(); if ($request->getControllerName() == ‘detail’ && $request->getActionName() == ‘index’ && $deepLink > 0) { $id = (int) $request->sArticle; if (empty($id)) { return FALSE; } /** * copied from class sConfigurator->getConfiguratorOptionsForVariantId */ $builder = Shopware()->Models()->createQueryBuilder(); $builder->select(array(‘options’)) ->from(‘Shopware\Models\Article\Configurator\Option’, ‘options’) ->innerJoin(‘options.articles’, ‘details’, ‘WITH’, ‘details.id = :variantId’) ->addOrderBy(‘options.position’) ->setParameter(‘variantId’, $deepLink); $result = $builder->getQuery()->getArrayResult(); /** * Now convert to group array and set as param */ if (is_array($result) && count($result) > 0) { $group = array(); foreach ($result as $entry) { $group[$entry[‘groupId’]] = $entry[‘id’]; } //now we set the param group, wich is used in detail controller $request->setPost(‘group’, $group); return TRUE; } } return FALSE; } /** * convert article detail link * * @param Enlight_Event_EventArgs $args */ public function onShopware_Modules_Basket_GetBasket_FilterItemEnd(Enlight_Event_EventArgs $args) { $article = $args->getReturn(); $args->setReturn($this->convertArticleLinks($article)); } public function onShopware_Modules_Articles_GetArticleById_FilterResult(Enlight_Event_EventArgs $args) { $article = $args->getReturn(); $args->setReturn($this->convertArticleLinks($article)); } /** * convert article detail links in article array * */ private function convertArticleLinks(array $article) { if (empty($article) || empty($article[“articleID”])) { return $article; } $deepLinkID = 0; //article comes from basket view if (isset($article[‘additional_details’]) && is_array($article[‘additional_details’]) && isset($article[‘additional_details’][‘articleDetailsID’])) { $deepLinkID = (int) $article[‘additional_details’][‘articleDetailsID’]; } elseif (isset($article[‘articleDetailsID’])) { //article comes from sGetArticleById $deepLinkID = (int) $article[‘articleDetailsID’]; } /** * now ad our deep link parameter to url */ if ($deepLinkID > 0) { $article[‘linkDetails’] .= ‘&dl=’.$deepLinkID; } return $article; } } [/code]
-
@return string
Vielen Dank für das tolle Plugin, funktioniert immer noch prima. Möchte aber Neulinge (wie mich) noch eine längere Installationsanleitung mitgeben. 1. Erstellt zuerst folgenden Ordnerbaum: (über FTP) /engine/Shopware/Plugins/Local/Frontend/Deeplinks/ 2. in den Ordner Deeplinks erstellt ihr dann eine Datei: Bootstrap.php In diese könnt ihr den Plugin-Code reinkopieren und abspeichern. 3. Geht im Adminbereich eurer Shopwareseite auf Einstellungen -> Plugin Manager. Unter Lokale Erweiterungen sollte es dann auftauchen und lässt sich dann installieren.
Hallo, erst einmal vielen Dank für das coole Plugin. Hast du vielleicht eine Idee wie ich die neuen Deeplinks für den Produktexport zu Google Shopping aufbereiten kann? Welche Variable muss ich dort übergeben?
Hallo, leider habe ich mit Shopware nicht weiter gearbeitet bzw. beschäftigt, so dass ich im Moment keine hilfreichen Antworten geben kann.
Gibt es Erfahrungen hiermit bei der Shopware Version 4.3? Die Funktion “checkDeepLinkAndConvert” arbeitet nicht mehr korrekt.