Prüfen, ob Datei vorhanden ist, bevor die Anzeige im Magento-PHP?
Ich bin in der Lage, um die web-Pfad zu der Datei, etwa so:
$filename = 'elephant.jpg';
$path_to_file = $this->getSkinUrl('manufacturertab');
$full_path = $path_to_file . '/' . $filename;
Aber wenn die Datei nicht vorhanden ist, dann habe ich am Ende mit einem gebrochenen Bild-link.
Habe ich versucht, dieses:
if(!file_exists($full_path)) {
Mage::log('File doesn\'t exist.');
} else {
?><img src="<?php echo $full_path ?>" /><?php
}
Natürlich, dass hat nicht funktioniert, weil file_exists
funktioniert nicht auf urls.
Wie löse ich dieses?
1.)
Kann ich das übersetzen zwischen system-Pfade und web-urls in Magento?
z.B. so etwas wie (pseudocode):
$system_path = $this->getSystemPath('manufacturertab');
Sieht symmetrisch und tragbar.
bzw.
2.)
Gibt es irgendeine PHP-oder Magento-Funktion für die überprüfung der remote-Ressource Existenz? Aber das scheint eine Verschwendung, da die Ressource ist wirklich lokal. Es wäre dumm für PHP einen http-Methode zum prüfen einer lokalen Datei, wäre es nicht?
Lösung, die ich momentan verwende:
$system_path = Mage::getBaseDir('skin') . '/frontend/default/mytheme/manufacturertab'; //portable, but not pretty
$file_path = $system_path . '/' . $filename;
Ich dann prüfen, ob file_exists
und wenn es funktioniert, zeige ich die img
. Aber ich weiß nicht, wie die Asymmetrie zwischen hard-code-Teil ist der Pfad für den system-Pfad, und das mit einer Methode, die für den url-Pfad. Es wäre schön, eine Methode für beide.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Funktion
zurück den gleichen Weg, wie
aber auf Ihrem lokalen Dateisystem. Können Sie weglassen der '_default' => false-parameter und es wird stil zu arbeiten (ich verließ es nur, weil getSkinUrl auch setzt es intern).
Beachten Sie, dass die parameter für getSkinUrl und getFilename kann entweder eine Datei oder ein Verzeichnis, aber Sie sollte immer der gesamte Pfad (mit Dateiname), so dass der fallback-Mechanismus funktioniert.
Betrachten Sie die situation
skin/default/default/manufacturertab/a.jpg
skin/yourtheme/default/manufacturertab/b.jpg
In diesem Fall wird der Aufruf zu getSkinUrl oder getFilename zurückkehren würde, den Pfad zu a.jpg und b.jpg in beiden Fällen, wenn die Datei-Namen als parameter aber für deinen Fall, wo du nur den Ordner Namen würde es wieder Haut - /deinthema/default/manufacturertab/für beide Fälle, und wenn, würden Sie befestigen den Namen der Datei, und überprüfen Sie a.jpg die Prüfung fehlschlagen würde. Das ist, warum Sie sollte immer der gesamte Pfad als parameter.
Werden Sie noch verwenden Sie Ihre eigene Funktion, um zu überprüfen, ob die Datei vorhanden ist, als getFilename-Funktion liefert Standard-Pfad, wenn die Datei nicht vorhanden ist (gibt skin/default/default/manufacturertab/foo.jpg wenn manufacturertab/foo.jpg nicht vorhanden).
$filename
, aber wo würde ich den vollständigen Pfad?$file_path = $this->getSkinUrl( 'manufacturertab' ) . '/' . $filename;
aber stattdessen solltest du schreiben$file_path = $this->getSkinUrl( 'manufacturertab/' . filename );
da dies ermöglicht getSkinUrl Funktion, nicht nur zu prüfen, ob Ordner, aber auch wenn die Datei vorhanden ist. Das gleiche gilt für getFilename-Funktion. Beachten Sie, dass der Pfad hat sich nicht geändert - das einzige, was sich geändert hat, ist, ob Sie verketten der name und relativer Pfad vom skin-Ordner, bevor oder nachdem Sie die Funktion aufrufen.es mir helfen:
können Sie
können Sie auch curl oder versuchen Sie diesen link http://junal.wordpress.com/2008/07/22/checking-if-an-image-url-exist/
Mage::getBaseDir()
ist, was Sie für Fragen. Für Ihr SzenariogetSkinBaseDir()
einen besseren job.Beachten Sie, dass für die
<img src>
benötigen Sie die URL, nicht das system Weg. ...is_file()
eher alsfile_exists()
, in diesem Fall, könnte eine gute option, wenn Sie sicher sind, dass Sie überprüft eine Datei, kein Verzeichnis.Könnten Sie Folgendes verwenden:
Arbeitete für mich, wenn Sie versuchen zu überprüfen, ob ein Bild vorhanden ist, auf die URL