Neu Artikelvariablen innerhalb der Artikelübersicht erweitern.

  • Temporäre Senkung der Mehrwertsteuer Hier findet ihr gesammelt alle Informationen, Videos und Fragen inkl. Antworten: https://forum.jtl-software.de/threads/mehrwertsteuer-senkung-vom-01-07-31-12-2020-offizieller-diskussionthread-video.129542/

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.206
276
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.323
222
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.323
222
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.323
222
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.206
276
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 Forum Antworten Erstelldatum des Themas
Neu Innerhalb eines Artikels - Auswahl mit unterschiedlichen Stückzahlen und Preisen Allgemeine Fragen zu JTL-Shop 8
Neu verschiedene Frachtkosten innerhalb eines Lieferanten Arbeitsabläufe in JTL-Wawi 0
Neu Änderung der Serversortierung - SQL_Latin1_General_CP1_CI_AS Installation von JTL-Wawi 0
Neu Druckvorlagen - Wie den MWSt-Satz löschen (bei der Rechnungssummierung) Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 0
Neu Retouren - Artikelzustände nach Eintreffen der Ware ändern und Artikelnummer neu vergeben JTL-Workflows - Ideen, Lob und Kritik 0
Neu Artikelübersetzung mit der Ameise User helfen Usern - Fragen zu JTL-Wawi 0
Neu Woher kommt der Fehler "CSRF-Warnung fuer Login: 1" in den JTL Logs? Allgemeine Fragen zu JTL-Shop 0
Gelöst DHL Retourelabel aus der WaWi heraus erzeut Fehlermeldung JTL-ShippingLabels - Fehler und Bugs 1
Neu Feld für "Letzter Bearbeiter" in der Spaltenansicht (Artikel) war leer User helfen Usern - Fragen zu JTL-Wawi 1
Neu Filter auf der Spalte - Sichtbarkeit User helfen Usern - Fragen zu JTL-Wawi 0
Neu Datum der Bestellung im Lieferschein Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 1
Neu Fehler in Export- CSV der Bons JTL-POS - Fehler und Bugs 1
In Bearbeitung Auftrag auf Pickliste setzen fürht immer wieder zum Absturz der WAWI JTL-Wawi - Fehler und Bugs 3
Neu kein Abspeichern der Konfigurtion möglich Modified eCommerce-Connector 2
Neu Aufaddieren der Bestell-Liste User helfen Usern - Fragen zu JTL-Wawi 0
Neu Versandmeldung zeigt nur Teil der Bestellung trotz Gesamtversand Shopify-Connector 0
Neu Wer hat Erfahrung mit möglicher Bereicherung der Deutschen Post aus Eurer Portokasse? User helfen Usern - Fragen zu JTL-Wawi 1
In Bearbeitung [WAWI-50220] Gewicht in der Artikelübersicht wird abgeschnitten (nur 2-stellig) JTL-Wawi - Fehler und Bugs 3
Neu Übernahme der easybill E-Mail in JTL Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 1
Neu Reihenfolge der Var-Kombis im Shop durcheinander Allgemeine Fragen zu JTL-Shop 7
Neu Nach Update von 4.05 auf 4.06 funktioniert der Bestellvorgang nicht mehr Installation / Updates von JTL-Shop 4
Neu Der Shoptyp der Lizenz stimmt nicht mit dem des Shops überein. Lizenz: WooCommerce 3 - Shop: WooCommerce 4Onlineshop-Abgleich beendet für 'Urbanwines. WooCommerce-Connector 0
Neu Anzahl Top-Produkte in der Mobile Ansicht Templates für JTL-Shop 8
Gelöst Das Feld "F.Zusatz" fehlt bei den Kundendaten/Rechnungsadresse in der Rechnungsmaske JTL-Wawi - Fehler und Bugs 3
Neu Mehrmaliger Abbruch der Verbindung zur TSE JTL-POS - Fehler und Bugs 5
Gelöst Wozu dient der Bereich "Aufträge - externe Rechnungen" ? Arbeitsabläufe in JTL-Wawi 5
In Bearbeitung Nachrichten und Preisvorschläge in der WAWI werden nicht mehr mir angezeigt eBay-Anbindung - Fehler und Bugs 2
Neu Gambio 3 Webshop-URL Fehlermeldung trotz korrekter Hinterlegung der URL im Kundencenter Gambio-Connector 3
Offen Abbrüche bei der Verwendung von JTL-WMS Mobile JTL-WMS - Fehler und Bugs 4
Neu Zurückstzen der IMP id's User helfen Usern - Fragen zu JTL-Wawi 1
In Bearbeitung Die Prüfung der Datenbank ist fehlgeschlagen WAWI MSSQL JTL-Wawi - Fehler und Bugs 2
Neu Vorschlag: Retoure - online aufrufen Button in der Übersicht JTL-Wawi - Ideen, Lob und Kritik 0
Neu Variablen in der eMails Allgemeine Fragen zu JTL-Shop 2
Gelöst [Deutsche Post] UPDATE: 09.10.20 Fehler beim erstellen der Versandetiketten Gelöste Themen in diesem Bereich 1
Gelöst [DPD] Fehlermeldungen beim erstellen der Versandetiketten 09.10.20 Gelöste Themen in diesem Bereich 1
Gelöst Der Server kann nicht auf diesem Port laufen... JTL-WMS - Fehler und Bugs 2
Neu Alternativtext bei Bildnamen können in der Wawi nicht mehr gespeichert werden Shopware-Connector 8
In Bearbeitung Aufträge fehlen in der Wawi JTL-Wawi - Fehler und Bugs 3
In Bearbeitung Artikelsuche in der Positionszuordnung im Sofortauftrag funktioniert nicht nach Kategorie JTL-Wawi - Fehler und Bugs 1
Neu POS-Vorgänge auch in der Wawi anzeigen Allgemeine Fragen zu JTL-POS 8
In Bearbeitung HTML Editor in der Wawi und https eBay-Designvorlagen - Fehler und Bugs 1
Neu Anzahl der Pakete auf dem Versandlabel User helfen Usern - Fragen zu JTL-Wawi 0
Neu Bilder nach Änderung der Beschreibung weg. User helfen Usern - Fragen zu JTL-Wawi 3
Neu Plötzlich: Die Update Anweisung setht in Konflikt mit der Check Einschränkung CK:tlagerbestand_fknAuftraegen_1 User helfen Usern - Fragen zu JTL-Wawi 0
Gelöst Meldung: Der HTTP-Dienst auf https://api.jtl-shipping.de/JtlWebApi.svc ist nicht verfügbar. Möglicherweise ist d Gelöste Themen in diesem Bereich 3
Neu Kundenspezifischer Staffelpreis (Sp) wird nicht berücksichtigt, wenn der SP des Kunden größer als der SP in Registerkarte 'JTL-Wawi' ist JTL-Wawi - Fehler und Bugs 0
Neu Der Grundpreis beim Sonderpreis Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 0
In Bearbeitung fehlende Bezeichnung - Versandkosten auf der Rechnung eBay-Anbindung - Fehler und Bugs 3
Neu Bei Auslieferung hängt sich der Hintergrundprozess auf. keine Rechnungen... JTL-Wawi - Fehler und Bugs 4
Neu Empfohlene Hardware (Tablet) JTL-POS & JTL-Wawi -> Vor- und Nachteile der Systeme JTL-POS - Fragen zu Hardware 3
Ähnliche Themen