Neu Artikelvariablen innerhalb der Artikelübersicht erweitern.

maxwed

Aktives Mitglied
18. Mai 2017
25
0
Servus Forengemeinde,

ich bin derzeit dabei mich in das Pluginhandwerk einzuarbeiten.
Ich schaffe es aktuell die Smarty-Variablen um meine eigenen Einträge über den Hook 133 "HOOK_SMARTY_INC" zu erweitern.

Nun habe ich 2 Fragen:
1. Ich würde gerne auf der Artikelübersichtsseite innerhalb von jedem Artikel eine Variable ergänzen. Also innerhalb von $Suchergebnisse->$Artikel->$element[...] . Gibt es dort einen passenden HOOK oder muss ich über den HOOK 133 arbeiten und eine spezielle Syntax nutzen?

2. Im allgemeinen mache ich es grade noch so, dass ich jedesmal eine eigene sql verbindung mit folgendem Code herstelle:

require_once("includes/config.JTL- Shop.ini.php");
$con = mysql_connect(DB_HOST,DB_USER,DB_PASS);
mysql_select_db(DB_NAME,$con);
Ist diese Vorgehensweise üblich oder gibt es bessere vorgefertigte Wege?

Vielen Dank schonmal im voraus!

Grüße
 

FPrüfer

Moderator
Mitarbeiter
19. Februar 2016
1.878
518
Halle
Hallo,

zu 1. Um ein Artikelobjekt um eine Eigenschaft zu ergänzen, könnte prinzipiell der HOOK_ARTIKEL_CLASS_FUELLEARTIKEL genutzt werden. Das würde dann nicht nur auf der Startseite in Listen funktionieren, sondern generell. Eine Übersicht aller Hooks findest du hier: http://docs.jtl-shop.de/de/latest/shop_plugins/hook_list.html

zu 2. Diese Vorgehensweise ist denkbar schlecht! Hier sollte besser die Datenbankklasse des Shops genutzt werden, um nicht zusätzliche Verbindungen aufzubauen.
PHP:
// Einen einzelnen Datensatz als Objekt selektieren...
$oDatensatz = Shop::DB()->select('tabellenName', 'keyName', $keyValue);

// Mehrere Datensätze als Array of Objects selektieren...
$Datensatz_arr = Shop::DB()->selectArray('tabellenName', 'keyName', $keyValue);
Sieh dir dazu am besten die Datenbankklasse in classes/core/class.core.NiceDB.php an
 

maxwed

Aktives Mitglied
18. Mai 2017
25
0
Guten Morgen!

Vielen Dank für deine Antwort FPrüfer :) Ich denke das wird mir aufjedenfall schon weiterhelfen!
Das mit der SQL Verbindung dachte ich mir schon.. Danke für die Syntax :)

Dann werde ich mich heute mal weiter daran versuchen..

Grüße
 

martinwolf

Offizieller Servicepartner
SPBanner
6. September 2012
3.385
262
1. Ich würde gerne auf der Artikelübersichtsseite innerhalb von jedem Artikel eine Variable ergänzen. Also innerhalb von $Suchergebnisse->$Artikel->$element[...] . Gibt es dort einen passenden HOOK oder muss ich über den HOOK 133 arbeiten und eine spezielle Syntax nutzen?
Ich würde hier jedoch anders als von FPrüfer vorgeschlagen nicht mit dem erwähnten HOOK arbeiten, sondern mit HOOK 99. In diesem HOOK stehen dir sämtliche Objekte zur Verfügung und können nach Belieben manipuliert werden.

Bsp:
PHP:
if (gibSeitenTyp() === PAGE_ARTIKELLISTE) {

        // hole suchergebnisse
        $Suchergebnisse = $smarty->get_template_vars('Suchergebnisse');

        // ueberschreibe bestehende artikel
        foreach ($Suchergebnisse->Artikel->elemente as $k => $Artikel) {
            if (bedingung) {
                    $Suchergebnisse->Artikel->elemente[$k]->meineNeueEigenschaft= $meinNeuerWert;
            }
        }
}
Die Suchergebnisse bekommen dann die neuen Eigenschaften auch direkt ans Template übergeben. Der obere Code hat auch den Vorteil, dass du nicht für jeden Artikel in den HOOK gehst, was mit _CLASS_FUELLEARTIKEL der Fall wäre, sondern du iterierst lediglich durch eine bereits aufbereitete Liste von Objekten und ist daher um einiges performanter.
 

