Closed tyrant88 closed 1 year ago
Danke für den Hinweis, schau ich mir an. Welche Versionen waren denn im Einsatz (insb. Geolocation, Redaxo)? Und sehe ich das richtig: es ist ein Windows-System?
REDAXO | 5.15.1 PHP 8.2.4
Geolocation 2.0.0
Yes, Windows.
Ich habs befürchtet :-( so einfach kriege ich den Fehler nicht nachgestellt. Mein Test-Template sieht so aus:
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<?php
\FriendsOfRedaxo\Geolocation\tools::echoAssetTags();
?>
</head>
<body>
REX_ARTICLE[]
</body>
</html>
Damit bindet das System ohne Fehlermeldung ein:
Mein Server läuft lokal (Apache). "localhost" ist auf mein ~/sites
gelegt. Die Rex-Instanz liegt in einem Unterverzeichnis.
Wesentlicher Unterschied: das hier ist macOS. Windows hab ich nicht. Hm.
mach ein Verzeichnis "test" und schiebe da rein die REDAXO Instanz (~/sites/test/meinredaxoprojekt) und lege "localhost" auf "meinredaxoprojekt". Dann wirst du http://localhost/meinredaxoprojekt/assets/addons/geolocation/geolocation.min.css bekommen. Was nicht klappt, weil localhost ja schon auf "meinredaxoprojekt" zeigt. Mit Windows hat das erstmal nichts zu tun.
Ich habe ja ein Verzeichnis ~/sites/rexdev/stan
. Wenn ich das DocumentRoot für localhost
auf ~/sites/rexdev/stan
mappe, lautet die Aufruf-URL einfach http://localhost
. Und wieder werden die Asset-Urls korrekt generiert.
Was bei mir stan
ist bei Dir meinredaxoproject
. Mit http://localhost/stan
komme ich natürlich auch nicht weiter, denn
dafür müsste es ja ein ~/sites/rexdev/stan/stan
geben.
Was ergibt bei dir ein rex_path::addonAssets(ADDON, 'geolocation.min.css')
?
Kommt etwas auf den Kontext an.
In der geolocation/pages/index.php
kommt bei jedem der obigen Server-Roots der korrekte Pfad ~/Sites/rexdev/stan/assets/addons/geolocation/geolocation.min.css
.
In meiner project/pages/index.php
gibt es einen Whoops (Undefined constant "Project\ADDON"
). Mein Project-Addon hat nämlich den namespace Project
, so dass Project\Addon
zu recht als fehlend angemeckert wird.
Ändere ich in rex_path::addonAssets(\FriendsOfRedaxo\Geolocation\ADDON, 'geolocation.min.css')
klapp es. Wieder mit dem korrekten Pfad.
Im FE-Template kommt der Pfad ebenfalls so raus.
Okay. Ich hab es rausgefunden. Es liegt an der speziellen Yakamara-Verzeichnisstruktur und dem Umbiegen des path_providers. Das Problem entsteht bei dir hier: https://github.com/FriendsOfREDAXO/geolocation/blob/master/lib/asset_packer.php#L464
Da benutzt du rex_path::relative(), das wiederum rex_path:base benutzt, was eben in der Yakamara Struktur dann nicht das zusätzliche "public" Verzeichnis enthält und es damit nicht durch das relative() entfernt wird. Was zu meinem ursprünglichen Problem führt: ein "public" im Pfad zuviel.
Lange Rede kurzer Sinn (außer als Vorbereitung für @gharlan ) : close bei dir.
Ich trete doch noch mal nach:
auf einem Windows-System sieht man an den Backslashes, dass hier aus einem Dateipfad eine URL erzeugt wurde...
Richtig schön ist das nicht.
Eigentlich wäre es besser, die direkten rex_url
-Methoden zu nutzen. Also rex_url::addonAssets()
.
Bei dem jetzigen Ansatz müsste bei rex_path::relative
als zweiten Param eine andere Basis übergeben werden:
rex_path::relative($path, rex_path::frontend())
Zusätzlich sollten dann die Backslashes ausgetauscht werden.
Genau das habe ich bei mir gemacht :-)
Es geht um die \FriendsOfRedaxo\Geolocation\tools::echoAssetTags() Funktion
Description / Beschreibung
rex_path::addonAssets(ADDON, 'geolocation.min.css')
ergibt bei mir: "D:\weblocal\xxxxx\public\assets\addons\geolocation\geolocation.min.css"und dein assetpacker macht daraus: http://xxxxx.local/public/assets/addons/geolocation/geolocation.min.css?buster=1681812590
Nur dass das "public" da nichts zu suchen hat, weil es das webroot ist.