2009-03-11 26 views
11

Trường hợp: bạn đang phát triển một trang web có khung công tác Zend và cần liên kết tương đối đến thư mục webapp được triển khai trong .e. mysite.com/folder trực tuyến và localhost:8080 đang được phát triển.Nhận basepath từ khung nhìn trong khung zend

Sau đây làm việc thoải mái tại bộ điều khiển bất kể vị trí triển khai:

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

Và sau bên trong một viewscript, tức là. index.phtml:

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

Nhưng làm thế nào để tôi nhận được bản gốc chính xác khi liên kết tới hình ảnh hoặc bảng định kiểu? (Trong một tập tin layout.phtml, ví dụ):

<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 nên được thay thế bằng một cái gì đó cho

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

trên localhost

Trả lời

16

Bạn có thể lấy url cơ sở từ Front Controller Zend_Controller_Front::getInstance()->getBaseUrl();. Tôi quấn trong một cái nhìn helper

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

} 

Vì vậy, trong đánh dấu html bạn có cái gì đó như <img src="<?php echo $this->baseUrl();?>/images/logo.png"/> Các dấu gạch chéo được tước ra trong helper để khi ứng dụng không chạy trong một thư mục phụ (baseUrl là trống trong trường hợp đó) đường dẫn sẽ vẫn hoạt động.

+0

tôi đồng ý với trình trợ giúp URL cơ sở, nhưng tôi nghĩ rằng có một hình ảnh khác mở rộng hình ảnh này là cách tiếp cận tốt hơn nhiều –

4

Đây là baseUrl tôi helper:

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"; 
    } 
} 
+0

sử dụng nó như sau:

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; 
    } 
} 
+0

bạn đã viết lại mã có sẵn chưa ?? – Alexar

14

Trong trường hợp bất cứ ai muốn biết cách tốt nhất và không muốn lãng phí 2 giờ tìm kiếm Zend/Google. Có một người trợ giúp xem để làm điều đó.

$this->view->serverUrl(); 
+1

Hiệu chỉnh: $ this-> serverUrl(); – mzalazar

5

Nếu bạn muốn lưu trữ tên trong tập tin layout của bạn để in này và nhận được tên của bạn HOST:

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

này đã làm việc cho tôi:

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

Các vấn đề liên quan