maxwed

Aktives Mitglied
18. Mai 2017
25
0
Guten Morgen martinwolf,

ich habe mich grade an dem hook vom FPrüfer auseinander gesetzt und komme da leider auch nicht weiter.

Deine Erklärung finde ich plausibel und performant genug kann es nie sein. Daher werde ich deinen Vorschlag definitiv mal probieren und da mal etwas mit "rumspielen".
Aktuell habe ich den hook 123 HOOK_MERKMAL_CLASS_LOADFROMDB offen. Meine Idee wäre hier direkt meine eigene Variable einzusetzen. Allerdings verstehe ich den Hook nicht so ganz. Dieser wird kurz vor dem return innerhalb der loadfromdb klasse ausgeführt. Ich dachte ich könnte einfach eigene Zeilen bezogen auf die Klasse implementieren -> Also mit $this einfach weiterarbeiten und das Objekt ergänzen, welches am Ende zurückgegeben wird. Geht allerdings nicht..

Ich werde mir also deinen Vorschlag mal anschauen! Die Werte zum füllen kann ich ja über eine eigene SQL-Query innerhalb des hooks holen. Auf den Primärschlüssel komme ich ja über die Smarty-Variablen :)

Das Ziel ist es übrigens den Datenbankeintrag fLagerbestand aus der Tabelle tArtikel in jedes Merkmal mit einzusetzen. So, dass ich quasi von jedem Kindartikel eines Vaterartikels die Lagerbestände bezogen auf ein Merkmal zusammenzähle und dort übergebe. Damit kann ich dann innerhalb des Templates code implementieren, der anhand dieser Variable entscheidet ob das Thumbnail eines Kindartikels angezeigt wird oder nicht. (Lagerbestand=0 oder >0)

Vielen Dank nochmal für eure Hilfe :)

Grüße
 

martinwolf

Offizieller Servicepartner
SPBanner
6. September 2012
3.385
262
Grundsätzlich greifst du innerhalb eines HOOKs per $args_arr auf sämtliche, dir in diesem HOOK verfügbaren Objekte zu.

Warum du für den fLagerbestand auf die Datenbank willst verstehe ich nicht, hast du doch diese Angabe im Artikel direkt verfügbar und auch innerhalb des Varkombi Arrays. Aber um ehrlich zu sein, verstehe ich das angestrebte Ziel nicht^^
 

maxwed

Aktives Mitglied
18. Mai 2017
25
0
Guten Morgen,
ahh okay! Danke dir :)

Ich musste zuletzt feststellen, dass die Variablen, die vom Shop zur Verfügung gestellt werden oft unzuverlässig sind. So werden teilweise Variablen im Shop nur aktualisiert, wenn der Vaterartikel verändert und neu abgeglichen wird. Mal so, mal so.. Daher möchte ich diese ganzen internen Abläufe umgehen und mir meine eigene Variable zusammen setzen.

Das Endziel ist, dass ich über einen Artikel hover und mir die Thumbnails der Kinderartikel (also zBsp. verschiedene Farben) angezeigt werden. Das ganze Abhängig davon ob die Farbe noch verfügbar ist oder nicht. Es gibt zwar ein Plugin welches den hover anbietet aber nicht in Abhängigkeit der Verfügbarkeit.

Aktuell arbeite ich mit deinem vorgeschlagenen Hook. Hier habe ich mein Ziel soweit erreicht.. Zumindest in der Theorie, getestet wird heute auf dem Testshop.
 

martinwolf

Offizieller Servicepartner
SPBanner
6. September 2012
3.385
262
Okay, weil du oben ja irgendwas von Merkmalen geschrieben hast. Den Zusammenhang habe ich nicht verstanden.
 

maxwed

Aktives Mitglied
18. Mai 2017
25
0
Die Farbe wäre in diesem Zusammenhang ein Merkmal des Artikels.

Leider treibt mich grade der Testshop in den Wahnsinn... :D Unter der Variable $Suchergebnisse->$Artikel->element[]->oVariationsKombiVorschau_arr sollten eigentlich die verschiedenen Farben mit ihren dazugehörigen Bildern angezeigt werden. Leider tut es das aktuell nicht. Die Datenbank ist eine exakte Kopie des liveshops, dort wird dieses array befüllt...
 

maxwed

Aktives Mitglied
18. Mai 2017
25
0
Ich hätte noch eine zusätzliche Frage.. Ich hoffe du magst mir die auch noch beantworten :)

