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.477
289
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.477
289
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.477
289
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 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 Versanddaten nicht übermittelt. Fehlermeldung in der Spalte Status Versand/Zahlung eBay-Anbindung - Fehler und Bugs 1
Neu Kumulierte Menge der Artikelpositionen vor dem Speichern des Auftrags einsehen Eigene Übersichten in der JTL-Wawi 0
Neu "Variationsvorschau anzeigen" in der Galerie funktioniert nicht JTL-Shop - Fehler und Bugs 1
Neu Verkaufskanalverwaltung: languageIso / Der Wert darf nicht NULL sein. Shopware-Connector 0
Neu Woran erkennen, dass der Connector funktioniert? Technische Fragen zu den JTL-Connectoren 0
Aktuelle Störung der SCX-Schnittstelle und weiterer JTL-Systeme Störungsmeldungen 1
Neu Anpassung der Rechnungsansicht bei zu langen Artikelbeschreibungen Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 0
Neu Amazonspezifische Variablen in der Voralgenerstellung Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 0
Neu Merkmalfilter: Ausgabe der Kindartikel möglich? Betrieb / Pflege von JTL-Shop 0
Neu Sehr lange Ladezeit der Produktseite nach Upgrade auf Version 5.4 Allgemeine Fragen zu JTL-Shop 6
JTL-Search - Hardwarestörung auf einem der Search-Server (s7) Störungsmeldungen 0
Neu Anzeige der Konten in der Wawi User helfen Usern - Fragen zu JTL-Wawi 2
Neu POS Aufträge in der Wawi nicht abgeschlossen, stehen somit im Versand als "offen" JTL-POS - Fehler und Bugs 1
Neu Wie löscht man eine Lizenz aus der Lizenzverwaltung im KC? Allgemeine Fragen zu JTL-Shop 2
Neu Spontane Überarbeitung der Versandbedingungen bei Ebay eBay-Anbindung - Fehler und Bugs 1
Konfigurationsartikel mit 0 € vs. Preise der einzelnen Komponenten mit 0 € Einrichtung JTL-Shop5 1
Tiefe der Navigation JTL-Wawi 1.9 1
Welche Barcodeschriftart ist zu verwenden, damit der Druck auch von einem iOS-Gerät korrekt ausgeführt wird? JTL-Wawi App 7
Neu Preisdarstellung mit der niedrigsten Staffelung Allgemeine Fragen zu JTL-Shop 5
Neu durchscnittlicher VK der Kundengruppe Eigene Übersichten in der JTL-Wawi 4
Neu Shop 5.4.0: Zahlungsarten nun als Position in der Wawi? JTL-Shop - Ideen, Lob und Kritik 16
Neu Wird der Woocommerce Connector eigentlich noch gepflegt? WooCommerce-Connector 0
Neu Bestandsvariable in der Sprachvariable ampelGelb Templates für JTL-Shop 0
Nummernliste der Bilder in mobiler Ansicht entfernen Einrichtung JTL-Shop5 8
Kampagnenreiter in der Auftragsansicht JTL-Wawi 1.8 1
Neu Hauptbild wird bei Wechsel der VarKombi nicht angezeigt Betrieb / Pflege von JTL-Shop 3
Neu Einstellung der Deutsche Post Portokasse JTL-ShippingLabels - Ideen, Lob und Kritik 16
Neu Artikelnamen auf der Homepage vollständig sehen. Er ist wenn er zu lang ist verkürzt. Allgemeine Fragen zu JTL-Shop 2
Neu Picken nur von dem Lagerplatz, der 100 % der Aufträge bedienen kann Arbeitsabläufe in JTL-WMS / JTL-Packtisch+ 2
Neu Anzeige der Vorgangsstatus im JTL Shop 5 Betrieb / Pflege von JTL-Shop 1
Neu Zusätzliche Bearbeitungszeit wird nicht bei der Lieferzeit an Shopware 6 berücksichtigt Shopware-Connector 0
Neu Artikel mit Zustand beschädigt wird nicht als eigenständiger Artikel in der WaWi angezeigt User helfen Usern - Fragen zu JTL-Wawi 1
Neu Geht bei Euch das Aufladen der Portokasse in DHL-Onlinefrankierung? JTL-ShippingLabels - Ideen, Lob und Kritik 12
Neu Fehlermeldung: Fehler bei der Kommunikation mit dem eA-Server eBay-Anbindung - Fehler und Bugs 3
Neu Workflow der prüft, ob eine Bestellung komplett aus einem bestimmten Lager lieferbar ist. User helfen Usern - Fragen zu JTL-Wawi 7
Neu Kommentare von der Retoure in WMS einsehen\ Retoure wiederfinden User helfen Usern - Fragen zu JTL-Wawi 0
Neu Umbuchung der Lizenzen Arbeitsabläufe in JTL-WMS / JTL-Packtisch+ 2
Ändern der Bearbeitungszeit auf Amazon lässt sich nicht auf Länder eingrenzen JTL-Wawi 1.9 0
Neu Liste verkaufter Artikel mit VK Fibu-Konto aus der Artikelkategorie User helfen Usern - Fragen zu JTL-Wawi 4
Korrektur Name des Absenders bei Anforderung der Bestätigung der E-Mail-Adresse Einrichtung JTL-Shop5 1
Neu Artikel wird nach Auswahl der Variante nicht mehr angezeigt JTL-Shop - Fehler und Bugs 3
Neu Ameise (WAWI 1.9.5.2) -> Wie funktioniert der Upload der Produktion JTL-Plan&Produce - Ideen, Lob und Kritik 0
Neu Eigene Felder aus dem Auftrag in der Packtisch+ / WMS Ausgabe JTL-WMS / JTL-Packtisch+ - Ideen, Lob und Kritik 4
Neu Warum ist der Ameisen Export so langsam? JTL-Ameise - Ideen, Lob und Kritik 22
Neu kKunde != InternerSchlüssel > Aus Shop den Internern Schlüssel der WaWi Technische Fragen zu Plugins und Templates 1
Neu Keine Übernahme der Gewichtsangabe JTL-Wawi - Fehler und Bugs 0
Neu Ladezeitprobleme der jtl3.js Betrieb / Pflege von JTL-Shop 0
Fehler von der Kaufland API: productData.attributes.battery_disposal_instruction: No matching model found in additionalProperties to validate battery_ kaufland.de - Anbindung (SCX) 0

Ähnliche Themen