Eigene Elemente für die Einkaufswelten erstellen

Hallo, kann mir jemand helfen und einen Ansatz liefern, wie man eigene Elemente für das Einkaufswelten-Dashboard schreiben kann? In der Auswahl gibt es ja Standard-Elemente und Third-Party-Elemente. Irgendwie muss es ja also einen Weg gehen, der so vorgesehen ist. :slight_smile: Unter diesem Link http://wiki.shopware.de/Einkaufswelten_detail_819.html steht leider nur: [quote]Um die Individualisierung und Anpassbarkeit der Einkaufswelten für Sie als Shopbetreiber aber auch als Agentur so flexibel wie möglich zu gestalten, haben wir uns einiges an Gedanken gemacht und möchten Ihnen gerne kurz & knapp die Möglichkeiten aufzeigen. Eigene Elemente definieren In der finalen Version der Einkaufswelten haben Sie die Möglichkeit eigene Elemente anzulegen. Egal ob Sie einen Bannerslider, eine Facebook-Integration, einen Twitter-Newsstream oder die Topseller anzeigen möchten. Es stehen Ihnen hier alle Wege offen.[/quote] Wie man das angeht, steht dort leider nicht und direkt in der Basis programmieren will ich der Updates wegen nicht. *schnief*

Damit war gemeint das man jetzt im Backend unter Marketing/ Einkaufswelt im Designer eigene Elemente wie die Banner Html-Elemente I Frame Elemente usw in die Einkaufswelt ziehen kann. In der Betaversion waren das noch viel weniger unterschiedliche Elemente.

Kein Problem, aber das ändert ja nichts an der Frage. :wink: Wie kann man sauber eigene Elemente erstellen?

Da warte ich auch drauf. Ein Tutorial wie man das programmiert…