Unzwar müsste ich/würde ich gern noch eigenen Code in eine .tpl Datei schreiben. (Child/productlist/item_box.tpl) Lässt sich das durch das Plugin automatisieren? Also dass ich quasi das Plugin installiere und der Code automatisch an der richtigen Stelle implementiert wird? Oder müsste das immer händisch erledigt werden?

Und zuletzt noch eine Frage bezüglich javascript Dateien. An welcher Stelle wird mein Javascript code eingebunden?

Grüße und schon einmal ein schönes Wochenende!
 

maxwed

Aktives Mitglied
18. Mai 2017
25
0
Servus in der neuen Woche!

Ich bin vorerst mal mit dem Variablenteil fertig. Da ich das ganze nicht verkaufen möchte, hier mal der geschriebene Code:
PHP:
if (gibSeitenTyp() === PAGE_ARTIKELLISTE) {

        // hole suchergebnisse
        $Suchergebnisse = $smarty->get_template_vars('Suchergebnisse');
        //Array mit allen möglichen Größen zum späteren entfernen dieser aus dem cName.
        $Replaces = array('/\bXXS\b/','/\bXS\b/','/\bS\b/','/\bM\b/','/\bL\b/','/\bXL\b/','/\bXXL\b/','/\bXXXL\b/');
      // ueberschreibe bestehende artikel
        //Über Elemente iterieren
        foreach ($Suchergebnisse->Artikel->elemente as $k => $Artikel) {
            //Vaterartikel setzen
            $kVaterArtikel = $Suchergebnisse->Artikel->elemente[$k]->kArtikel;
            //Über die Varkombis iterieren
            foreach($Suchergebnisse->Artikel->elemente[$k]->oVariationKombiVorschau_arr as $v => $Variation){
                //Den cName der Varkombi setzen. Gleichzeitig die Größe aus dem cName entfernen.
                $cName = preg_replace($Replaces,"",$Suchergebnisse->Artikel->elemente[$k]->oVariationKombiVorschau_arr[$v]->cName);
                //An den cName ein Prozentzeichen als Regular Expression Element hängen.
                $cName = $cName.'%';
                $Suchergebnisse->Artikel->elemente[$k]->oVariationKombiVorschau_arr[$v]->suchName = $cName;
                //Lagerbestand mithilfe einer SQL-query abfragen. Es wird der Lagerbestand, der mithilfe des cName ausgewählten, Kinderartikel vom gegebenen Vaterartikel zusammengezählt und gespeichert.
                $fLagerbestand = Shop::DB()->executeQuery("SELECT sum(fLagerbestand) AS 'fLagerbestand' FROM tartikel WHERE kVaterArtikel=".$kVaterArtikel." AND cName LIKE '".$cName."' GROUP BY 'fLagerbestand'",1);
                //Eigene Variable innerhalb der Varkombivorschau setzen. Inhalt ist der zusammengezählte Lagerbestand.
                $Suchergebnisse->Artikel->elemente[$k]->oVariationKombiVorschau_arr[$v]->fLagerbestand = $fLagerbestand->fLagerbestand;
            }
        }
}

Ansonsten würde ich nun gerne die .tpl bearbeiten..
Ich habe mir die phpquery und die .php vom HOOK 140 mal angeschaut aber werde nicht so recht schlau daraus..

Könnt ihr mir vielleicht nochmal helfen bitte :/
Wie wähle ich eine .tpl aus und vor allem stellt sich mir noch die Frage, wie ich an einer bestimmten Stelle im Dokument ansetze? Ich habe ja ansich keine Klassen oder ähnliches dort drin?

Grüße
 

maxwed

Aktives Mitglied
18. Mai 2017
25
0
Servus,

ich habe es mittlerweile geschafft eigenen Code an die gewünschte Stelle einzufügen.
Leider habe ich das Problem, dass der eingefügte Smartycode nicht ausgeführt wird, sondern als Text dargestellt wird..

Ich habe nun schon eine Weile herumprobiert aber bisher keine Lösung finden können...
Habt ihr vielleicht einen Tipp?

Grüße
 

maxwed

Aktives Mitglied
18. Mai 2017
25
0
Der Code wird zunächst in einer Variablen gespeichert und diese dann angehangen.

pq("div.product-cell")->append($codeVar);

Der Code liegt in etwa so vor (bin grad nicht mehr vor Ort)

