0

アセットを自動ロードするビュー ヘルパーを作成しています。サブページではないすべてのページの sub.css を自動ロードしたいと思います。これについてどうすればいいですか?

これは私がこれまでに得たものです:

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();
  }
}
4

1 に答える 1

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();

于 2012-06-18T12:12:47.487 に答える