FriendsOfREDAXO / geolocation

Tile-Proxy/Cache und Kartendarstellung mit Leaflet für REDAXO 5.13+
MIT License
26 stars 3 forks source link

Falscher Pfad für die Assets #142

Closed tyrant88 closed 1 year ago

tyrant88 commented 1 year ago

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.

christophboecker commented 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?

tyrant88 commented 1 year ago

REDAXO | 5.15.1 PHP 8.2.4

Geolocation 2.0.0

Yes, Windows.

christophboecker commented 1 year ago

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:

grafik

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.

tyrant88 commented 1 year ago

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.

christophboecker commented 1 year ago

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.

grafik

Was bei mir stanist 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.

tyrant88 commented 1 year ago

Was ergibt bei dir ein rex_path::addonAssets(ADDON, 'geolocation.min.css') ?

christophboecker commented 1 year ago

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.

tyrant88 commented 1 year ago

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.

tyrant88 commented 1 year ago

Ich trete doch noch mal nach: auf einem Windows-System sieht man an den Backslashes, dass hier aus einem Dateipfad eine URL erzeugt wurde... Zwischenablage-1 Richtig schön ist das nicht.

gharlan commented 1 year ago

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.

tyrant88 commented 1 year ago

Genau das habe ich bei mir gemacht :-)