$CodeVar = '{assign "test" "tesinhalt"} {if...} {/if} <!--Hier könnte ihre Werbung stehen-->';
 

maxwed

Aktives Mitglied
18. Mai 2017
25
0
Das heißt ich kann hier garkein Smartycode implementieren sondern müsste in meiner Hookdatei bereits alle Daten auswerten um dann nur noch HTML Code anzufügen?

Puh..das könnte schwierig werden, da ja jeder Artikel individuelle Daten bekommt. Daher wäre der Smartycode deutlich einfacher...
 

FPrüfer

Moderator
Mitarbeiter
19. Februar 2016
1.878
518
Halle
Hallo,
dich hindert ja erstmal nichts in HOOK_140 wieder die Smarty-Engine anzuwerfen und ein eigenes Template rendern zu lassen. Du musst dann nur aufpassen, dass du dir keine Endlosrekursionen erzeugst, da ja dann wieder der HOOK getriggert wird...

PHP:
Shop::Smarty()->assign('meineVariable', 'irgendwas');
$meinTemplateHTML = Shop::Smarty()->fetch($oPlugin->cFrontendPfad . '/template/mein_template.tpl');

pq('#derContainer')->append($meinTemplateHTML);
 

maxwed

Aktives Mitglied
18. Mai 2017
25
0
Das heißt ich könnte meinen Smartycode einfach in eine eigene Datei stecken und über die fetchmethode das ganze in html wandeln und somit das wiederum per append an die gewünschte .tpl hängen?

Das werde ich wohl nächste Woche mal probieren. Für heute ist Schluss :) Das Backend funktioniert soweit wie gewünscht und der Code für das Frontend steht ansich auch und funktioniert. Nun muss der Frontend-Code nur noch bei der Installation selbstständig an der richtigen Stelle implementiert werden.. Hängt allein damit zusammen, dass das ganze Versionierbar sein soll.

Vielen Dank nochmal für die bisherige Hilfe
und ich wünsche ein schönes Wochenende :)
 
