Kontrollieren ob eine Datei existiert mittels PHP + Smarty

Moin zusammen,

ich möchte über einen Template mittels Smarty kontrollieren ob eine Datei exisitert und falls ja, diese halt zeigen.

Ich habe dazu eine PHP-Datei erstellt und diese mit einem PHP-checker kontrolliert. Der ist soweit in Ordnung.

Nun include ich diese PHP-Datei mit Smarty aber danach gibt die Seite eine Fehlermeldung, es funktioniert halt nicht (ein echter Fehler wird da nicht angezeigt).

Was mache ich da falsch?

TEMPLATE - Smarty:

{include_php file="/frontend/listing/manufacturecheckimage.php"}

 

PHP - Datei


Vielleicht kann einer weiterhelfen? Danke!

LG, S-D

Man kann kein PHP in Smarty inkludieren.

ok danke für die Info!

Wie bekomme ich das nun hin, also über Smarty in einem Template zu prüfen ob eine Bild-Datei existiert?

Ich bin schon eine Woche am rumtüfteln, habe etliche mögliche Varianten bezüglich Programmierung probiert, klappt aber nicht. :frowning:

In Frontend/MEINTHEME/_private/smarty/function.MEINEFUNKTION.php kannst du PHP ausführen. Im Theme rufst du sie auf und kannst auch variablen übergeben ungefähr so:  {MEINEFUNKTION variable=$meineSmartyVariable}

Danke :) 

Ich habe nun die PHP-Datei, Inhalt wie oben, in dem vorgenannten Ordner hochgeladen.

 

Die Datei heist  function.manufacturercheckimage.php

Im Template schreibe ich dann:
{ manufacturercheckimage **variable=$filename001}

aber die Seite gibt wieder die Fehlermeldung. Da fehlt mit Sicherheit noch etwas, sprich das Aufrufen der PHP-Datei?**

Die PHP-Datei “returned” einen Inhalt. Deshalb kann die php Datei nicht beliebig aussehen. 

';

}

 

1 „Gefällt mir“

Danke. Da muss ich weitertüfteln, bin kein Programmierer, fuchse mich da selber rein.

Im theme/Frontend/MEINTHEME/frontend/…irgendeine…tpl

 {manufacturercheckimage variable=$bildpfad}

Und die theme/Frontend/MEINTHEME/_private/smarty/function.manufacturercheckimage.php 

";

    }

}

 

1 „Gefällt mir“

Ich glaube wir haben es fast?

 

 

aber irgendwo habe ich noch einen Denkfehler…

 

Probiere mal einen Bild-Pfad aus, wo du weisst, dass er wirklich existiert. z.B.

{manufacturercheckimage variable='https://exaample.com/diese/bild/existiert/wirklich.jpg'}

Wenn das funktioniert gehst du zum nächsten Schritt und hole dir die richtige Variable an der richtigen Stelle ab. 

Wenn du den Artikel-Hersteller-Name suchst, dann kannst du darauf nur auf der Detailseite oder im Listing in der Artikel-box drauf zurück greifen. Der Herstellername eines Artikels ist der “supplierName”.

{manufacturercheckimage variable=$sArticle.supplierName|escape}

Wie gesagt, kann dieser Code auch nicht überall stehen, sondern nur dort wo du Zugriff aus $sArticle.supplierName hast. Zum testen einfach einmal ins Theme schreiben und gucken was bei rauskommt: 

{$sArticle.supplierName|escape}

 

1 „Gefällt mir“

also, die Zeilen

{$bildpfad = “/media/image/kategorie/marken/{$manufacturer->getName()|escape}/001.jpg”}
{manufacturercheckimage variable=$bildpfad}

befinden sich im manufacturer.tpl (/frontend/listing) und geben keine Fehlermeldung.
Es wird aber kein Bild im Template angezeigt?!

Ich denke das im PHP nichts herausgelesen wird (?)

du kannst die function.manufacturercheckimage.php mal anpassen:

";

    }else{
   
       return "kein Bild";

    }

}

Folgendes ist mir unbekannt: 

{$bildpfad = "/media/image/kategorie/marken/{$manufacturer->getName()|escape}/001.jpg"}

Versuche mal zu Testzwecken ein Bild zu nehmen was es gibt.

1 „Gefällt mir“

Danke. Bei deiner Zeile fehlt das Häckchen schliessen:

    if(file_exists($meineVariable)){

 

ich bastle mal weiter.

Achso, zum definieren von Variablen in Smarty nutze ich normalerweise folgendes:

{assign var="bildpfad" value=$sArticle.supplierName}

Auf diese kann ich dann zurückgreifen z.B. so:

{$bildpfad}

oder so:

{manufacturercheckimage variable=$bildpfad}

Als Tipp: lass dir die zur Verfügung stehenden Variablen ausgeben mit {debug}

(ps: nur in nicht-repetativen TPLs wie index.tpl oder header.tpl eintragen)

{$bildpfad = „/media/image/kategorie/marken/{$manufacturer->getName()|escape}/001.jpg“}

je nachdem welcher Hersteller, wird das betreffende Bild aus dem Ordner dargestellt in manufacturer.tpl
 

Ja, das ist so richtig

Es sollten erstmal folgende Fragen beantwortet werden.

  • Testen ob es mit einem exisiterendem Bild funktioniert. JA / NEIN
  • Woher nimmst du den Pfad media/image/kategorie/marken/{$manufacturer->getName()|escape}/001.jpg ? Hast du diesen mal einfach so ausgegeben? also {$bildpfad} ohne function.manufacturercheckimage.php ?

Punkt 1: richtig, das teste ich gerade

Punkt 2: Den Pfad habe ich selber kreiert, damit die Bilder sauber in den jeweiligen Ordner sind.
Wenn ich die ausgebe wird der Link (als Text) auch gezeigt, er 
{$manufacturer->getName()|escape} ist der jeweiliger ausgewählter Hersteller