11

ケース: Zend Framework を使用してサイトを開発していて、webapp が展開されているフォルダーへの相対リンクが必要です。つまり、mysite.com/folderオンラインlocalhost:8080で開発中です。

以下は、デプロイされた場所に関係なく、コントローラーでうまく機能します。

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

そして、ビュースクリプト内の次のようになります。index.phtml:

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

しかし、画像やスタイルシートにリンクするときに正しいベースパスを取得するにはどうすればよいでしょうか? (たとえば、layout.phtml ファイル内):

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

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

WHAT_TO_TYPE_HEREを与えるものに置き換える必要があります。

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

ローカルホストで

4

6 に答える 6

16

ベースURLはフロントコントローラーから取得できますZend_Controller_Front::getInstance()->getBaseUrl();。ビューヘルパーでラップします

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

}

したがって、htmlマークアップには<img src="<?php echo $this->baseUrl();?>/images/logo.png"/>、ヘルパーで末尾のスラッシュが削除され、アプリケーションがサブフォルダーで実行されていない場合(この場合はbaseUrlが空白)でもパスが機能するようになります。

于 2009-03-11T18:26:17.290 に答える
14

誰かが最善の方法を知りたいと思っていて、Zend/Google を検索して 2 時間を無駄にしたくない場合。それを行うためのビューヘルパーがあります。

$this->view->serverUrl();
于 2011-09-29T19:31:36.427 に答える
5

ファイルでホスト名を使用する場合はlayout、これを印刷してHOST名前を取得してください。

echo $this->serverUrl().$this->baseUrl()
于 2012-02-17T08:43:51.043 に答える
4

これは私のbaseUrlヘルパーです:

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";
    }
}
于 2009-07-04T12:40:31.653 に答える
0
<?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;
    }
}
于 2010-03-19T18:50:13.027 に答える
0

これは私のために働いた:

$this->serverUrl() をエコーし​​ます。$this->url()

于 2013-01-05T03:18:38.840 に答える