Ähnliche Themen
Titel Forum Antworten Datum
Neu Link innerhalb Produktdetailseite auf Tab Templates für JTL-Shop 0
Neu Schriftgrößen innerhalb Wawi ändern Eigene Übersichten in der JTL-Wawi 3
Neu Gravierender Fehler in der Shop Software Betrieb / Pflege von JTL-Shop 3
Neu Packtisch: In der Liste der Aufträge neue Feld-Spalte mit Spalteneditor hinzufügen Arbeitsabläufe in JTL-WMS / JTL-Packtisch+ 0
Neu Workflow der bei Stücklisten: Überverkäufe de-/aktivieren User helfen Usern - Fragen zu JTL-Wawi 11
Wo befindet sich das Feld mit der Information für "Zustandsbeschreibung" auf Ebay? JTL-Wawi 1.8 9
Neu Nach Umstellung auf WMS Probleme mit der JTL Ameise Installation von JTL-WMS / JTL-Packtisch+ 0
Neu Vorschaubilder in der Artikeldetailseite werden nicht angezeigt Betrieb / Pflege von JTL-Shop 1
Neu Update des JTL shops aus der Wawi funktioniert nicht Allgemeine Fragen zu JTL-Shop 1
Neu EK-Netto der Verkäufe aus Datenbank ? User helfen Usern - Fragen zu JTL-Wawi 5
Neu Shopify Erhöhung der Varianten von 100 auf 2000 - Connector App Problem Shopify-Connector 1
Fehler beim Rendering der Attribute bei SCX Abgleich kaufland.de - Anbindung (SCX) 1
Neu Eigene Felder des Auftrages in der Druckvorlage Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 2
Neu klare Warnung vor den Bausteinen und der PDF in Vorlagen User helfen Usern - Fragen zu JTL-Wawi 4
Neu Folgendes fehlt seit Mai 23 auf der Rechnung: "Versanddatum: Ist gleich dem Rechnungsdatum." Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 4
Workflow MwSt.-Sätze ersetzen 0% -> 19% ändert netto in Positionen aber nicht in der Auftragssumme JTL-Wawi 1.7 2
Neu Menüleiste wird plötzlich in der Mitte von der Seite angezeigt Allgemeine Fragen zu JTL-Shop 0
Neu SEO URL der Kategorien wird nicht an Shopware 6 übertragen Shopware-Connector 0
Neu Formatierung der Spalte Rabatt Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 5
In Diskussion Automatische Zuweisung der Kategorien für Artikel durch Workflow JTL-Workflows - Ideen, Lob und Kritik 3
Neu Vorlagen: Formel um Textfeld nur auf der letzten Seite der Rechnung darzustellen Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 2
Neu Angabe der wesentlichen Eigenschaften der Ware im Checkout Allgemeine Fragen zu JTL-Shop 11
Slider - Position auf der Startseite? Einrichtung JTL-Shop5 0
Gelöst Packtisch+ 1.8.112 : Rechnung wird bei Teillieferung erzeugt, obwohl als Ausführungsbedingung "Nur bei der letzten Teillieferung" ausgewählt ist. JTL-WMS / JTL-Packtisch+ - Fehler und Bugs 2
Speicherort der Seriennummern zu Auftragsposition in der Datenbank ? JTL-Wawi 1.8 2
Export der Einstellungen im admin Einrichtung JTL-Shop5 2
Beantwortet #GEFUNDEN# Suche jemand , der uns eine (automatische) SQL Abfrage erstellen kann mit Mail Ausgabe Dienstleistung, Jobs und Ähnliches 2
Neu Bestände von der Wawi mit ebay abgleichen User helfen Usern - Fragen zu JTL-Wawi 2
Fehlermeldung nach Speichern vom Auftrag in der Wawi JTL-Wawi 1.6 5
Neu Erstinstallation JTL WaWi 1.8.12 - heruntergeladen wird SQL Express 2017 _statt_ der empfohlenen 2022 Version Installation von JTL-Wawi 8
Auftragsimport über eBay - Bezeichnung der Versandart auf der Rechnung leer JTL-Wawi 1.8 1
In Bearbeitung JTL POS in der JTL-WaWi-Cloud Allgemeine Fragen zu JTL-POS 2
Neu Suchen Mitarbeiter für 40h Festanstellung gern auch 100% Homeoffice für Produkt und Kategorie Pflege mit der Wawi Dienstleistung, Jobs und Ähnliches 0
Neu Bestände der einzelnen Lager weichen von den reellen Beständen willkürlich ab JTL-Shop - Fehler und Bugs 7
Neu Export nach Vorgabe der Artikelnummern JTL Ameise - Eigene Exporte 5
Neu Wenn Rabatt als Zeile auf Rechnung steht, fliegt der Gesamtwert weg.. Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 0
Neu jtl wawi Versanddatenexport Originalmeldung: In der Sendung trat mindestens ein harter Fehler auf. Code: 1101 Schnittstellen Import / Export 2
Neu Versandetikett von der Merchant FFN JTL an die Fulfiller FFN JTL übertragen? Richtiger Weg? User helfen Usern - Fragen zu JTL-Wawi 0
Neu NEU ✔️ PDF-Angebots-Plugin für den JTL-Shop 5 - PDF Angebote von der Produktseite oder aus dem Warenkorb heraus generieren B2C / B2B Plugins für JTL-Shop 5
Neu Variationskombinationen in der Sitemap Allgemeine Fragen zu JTL-Shop 5
[JTL-WAWI API] CaseSensitiv in der Create Sales Order JTL-Wawi 1.8 0
Neu Link Farbe im Header sowie Abstand der Box im Footer anpassen Allgemeine Fragen zu JTL-Shop 1
Neu SQL Ausgabe der Varko-Auswahl eines Artikels, mehrsprachig Tabelle zwei mal auf sich Joinen? User helfen Usern - Fragen zu JTL-Wawi 5
Neu Links der Startseite funktionieren nach Update mobil nicht Installation / Updates von JTL-Shop 1
Neu Mögliche steuerrechtliche Verstöße beim Nutzen der JTL Druckvorlagen Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 4
Verkaufseinheit der Kinder JTL-Wawi 1.8 7
Neu Kurzbeschreibung von einem "Stücklisten-Artikel" wird in der Rechnungskorrektur Vorlage nicht angezeigt. Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 1
Neu Reihenfolge der Cross-Selling-Produkte JTL-Wawi - Ideen, Lob und Kritik 3
Neu Richtige Hook zum Berechnen der Lieferzeit in Artikel.php Technische Fragen zu Plugins und Templates 1
Neu Anfängerfrage nach der prinzipiellen Funktionsweise mit JTL-Shop und FFN Starten mit JTL: Projektabwicklung & Migration 4

Ähnliche Themen