Die Erstellung von eigenen Elementen ist eigentlich ganz einfach. Nehmen wir (zu Demonstrationszwecken) einmal an, man möchte Farbfeld-Element erstellen. Das Element soll in der Einkaufswelt einen farbige Fläche darstellen. Das Element kann mit Hilfe eines HEX-Wertes (z.B. #336699) konfiguriert werden. [size=200]// 1. Tabelle „s_library_component“[/size] In der Datenbank erstellt man zunächst in der Tabelle „s_library_component“ einen neuen Eintrag. Es sind für ein so einfaches Element lediglich die folgenden Werte notwendig: [color=blue]name => Farbfeld template => component_color cls => color-element[/color] Die ID bitte nicht ausfüllen, da diese auto-increment ist und somit automatisch vergeben wird. Nach Speicher des Eintrages merkt man sich die ID (z.B. „12“) der neuen Komponente. [size=200]// 2. Tabelle „s_library_component_field“[/size] In der Tabelle „s_library_component_field“ legt man nun das zugehörige Feld für das Abspeichern des HEX-Wertes an: [color=blue]componentID => 12 name => color_hex_value x_type => textfield field_label => Hexwert[/color] Alle nicht genannten Felder sind optional und brauchen für dieses Beispiel nicht ausgefüllt zu werden. [size=200]// Element-Template erstellen[/size] Damit der Hex-Wert auch im Frontent angezeigt wird, müssen wir noch ein passendes Template erstellen. Dazu sollte man die Ordner-Struktur im eigenen Template-Ordner replizieren, um vor späteren Updates geschützt zu sein. Man legt also zunächst folgende Ordner-Struktur an: [color=blue]SW-ROOT/templates/emotion_DeinTemplate/widgets/emotion/components[/color] Darin erstellt man nun ein Tempalte, welches wir bereits bei der Anlage des Komponente in der Datenbank in Schritt 1 „component_color“ benannt haben. Die Datei heißt also „component_color.tpl“. Darin schreibt man: [code]

[/code] Fertig. Damit sollte man in der Lage sein aufwendigere Komponenten anzulegen. Bei den verschiedenen/möglichen Feld-Typen orientiert man sich am besten an den bestehenden Komponenten. Anmerkung: Ich bin Shopware-Einsteiger und kein Profi! Ich kann nicht ausschließen, dass diese Art der Erstellung von Einkaufswelt-Elementen an irgendeiner Stelle Probleme bereitet. Bei mir hat’s jedenfalls funktioniert.

1 „Gefällt mir“

Hallo zusammen, ich wollte jedes Widget um die Möglichkeit einer CSS ID und CSS Klasse erweitern und habe dazu, ähnlich wie oben beschrieben, erweitert. Der Container ($Data) enthält nur nicht meine zusätzlichen Felder, gibt es irgendwo einen Cache oder muss ich was erweitern? // Hat sich erledigt, war nen Cache Problem (denke ich).

für weitere Änderungen ist der Controller engine/Shopware/Controllers/Widgets/Emotion.php wichtig. Dessen Funktionen werden über das Tabellenfeld convert_function angesprochen.

Wie kann ich denn einen eigenen Controller ansprechen oder zumindest eine eigene Controllerfunktion hinzufügen? Direkt in die genannte Datei einzugreifen dürfte nicht updatesicher sein.

*schieb*

Hier gibt es Infos dazu Widgets fürs Frontend erstellen Jetzt nur noch dire Frage wie ich dem Widget eine eigene Css Datei spendiere…

Hallo, hab erfolgreich ein statisches Widget erstellt, was ja echt einfach geht. Wie geht das ganze jetzt aber, wenns dynamisch werden soll? Dafür gibts ja in der Tabelle s_library_component die “convert_function” Spalte. Nur wo kann ich meine eigene Funktion unterbringen? Am einfachsten wär jetzt ja ein “extends Shopware_Controllers_Widgets_Emotion”, nur das ist so ja nicht (mehr) vorgesehen, oder? Gruß, Michael

Hallo, auch mal schieb… :wink: Gibt’s hier schon was neues? Ich versuche auch gerade eine eigene convert_function unterzubringen, ohne die Emotion.php zu verändern. Ich habe gesehen, daß ja doch der eine oder andere eigene Elemente für die Einkaufswelten erstellt. Vielleicht wäre es eine gute Idee, hier irgendwo im Forum (oder auch im Store) einen Platz zu schaffen, wo man seine Elemente anderen zur Verfügung stellen kann, wenn man möchte. Viele Grüße Andi

Mit SW 4.2 soll es möglich werden eigene Einkaufswelten-Elemente per Plugin zu erstellen. Ob das tatsächlich bis zu der Version klappt und wie das genau aussehen wird kann ich nicht sagen.

Hallo Andre, danke für Deine Antwort… :slight_smile: Erstellen via Plugin geht ja jetzt schon, allerdings mit Einschränkungen (z.B. eigene convert_function), so wie ich das sehe. Dann ändere muß ich jetzt wohl erst mal die Emotion.php direkt verändern, bis es eine andere Lösung gibt. Viele Grüße Andi

Hi, hat jemand von euch herausfinden können wie man die eigene convert_functiont einfügen kann, ohne Emotion Klasse zu überschreiben? Mein Problem ist, dass ich vier Blog Kategorien habe, und wenn ich das Blog Widget nehme, um die neuesten drei Inhalte auf der Startseite einfüge, werden diese aus allen Blogs gewählt. Ich möchte aber dass nur Blog „News“ berücksichtigt wird. Ich könnte also jetzt getBlogEntry in Emotions.php überschreiben. Oder ich erstelle ein eigenes Widget. Ich brauche aber eigene convert_function um die Query anzupassen, so dass nur das gewünschte Blog berücksichtigt wird. Kann mir jemand da helfen? Würde ungern Core Klassen überschreiben. Viele Grüße, Edin

Hallo edin, wenn ich das richtig verstanden habe, kann die convert Funktion nicht für eigene Einkaufswelten Elemente verwendet werden. Was du hierfür brauchst ist eine eigene ExtJS Komponente ( eigener x_type ): * hier noch ein älterer Foreneintrag, dessen Infos mir selbst weitergeholfen haben programmierung-f56/plugin-einkaufswelt-eigene-extjs-komponente-t11876-10.html?hilit=Eigene%20Einkaufswelt%20Elemente * im Wiki gibt es dazu folgendes Tutorial http://wiki.shopware.de/Experten-Eigene … l_959.html Lg

Hi, werde ich mir mal anschauen, danke dir! Ein schönes WE