2009-03-11 9 views
11

में बेसपैथ को देखने से प्राप्त करें केस: आप ज़ेंड फ्रेमवर्क के साथ एक साइट विकसित कर रहे हैं और वेबपैप को उस फ़ोल्डर के सापेक्ष लिंक की आवश्यकता है I.e. विकास के तहत mysite.com/folder ऑनलाइन और localhost:8080ज़ेंड फ्रेमवर्क

निम्नलिखित तैनात स्थान की परवाह किए बिना नियंत्रकों में अच्छा काम करता है:

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

और एक viewscript, यानी अंदर निम्नलिखित। 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 कुछ है कि स्थानीय होस्ट

उत्तर

16

आप कर सकते हैं पर

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

देता है के साथ प्रतिस्थापित किया जाना चाहिए फ्रंट कंट्रोलर 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 खाली है उस मामले में) पथ अभी भी काम करेगा।

+0

मैं बेस यूआरएल सहायक से सहमत हूं, लेकिन मुझे लगता है कि इस छवि को विस्तारित करने के लिए एक और बेहतर तरीका –

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

इस तरह का उपयोग करें:

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

क्या आपने उपलब्ध कोड को फिर से लिखा है ?? – Alexar

14

मामले में किसी को भी सबसे अच्छा तरीका जानना चाहता है और 2 घंटे खोज Zend/गूगल बर्बाद करने के लिए नहीं चाहता है। ऐसा करने के लिए एक दृश्य सहायक है।

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

सुधार: $ यह-> serverUrl(); – mzalazar

5

यदि आप तो यह प्रिंट करने और HOST नाम अपने layout फ़ाइल में नाम की मेजबानी करना चाहते हैं: (

$ इस- गूंज> serverURL:

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