11 Stimmen

Basispfad von der Ansicht im Zend Framework erhalten

Fall: Sie entwickeln eine Website mit Zend Framework und benötigen relative Links zu dem Ordner, in dem die Webapp bereitgestellt wird. D.h.. mysite.com/folder online und localhost:8080 in der Entwicklung.

Das Folgende funktioniert gut in Controllern, unabhängig davon, wo sie eingesetzt werden:

$this->_helper->redirector->gotoSimple($action, $controller, $module, $params);

Und das Folgende innerhalb eines Viewscripts, z.B. index.phtml:

<a href="<?php echo $this->url(array('controller'=>'index', 'action' => 'index'), null, true); ?>">

Aber wie erhalte ich den richtigen Basispfad, wenn ich auf Bilder oder Stylesheets verlinke? (z. B. in einer layout.phtml-Datei):

<img src='<?php echo WHAT_TO_TYPE_HERE; ?>images/logo.png' />

und

$this->headLink()->appendStylesheet( WHAT_TO_TYPE_HERE . 'css/default.css');

WHAT_TO_TYPE_HERE sollte durch etwas ersetzt werden, das

<img src="/folder/images/logo.png />` on mysite.com and `<img src="/images/logo.png />

auf localhost

16voto

Akeem Punkte 7582

Sie können die Basis-URL vom Front-Controller abrufen Zend_Controller_Front::getInstance()->getBaseUrl(); . Ich verpacke das in einen View-Helper

class My_View_Helper_BaseUrl 
{   
    /**
     *  Get base url
     * 
     * @return string
     */
    public function baseUrl()
    {
        return rtrim(Zend_Controller_Front::getInstance()->getBaseUrl(),'/');
    }

}

In der HTML-Auszeichnung haben Sie also etwas wie <img src="<?php echo $this->baseUrl();?>/images/logo.png"/> Der abschließende Schrägstrich wird in der Hilfsfunktion entfernt, damit der Pfad auch dann funktioniert, wenn die Anwendung nicht in einem Unterordner ausgeführt wird (baseUrl ist in diesem Fall leer).

14voto

puppybits Punkte 1110

Für den Fall, dass jemand den besten Weg wissen will und nicht 2 Stunden mit der Suche in Zend/Google verschwenden möchte. Es gibt einen View-Helper um das zu tun.

$this->view->serverUrl();

5voto

irfan khan Punkte 51

Wenn Sie den Hostnamen in Ihrem layout Datei, drucken Sie diese aus und holen Sie Ihre HOST Name:

echo $this->serverUrl().$this->baseUrl()

4voto

Dies ist mein baseUrl Helfer:

class Zend_View_Helper_BaseUrl extends Zend_View_Helper_Abstract {
    public function baseUrl() {
        $protocol = isset($_SERVER['HTTPS']) ? 'https' : 'http';
        $server = $_SERVER['HTTP_HOST'];
        $port = $_SERVER['SERVER_PORT'] != 80 ? ":{$_SERVER['SERVER_PORT']}" : '';
        $path = rtrim(dirname($_SERVER['SCRIPT_NAME']), '/\\') . '/';
        return "$protocol://$server$port$path";
    }
}

0voto

RoboTamer Punkte 3348
<?php
/**
 *
 * @package   TaMeR Library
 * @copyright (C) 2010 Dennis T Kaplan
 * @license   GPL {@link http://www.gnu.org/licenses/gpl.html}
 *
 * @author       Dennis T Kaplan
 */

/** @see Zend_View_Helper_Abstract */
require_once 'Zend/View/Helper/Abstract.php';

class TaMeR_View_Helper_BaseUrl extends Zend_View_Helper_Abstract {
    /**
     * Returns site's base url, or file with base url prepended
     *
     * $file is appended to the base url for simplicity
     *
     * @param  string|null $file
     * @return string
     */

    public function baseUrl($file = NULL) {

        $baseUrl = $domain = $subdomain = $protocol = $host = $port = NULL;

        $host = array_reverse(explode('.', $_SERVER['HTTP_HOST']));
        $domain = $host[1].'.'.$host[0];
        $subdomain = (isset($host[2]) ? $host[2] : 'www');
        if(getenv("HTTPS") == 'on') {
            $protocol = 'https';
            $port     = $_SERVER['SERVER_PORT'] != 443 ? ':'.$_SERVER['SERVER_PORT'] : '';
        }else{
            $protocol = 'http';
            $port     = $_SERVER['SERVER_PORT'] != 80 ? ':'.$_SERVER['SERVER_PORT'] : '';
        }

        // Remove trailing slashes
        if(NULL !== $file) {
            $file = '/' . ltrim($file, '/\\');
        }else{
            $file = rtrim(dirname($_SERVER['SCRIPT_NAME']), '/') . '/';
        }
        $baseUrl = $protocol.'://'.$subdomain.'.'.$domain.$port.$file;
        return $baseUrl;
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X