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.881
529
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.697
353
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.697
353
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.697
353
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.881
529
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 Deine Meinung ist gefragt: direkte Anbindung der Schweizerischen Post (CH Post) in Shipping 2.0? Umfragen rund um JTL 0
Neu Cross-Links in der Navigation Allgemeine Fragen zu JTL-Shop 1
Neu Artikeletikett drucken: Automatische Mengenermittlung der zu druckenden Etiketten Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 0
Neu Länge der Beschreibung unter den Unterkats Templates für JTL-Shop 2
Kein Skonto in der XRechnung? JTL-Wawi 1.11 0
Neu Mail mit Plugin zum testen der Sicherheitslücke echt? Allgemeine Fragen zu JTL-Shop 47
B2B Market - Probleme beim zuweisen der Kundengruppe (gelöst) JTL-Wawi 1.11 0
Neu Amazon - Einlesen / Übernahme der Bestellungen klappt nicht ?! Amazon-Anbindung - Fehler und Bugs 2
QR-Code auf der Rechnung gibt 100-fachen Betrag des eigentlichen Rechnungsbetrages aus JTL-Wawi 2.0 5
Fehlermeldung beim Einlesen der Buchungen in JTL Fibu JTL-Wawi 2.0 2
Neu Wird irgendwo in der Datenbank geloggt welcher WMS-Mobile Benutzer mit dem MDE-Gerät einen Auftrag, bzw. Pickliste gepickt hat? User helfen Usern - Fragen zu JTL-Wawi 1
Neu Gibt es in der WaWi-Datenbank einen Zeitstempel, der anzeigt wann ein Kunde sich in einem bestimmten Shop registriert hat? User helfen Usern - Fragen zu JTL-Wawi 3
Neu Amazon.com - kein Abgleich der Bestände Wawi 1.11.9 Amazon-Anbindung - Fehler und Bugs 0
Name der Versandarten wird im Auftrag sporadisch nicht mehr angezeigt (2.0.3) JTL-Wawi 2.0 2
Neu Wawi 1.11. Amazon Rechnungen (extern) in der Kundenansicht verschwunden ?! User helfen Usern - Fragen zu JTL-Wawi 2
Neu Der wahrscheinlich östlichste JTL Servicepartner: Standortvorteil, faire Preise und vieles mehr Dienstleistung, Jobs und Ähnliches 16
Neu Eigener Export - Kunden individuelle Preise + verfügbarer Bestand + VK netto der Kundengruppe User helfen Usern - Fragen zu JTL-Wawi 6
Neu Rechnungen zeigen Paypal Text an, obwohl er in der Vorlage nicht ausgewählt ist JTL-Wawi 2.0 3
Updatezwang beim öffnen der WAWI JTL-Wawi 1.6 13
Neu Produktionsaufträge tauchen nicht in der Workbench auf JTL-Plan&Produce - Fehler und Bugs 2
Neu Ist es ohne Probleme möglich Cloudflare in der Free Version mit JTL zu nutzen? Allgemeine Fragen zu JTL-Shop 7
Neu Paypal 2.2.1; Fehler "Der Zahlungsanbieter hat eine Anmeldung gefordert" Plugins für JTL-Shop 0
Neu Sortierung der Variationswerte funktioniert nicht mehr Shopify-Connector 12
Neu Wert aus „Eigenes Feld“ eines Artikels im Lieferschein unter der Artikelbezeichnung anzeigen Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 0
Neu Rabatte aus dem JTL-Shop werden in der Wawi nur als Netto-Preis übernommen, Rabatt % gehen verloren Onlineshop-Anbindung 0
Freie Felder in der Artikelliste anzeigen JTL-Wawi 2.0 3
ändern von Servernamen nach Neuinstallation von SQL und Verbindung mit neuem Server in der Wawi JTL-Wawi 2.0 2
Neu Erstellung der Sitemap bei WaWi Abgleich funktioniert nicht Allgemeine Fragen zu JTL-Shop 0
Neu Unterschiedliche Abnahmeintervalle von Variationskombinationen in der Warenkorbmatrix Templates für JTL-Shop 0
Neu Betrag auf der Rechnung nach Rechnungskorrektur User helfen Usern - Fragen zu JTL-Wawi 1
Neu PDF Anhänge in der Bestellbestätigung anhängen missglückt JTL-Shop - Fehler und Bugs 1
Neu Anzahl der URLs in der Sitemap ändern Allgemeine Fragen zu JTL-Shop 3
Neu Ab welcher JTL Wawi Version ist der OnPremise REST API Endpoint POST /v2/returns oder POST /v1/returns für Create Return verfügbar? Schnittstellen Import / Export 0
Neu ⚠️📦 ACHTUNG: Abkündigung der DHL-Schnittstelle zum 15.06.2026 News, Events und Umfragen 0
Neu Telemetrie-Datenerfassung in JTL-Shop 5.7.0: Bitte um Klarstellung der DSGVO-relevanten Aspekte Allgemeine Fragen zu JTL-Shop 5
Frage zur Speicherung der Produktbilder JTL-Wawi 1.11 1
Neu Der Inhalt / Text ist verschwunden – ist das ein Fehler JTL-Shop - Fehler und Bugs 0
Plattformabgleich Shop löschen - Wo ist das in der MySQL DB? JTL-Wawi 2.0 4
Anzeige der Variantenartikel JTL-Wawi 1.11 0
Neu Workflows speichern z.B. Rechnungen nicht mehr seid der 2.01 User helfen Usern - Fragen zu JTL-Wawi 1
Neu Ein Artikel in der Kategorie Allgemeine Fragen zu JTL-Shop 5
Neu Widerrufsbutton: Jeder, der den Button betätigt, kann das Widerrufsformular ausfüllen und absenden - auch ohne Bestellung? Allgemeine Fragen zu JTL-Shop 94

Ähnliche Themen