Ich schreibe einen benutzerdefinierten Helper, der HtmlHelper
erweitert und überschreibt die \HtmlHelper::image()
Methode, um die Bilddimensionen zu berechnen und sie als HTML-Attribute hinzuzufügen. Was ich habe, so arbeitet weit in Ordnung für regelmäßige Bilder:Dateisystem Pfad für Bilder
public function image($path, $options = array()) {
if (!array_key_exists('width', $options) && !array_key_exists('height', $options)) {
$stamp = Configure::read('Asset.timestamp');
Configure::write('Asset.timestamp', false);
$path = $this->assetUrl($path, $options + array('pathPrefix' => Configure::read('App.imageBaseUrl')));
list($width, $height) = @getimagesize(rtrim(WWW_ROOT, '\\/') . $path);
if (!is_null($width)) {
$options['width'] = $width;
}
if (!is_null($height)) {
$options['height'] = $height;
}
Configure::write('Asset.timestamp', $stamp);
}
return parent::image($path, $options);
}
... aber hat diese Fehler:
Bilder von Plug-Ins können nicht auf der Festplatte befinden (und sie sollten), zB :
echo $this->Html->image('/debug_kit/img/cake.icon.png', array('alt' => 'CakePHP'));
... erzeugt diesen Pfad Dateisystem:
…\src\webroot/debug_kit/img/cake.icon.png
... also nicht
getimagesize()
weil tatsächliche Lage ist:…\src\Plugin\DebugKit\webroot\img\cake.icon.png"
Externe Bilder (die ignoriert werden sollte) gehen durch den gesamten Prozess:
echo $this->Html->image('http://placekitten.com/200/300'); …\src\webroothttp://placekitten.com/200/300
ich für eine gesucht haben eingebaute Methode, um eine CakePHP-Bild-URL zu konvertieren (in jedem Format, das von \HtmlHelper::image()
akzeptiert wird, in einen Dateisystempfad (o etwas wie null
, wenn dies nicht zutrifft), aber ich konnte keine finden. Native Features, die einen Festplattenpfad benötigen, wie \Helper::assetTimestamp()
, sind in Tonnen von nicht wiederverwendbarem Code verpackt.
Gibt es eine elegante Lösung?
Ich glaube nicht, dass das stimmt. PHP kann beides ohne irgendein Problem behandeln. Pfadtrennzeichen ändern nicht die Tatsache, dass im Pfad mehrere Komponenten fehlen (z. B. 'Plugin \ DebugKit'). (BTW, ich benutze CakePHP/2, nicht 3.) –
Haben Sie versucht, es mit Plugin name.path verwenden, verweisen Sie dieses Dokument: - https://book.cakephp.org/2.0/en/core-libraries/ helpers/html.html # HtmlHelper :: image – Deejay
Nicht sicher, was Sie genau meinen. Ich habe kein Problem mit der 'image()' Methode selbst, Plug-in-Bilder funktionieren gut. Ich möchte eine zusätzliche Verarbeitung vornehmen, für die ich den vollständigen Dateisystempfad des Assets benötige. Ich könnte 50 Codezeilen schreiben, die PHP-Kernfunktionen duplizieren, aber das möchte ich vermeiden. –