wir betreiben einen OXID-Shop, in den ich mich gerade hereinarbeite. Da der Vorgänger unerwartet gegangen ist und ich mich seit erst seit wenigen Tagen mit OXID und dem gesamten MVC-Pattern beschäftige, bin ich zurzeit etwas hilflos.
Es wurden verschiedene, selbstentwickelte Module hinterlassen. Eins davon (zur Erstellung/Verwaltung von Coupons) funktioniert im BackEnd noch nicht ganz richtig.
Jetzt wurde ich gebeten zu versuchen, u.a. die fehlende Funktionalität des Moduls zu implementieren. Und zwar sind im BackEnd zwei Felder hinterlegt, mit denen man die darunterliegende Spalte filtern kann (siehe Screenshot). Diese haben noch keine Funktion. Konkret heißt das, bei Eingabe soll eine entsprechende SQL-Query abgeschickt werden und das Ergebnis in der Listenansicht wie gehabt angezeigt werden.
Jetzt bin ich leider wie gesagt weder mit PHP, geschweige denn mit MVC besonders vertraut, obwohl ich seit Tagen Tutorials durcharbeite.
Könnte mir jemand etwas Starthilfe geben, wie das ganze umzusetzen wäre? Muss ich quasi einen neuen Controller anlegen, registrieren und da kann ich dann die Filterlogik umsetzen? Und in einem Block wird dann das ResultSet abgelegt und über die TPL-Datei platziert?
Das heißt, bei Eingabe von “Ostern” willst nur das erste aus der Liste im Bild angezeigt bekommen? Da fehlt wohl der button zum Abschicken der Suche.
Schau dir die Artikeliste im Admin an. Dann gibst Titel oder Artikelnummer an und dann mal beides richtig und mal falsch. Der Query wird aus den gefüllten Suchfeldern und “AND” zusammengestellt. Das kannst am Namen der einzelnen Input-Felder sehen Bsp:
Danke für die Antwort!
Stimmt, die Artikelliste enthält bereits die exakt gewünschte Filterfunktion.
Ich versuche mal, mir die Funktion davon abzukupfern.
Sollte ich kein Erfolg haben, melde ich mich hier wieder zu Wort.
Habe versucht anhand des vorhandenen Codes die Filterfunktion umzusetzen.
Aber das klappt leider hinten und vorne noch nicht. Kein Wunder, habe nicht allzuviel von dem Code verstanden. Orientiert habe ich mich am hieran:
Immerhin ist besagter Button zum Abschicken der Suche nun vorhanden, wenngleich er nur zum Home-Bildschirm weiterleitet. Das man auch keine Autovervollständigung nutzen kann macht Try-and-Error so gut wie unmöglich… Die aktuelle Version ist im obigen Repo. Hoffe, mir kann noch weiter geholfen werden.
PS: Zum Testen muss bei im Modulroot lliegende install.sql manuell ausgeführt werden. Habe es noch nicht geschafft, diese über das Activate-Event zu starten.
Hier mein aktueller Code in der Template-Datei ‘kcscoupon_list.tpl’:
Dazu musst Dir die Shop-Datei article_list.tpl anschauen. Es fehlen die Formparameter, d.h. die Zeilen hinter [{$oViewConf->getHiddenSid()}] aus Deinem Beispiel.
Die Weiterleitung auf die Startseite dürfte dann auch von [{ $where.kcscouponseries.oxtitle LIKE 'Ostern' }] verursacht werden, wenn _prepareWhereQuery(…); in Verbindung mit _buildSelectString(…); im Controller nicht darauf ausgerichtet werden.
Die Fehler dürften im Log stehen. Daran kann man sich orientieren.
danke, dass du dich meinem Problem angenommen hast. Mir ist klar, dass das nicht selbstverständlich ist, gerade bei so im Grunde hochgradig trivialen Basics.
Danke für den Hinweis, das hilft mir weiter! Werde morgen Rückmelden, ob ich es damit dann endlich geknackt bekommen habe.
Da ich das nicht wirklich verstehe, wird es wohl Zeit, nochmal zurück zu den Basic OXID Tutorials zu kehren. Allerdings ändert sich nichts, wenn das “LIKE ‘Ostern’” wieder rausgenommen wird (war nur zu Testzwecken drinnen), falls sich deine Aussage darauf bezog.
Verstehe, gut zu wissen. Werde morgen im Büro gleich mal die Logs checken.
Noch zwei andere Dinge:
Irgendwie kommt mir diese ganze Ordnerstruktur etwas ungewöhnlich für ein MVC-Pattern. Vermisse beispielsweise sowas wie einen Core-Ordner. In den Tutorials (i.d.R. nicht für OXID 6.3) sieht das meist etwas fülliger aus, genauso wie das entspr. Git-Repo. Aber sowohl FrontEnd als auch BackEnd scheinen normal zu funktionieren mit meiner Ordnerstruktur:
Andererseits bekomme (auch bei fresh install) ich bei jedem composer update ein Fehler vom Skript “oe:ide-helper:generate” (returned error code 1) - ist das normal?
Puh, sich in OXID einzuarbeiten, ist müheseliger, als angenommen
super, das Modul funktioniert nun, so wie es das soll.
Der Code war tatsächlich schon in Ordnung. Die Änderungen hat OXID allerdings erst übernommen, nachdem ich das Modul manuell gelöscht (aus ./vendors/… und ./source/modules/…, 1.yaml + ./source/tmp leeren) und neu eingetragen habe.
Der Vollständigkeit halber fürs Archiv hier noch das TPL-File:
Gerne. Das kannst aber während der Entwicklung abkürzen. Wenn das Modul installiert ist, reichen Änderungen in
zzgl. Löschen des TMP. Änderungen an der metadata übernimmst mit ...install-configuration....
Nur bei Fertigstellung des Moduls kannst die anderen Ordner im vendor etc. aktualisieren.
Verstehe, alles klar.
Gut, habe mir inzwischen sowieso einen kleinen Batch geschrieben, der vom benannten Modul alles löscht, das lasse ich einfach durchlaufen, um Änderungen bei der Modulentwicklung zu übernehmen:
@echo off
chcp 1252
set VENDOR=gruntjs
set MODULE=grunt-cli
set OXROOT=C:\XAMPP\htdocs\oxid\
cls
echo.
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo Entferne Modul: %VENDOR%/%MODULE%
echo Shop-Rootverzeichnis: %OXROOT%
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo [#] Lösche Ordner .\vendor\%VENDOR%\%MODULE%\
rd /s /q %OXROOT%\vendor\%VENDOR%\%MODULE%\
echo.
echo [#] Lösche Ordner .\source\modules\%VENDOR%\%MODULE%\
rd /s /q %OXROOT%\source\modules\%VENDOR%\%MODULE%\
echo.
echo [#] Lösche alle *.php und *.txt in .\source\tmp
rd /s /q %OXROOT%\source\tmp\%VENDOR%\%MODULE%\
echo.
echo [#] Lösche *.php und *.txt in .\source\tmp\smarty
del %OXROOT%\source\tmp\*.txt /f /q
del %OXROOT%\source\tmp\*.php /f /q
del %OXROOT%\source\tmp\smarty\*.txt /f /q
del %OXROOT%\source\tmp\smarty\*.php /f /q
echo.
echo [#] Lösche die parent composer.lock
del %OXROOT%\composer.lock /f /q
echo.
echo [#] Entferne die Einträge in composer.json und 1.yaml per Composer
cd %OXROOT%
composer remove %VENDOR%/%MODULE% -n
echo.
echo INFO:
echo [!] Falls die Datenbank geändert wurde, müssen die Änderungen manuell rückgängig gemacht machen!
echo.
echo [#] Modul "%VENDOR%/%MODULE%" wurde deinstalliert!
pause
chcp 850