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
524
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.521
297
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.521
297
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.521
297
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
524
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 Mal zig Bestellungen innerhalb Minuten dann wieder Stundenlang Ruhe Smalltalk 2
Neu JTL Shop5 Indexierung GSC - Seiten wurden innerhalb von Wochen aus dem Index geworfen Templates für JTL-Shop 10
Neu Innerhalb einer Variable -SQL Abfrage- das Wort "fett" schreiben Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 2
Neu Störung der Webservices von DPD JTL-ShippingLabels - Fehler und Bugs 1
Neu Export des Feldes in der Ameise JTL Ameise - Eigene Exporte 1
Neu <img>-Links in der Artikelbeschreibung werden nach dem Hochladen nicht angezeigt eBay-Designvorlagen - Fehler und Bugs 0
Neu Werden laufenden Angebote nach Änderung der globalen Vorlage aktualisiert? eBay-Anbindung - Fehler und Bugs 2
Neu Problem mit der Verbindung von JTL-Wawi (1.5.48.2) und WooCommerce (Version 9.5.2) User helfen Usern - Fragen zu JTL-Wawi 0
Neu Nachforschungaufträge der DPD mit Worker automatisieren JTL-ShippingLabels - Fehler und Bugs 0
Neu Inhalt / Menge aus der Wawi im JTL Shop anzeigen / ohne Funktion ? Allgemeine Fragen zu JTL-Shop 2
Neu Preise der Kinderartikel aktualisieren Arbeitsabläufe in JTL-Wawi 4
Neu Preise der Variationen über Ameise anpassen, aber wie ? JTL-Ameise - Ideen, Lob und Kritik 3
MHD in der Pickliste anzeigen JTL-Wawi 1.9 1
Farben der Artikel in der Artikelverwaltung (F2) JTL-Wawi 1.9 2
Extern versendete Bestellungen, Aktualisierung der Tracking-Nummer in JTL fehlt JTL-Wawi 1.9 3
Neu Validierung der Telefonnummer JTL-Workflows - Fehler und Bugs 3
Neu Seriennummer der TSE Einrichtung / Updates von JTL-POS 1
Neu MHD in der Inventur liste aber nicht im Artikel JTL-Wawi - Fehler und Bugs 0
Neu Slider-Vorschau Bilder auf der Artikeldetail-Seite werden in der mobilen Version nicht angezeigt Allgemeine Fragen zu JTL-Shop 0
Lieferzeit wird auf der Artikeldetailseite nicht angezeigt Einrichtung JTL-Shop5 7
Neu Was passiert wenn ich Amazon Aufträge, Lieferscheine und Rechnungen per SQL aus der WAWI-Datenbank lösche? User helfen Usern - Fragen zu JTL-Wawi 0
Titel der Variationskombinationen JTL-Wawi 1.8 4
Artikel Merkmale in der Rechnung anzeigen Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 10
Neu ACHTUNG WARNUNG: Falscher USt-Betrag beim Export mit der Ameise JTL-Wawi - Fehler und Bugs 4
Otto Market Übermittlung der GLS Sendungsnummer JTL-Wawi 1.9 0
Neu Sortiernummer der Hersteller seit Update auf 1.9.6.5 durcheinander User helfen Usern - Fragen zu JTL-Wawi 14
Neu Priority in der Sitemap Betrieb / Pflege von JTL-Shop 2
Neu Emails senden aus der Wawi an Bestellungen via Gastkonto (JTL Wawi 1.5.55.5 / JTL Shop 4.05) Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 1
Neu Der Amazon Bestand wird nicht übernommen/gespeichert. Worker setzt den vollen Lagerbestand wieder ein. JTL-Wawi - Fehler und Bugs 0
Neu GPSR Zuordnung in der Ameise Wawi Version 1.5 Probleme Funktionsattribut ID User helfen Usern - Fragen zu JTL-Wawi 3
Amazon Lister Problem bei der Erstellung von Varianten-Produkten JTL-Wawi 1.9 0
Neu Berichte / Standard Analysen in der WaWi User helfen Usern - Fragen zu JTL-Wawi 0
Neu Wie Kunden löschen, der noch nie bestellt hat? User helfen Usern - Fragen zu JTL-Wawi 2
Änderung der Lieferadresse einer Verkaufsbestellung über die JTL-Wawi API JTL-Wawi 1.9 0
Neu Whatsapp Kontakt auf der Detailseite Allgemeine Fragen zu JTL-Shop 4
Auftragsfenster läst sich nicht in der Höhe Verändern JTL-Wawi 1.9 9
Neu Darstellung der Medeindaten Allgemeine Fragen zu JTL-Shop 0
Neu Prozessablauf WMS Start - Wo ist der Denkfehler? Arbeitsabläufe in JTL-WMS / JTL-Packtisch+ 0
Neu Artikel Leichen bereinigen in der Datenbank Betrieb / Pflege von JTL-Shop 3
Neu Probleme beim Übertragen der Sendungsnummern an AMAZON Amazon-Anbindung - Fehler und Bugs 3
Neu Änderung der Lieferadresse einer Verkaufsbestellung über die JTL-Wawi API User helfen Usern - Fragen zu JTL-Wawi 0
Neu Newsletter-anmeldung wird nicht auf der Website angezeigt Allgemeine Fragen zu JTL-Shop 0
JTL Wawi Kunden Kommentar hinzufügen, der auch im JTL Pos erscheint. JTL-Wawi 1.9 0
Gültigkeit der Gutscheine zum Jahresende terminieren JTL-Vouchers - Ideen, Lob und Kritik 2
Neu Optimierung der Laufwege Arbeitsabläufe in JTL-WMS / JTL-Packtisch+ 1
Seit kurzen vermehrt Spamanfragen in der Shopsuche. Einrichtung JTL-Shop5 1
Neu Problem bei der Anzeige von Hinweistexten für Produkte einer bestimmten Kategorie im NOVA Template Allgemeine Fragen zu JTL-Shop 1
Neu Probleme mit dem MegaMenü in der Mobile Version Allgemeine Fragen zu JTL-Shop 0
JTL Shipping: Artikelgewicht und Zusatzgewicht aus der Versandeinstellung wird nicht addiert JTL-ShippingLabels - Ideen, Lob und Kritik 2
Neu PayPal Checkout -> Der Zahlungsanbieter hat eine erneute Bestätigung der Kaufsumme angefordert Plugins für JTL-Shop 0

Ähnliche Themen