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 Like

@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;
    }
}