Template erweitern Unknow Path

 Hallo,

ich habe die in der Datei custom\plugins\fmFaq\Resources\views\frontend\faq\index.tpl folgenden Inhalt:

{extends file="parent:frontend/index/index.tpl"}

und ich erhalte folgende Fehlermeldung:

Fatal error: Uncaught SmartyException: Unknown path \C:\ShopwareBitnami\apps\shopware\htdocs\themes\Frontend\Responsive\\C:\ShopwareBitnami\apps\shopware\htdocs\themes\Frontend\Bare\\C:\ShopwareBitnami\apps\shopware\htdocs\custom\plugins\fmFaq\Controllers\Frontend/../../Resources/views\\C:\ShopwareBitnami\apps\shopware\htdocs\engine/Shopware/Plugins\Default\Core\PaymentMethods\Views/responsive\frontend/index/index.tpl in file frontend/index/index.tpl in C:\ShopwareBitnami\apps\shopware\htdocs\engine\Library\Smarty\sysplugins\smarty_resource.php:462 Stack trace: #0 C:\ShopwareBitnami\apps\shopware\htdocs\engine\Library\Enlight\Template\Plugins\resource.parent.php(55): Smarty_Resource->buildFilepath(Object(Smarty_Template_Source), Object(Enlight_Template_Default)) #1 C:\ShopwareBitnami\apps\shopware\htdocs\engine\Library\Enlight\Template\Plugins\resource.parent.php(79): Smarty_Resource_Parent->buildFilepath(Object(Smarty_Template_Source), Object(Enlight_Template_Default)) #2 C:\ShopwareBitnami\apps\shopware\htdocs\engine\Li in C:\ShopwareBitnami\apps\shopware\htdocs\engine\Library\Smarty\sysplugins\smarty_resource.php on line 462

 

Hallo @Fensterscheibe‍,

welche Version nutzt du denn?
Darüber hinaus taucht in deinem Stacktrace ein Plugin mit Namen  fmFaq  auf - hast du mal versucht dieses zu deaktivieren?

Gruß,
Patrick  Shopware

Shopware 5.4.1 über Bitnami Stack.

fmFaq ist mein Plugin, welches ich versuche zu entwickeln. Ich habe es schon mehrfach neu installiert.

Vielleicht liegt es einfach daran, dass du auf einem Windows System entwickelts. Kommt die Fehlermeldung auch auf nem Linux Server?

1 „Gefällt mir“

@Rednaxela schrieb:

Vielleicht liegt es einfach daran, dass du auf einem Windows System entwickelts. Kommt die Fehlermeldung auch auf nem Linux Server?

 Liegt am Windows System. Ich muss mir dann mal die virtuelle Maschine zum entwickeln herunterladen. Danke dir.

Das Verhalten bzw. der Fehler hat sich in der neuesten bitnami Version 5.4.1 für Windows nicht verändert, trotz der vielen Änderungen

bzgl. Pfaden für Windows in der Version 5.4.1. Templates können im Plugin somit nicht verwendet werden, wenn man eines erweitern will.

Neue Templates, die kein Template vom Bare-Theme erweitern, funktionieren aber.

Das Problem scheint die Datei smarty_resource.php zu sein, hier insbesondere in der Methode buildFilepath die Stelle

**foreach** (explode('///', $validPaths) **as** $path) {...

Die funktioniert auf Windows mit bitnami-Installation nicht. Setzt man hier einfach

 $pathIsValid = true

findet er das eigene Template-File.

Hier scheint noch einiges nötig zu sein, da an mehreren Stellen immer noch mit einem festen Directory Separator (eben den von Linux) programmiert wird.

Aber prinzipiell sollte ja möglich sein, daß das auf Windows auch funktioniert, das schaffe andere Programme ja auch.

Um es auch für Windows lauffähig zu bekommen muss in der smarty_resource.php folgendes geändert werden: (Aktuell Zeile 450)

Vorher :

$validPaths = substr($source->unique_resource, strpos($source->unique_resource, '#') + 1);
$validPaths = substr($validPaths, 0, strrpos($validPaths, '#'));

foreach (explode('///', $validPaths) as $path) {
    $fullPath = sprintf('%s%s%s%s', DS, trim($path, DS), DS, $file);
    if (file_exists($fullPath)) {
        $pathIsValid = true;
        break;
    }
}

Nachher :

$validPaths = substr($source->unique_resource, strpos($source->unique_resource, '#') + 1);
$validPaths = substr($validPaths, 0, strrpos($validPaths, '#'));

$delimiter = DS . DS . DS;
$prefix = DS;

// if server is running windows
if(DS == '\\') {
    $delimiter = DS . DS;
    $prefix = '';
}

foreach (explode($delimiter, $validPaths) as $path) {
    $fullPath = sprintf('%s%s%s%s', $prefix, trim($path, DS), DS, $file);
    if (file_exists($fullPath)) {
        $pathIsValid = true;
        break;
    }
}