2012-06-18 70 views
0

我正在編寫一個自動加載資產的視圖助手。我希望它自動加載所有不是子頁面的頁面的sub.css。我將如何去做這件事?Zend確定它是否是視圖助手中的首頁(或默認頁面)

這是我已經得到了迄今:

class Zend_View_Helper_CssHelper extends Zend_View_Helper_Abstract { 
    /** 
    * protected $this->isFront() 
    * 
    */ 
    public function isFront($request='') { 
    // Create $request from Zend Controller 
    if (!isset($request)) 
     $request = Zend_Controller_Front::getInstance()->getRequest(); 
    // If request not set 
    if (!empty($request)) { 
     // Hard code front page condition 
     // @TODO provide more sophisticated way to determine front page 
     if ($request->module == 'default' && $request->controller == 'page' && $request->action == 'index') return true; 
     else return false; 
    } 
    } 

    public function cssHelper($return=false) { 
    // Set folder prefix 
    $prefix = '/myprefixpath/assets/css/'; 
    $file_prefix = '/public/assets/css/'; 

    $request = Zend_Controller_Front::getInstance()->getRequest(); 
    // Css autoloading pattern {controller}/{action} 
    // create $part_uri workaround because of the shitty routing path 
    $part_uri = ASSETS_URL . '/css/' . $request->getControllerName() . '/' . $request->getActionName() . '.css'; 
    $file_uri = ROOT_DIR . $file_prefix . $request->getControllerName() . '/' . $request->getActionName() . '.css'; 

    //$file_uri = APPLICATION_PATH . $request->getControllerName() . '/' . $request->getActionName() . '.css'; 

    //Zend_Debug::Dump($file_uri); 
    //Zend_Debug::Dump(file_exists($file_uri)); 

    if ($return == true) { 
     return $part_uri; 
    } 
    /** 
    * Autoload my sub.css file if it's the front page 
    */ 
    var_dump($this->isFront()); 
    if ($this->isFront() == false) { 
     //var_dump(ASSETS_URL . '/sub.css'); 
     //$this->view->headLink()->appendStylesheet(ASSETS_URL . '/css/page/sub.css'); 
    } 

    // Find out if the file exists 
    if (file_exists($file_uri)) { 
     // Workaround due to my local alias 
     // @TODO need to test on dev server 
     // $this->view->headStyle()->appendStyle(file_get_contents($file_uri)); 
     $this->view->headLink()->appendStylesheet($part_uri); 
    // If there isn't load the error.css file 
    } else { 
     if (file_exists(ASSETS_URL . 'error.css')) 
     $this->view->headScript()->appendFile('/' . 'error.css'); 
    } 
    return $this->view->headLink(); 
    } 
} 

回答

2

Zend_Controller_Front有方法,getDefaultModule()getDefaultControllerName()getDefaultAction(),檢查分別默認的模塊,控制器名稱和行動。 您可以使用這些方法來確定索引頁是什麼。

用法示例

$defaultModule = Zend_Controller_Front::getInstance()->getDefaultModule();

$defaultControllerName = Zend_Controller_Front::getInstance()->getDefaultControllerName();

$defaultAction = Zend_Controller_Front::getInstance()->getDefaultAction();

+0

大。這似乎是我在找什麼。我如何將這些值從控制器傳遞給我的視圖助手?原諒我的無知,我在這個領域的複雜程度是有限的。 – chrisjlee

+0

從上面的代碼示例中,您嘗試創建視圖助手。我認爲你已經在把這些值加入到視圖中了,因爲'ViewHelpers'基本上是視圖的一部分 – burntblark

+0

好吧,我明白你現在要求的是什麼...請參閱上面給出的** Sample Usage ** – burntblark