Inhalte aufrufen

Profilbild
- - - - -

Theming im eigenen Modul


  • Bitte melden Sie sich an, um eine Antwort zu verfassen.
2 Antworten zu diesem Thema

#1 Algorithman

Algorithman

    Advanced Member

  • Members
  • PunktPunktPunkt
  • 39 Beiträge

Geschrieben: 05 April 2023 - 08:40

Guten Morgen,

 

ich versuche gerade die Views/Product/Partials/Product.Media.cshtml bzw. Views/Shared/Partials/MediaGallery.cshtml durch eine eigene zu ersetzen in meinem Modul.

Also dachte ich mir, ich erstelle in meinem Modul ein neues Theme (basierend auf Flex, im Endeffekt nur eine angepasste Kopie von FlexBlue zum Testen).

Aber das Theme taucht im Backend nie auf. Muss ich Themes im Modul noch irgendwie speziell registrieren?

 

MfG

 

 

Chris
 



#2 Algorithman

Algorithman

    Advanced Member

  • Members
  • PunktPunktPunkt
  • 39 Beiträge

Geschrieben: 05 April 2023 - 17:01

Hmm, wenn ich mir die Pipeline in https://smartstore.g...eme-inheritance so anschau, dann würde ich davon ausgehen, dass auch innerhalb der Module nach Themes gesucht werden würde.

Ja, ist nicht der Fall, zumindest in Dev-Umgebungen auf Windows. 
Sieht so aus, als ob der SymLink, der in ModuleLoader.cs generiert wird
1. nicht auf das richtige Verzeichnis zeigt
2. nicht aufgelöst wird (File.ResolveLinkTarget wird von EnumerateDirectories anscheinend nicht verwendet)

Das hat zur Folge, dass der Link (der zwar generiert wird) nicht aufgelöst wird und (zumindest unter Windows) das verlinkte Theme-Verzeichnis nicht enumeriert wird.

Für Entwickler sinnvoll:

Macht euch einen mklink /J, dann funktionierts auch mit Themes in Modulen.
Wenn der Link einmal drin ist, dann wird der auch nicht vom ModuleLoader überschrieben.

Für Smartstore:

 

Der Link an sich sollte natürlich auch auf das richtige Verzeichnis zeigen.

Momentan wird das Modul-Verzeichnis verlinkt, nicht das Theme-Verzeichnis.

 

Also anstatt 

                        File.CreateSymbolicLink(themeDir.PhysicalPath, descriptor.PhysicalPath);

bitte

                        File.CreateSymbolicLink(themeDir.PhysicalPath, Path.Combine(descriptor.PhysicalPath, "Themes", descriptor.Theme));

in ModuleLoader.cs verwenden.
Dann klappts zumindest in Linux Umgebungen.

Für die Windows-Umgebungen brauchts etwas mehr Arbeit in den Directory-Enumeratoren, damit die auch SymLinks folgen.

MfG

 

Chris



#3 Algorithman

Algorithman

    Advanced Member

  • Members
  • PunktPunktPunkt
  • 39 Beiträge

Geschrieben: 05 April 2023 - 17:06

Und um mein ursprüngliches Problem zu beantworten...

Ja, mit den beschriebenen Änderungen funktioniert dann auch die Razor Pipeline, cshtml in Themes werden dann korrekt ausgeführt.