2011-02-12 51 views
0

我有幾個視圖助手在需要時添加JavaScript文件(例如,以便只有表單使用CKEditor等)。我的目錄結構(簡化爲僅包括相關文件)是這樣的:從控制器或窗體內解析視圖幫助程序位置

application 
    --forms 
     --Project 
      AddIssue.php 
    --modules 
     --default 
      --views 
       --helpers 
        JQueryUI.php 
        Wysiwyg.php 
     --project 
      --controllers 
       ProjectController.php 
      --views 
       --scripts 
        --project 
         version.phtml 
         issueadd.phtml 

我想要做什麼:

  1. 包括CKEditor的視圖project/project/issueadd
  2. 包括jQuery UI的在project/project/version

當我在視圖腳本中時,調用<?php $this->jQueryUI(); ?>就像魅力一樣工作,即使助手處於默認狀態t模塊的助手目錄。但是,控制器和表單也是如此。

在控制器ProjectController.phpversionAction(),我試圖撥打:

$this->view->jQueryUI(); 

和效果是一個例外:

消息:插件通過名稱 'jQueryUI的' 在未找到註冊表;使用的路徑:Project_View_Helper_:C:/ XAMPP/htdocs中/ bugraid /應用/模塊/項目/視圖\助手/ Zend_View_Helper_:Zend的/視圖/助手/

類似地,在AddIssue.php形式,我嘗試這樣做:

$this->getView()->wysiwyg(); 

並有再次異常:

消息:插件的名字「所見即所得」在註冊表中未找到;使用的路徑:Project_View_Helper_:C:/ XAMPP/htdocs中/ bugraid /應用/模塊/項目/視圖\助手/ Zend_View_Helper_:Zend公司/查看/助手/

顯然,這兩個會,如果我的看法傭工的工作它們被調用的模塊/控制器的輔助目錄,但由於它們在很多模塊中使用,所以我想讓它們在默認模塊的視圖助手目錄中。

所以,我的問題是:

  1. 我如何訪問這些視圖助手從控制器和表單中?
  2. 有沒有更簡單的方法來解決這個問題(除了簡單地包括佈局中的所有JavaScript文件)?就像創建一個插件或動作助手一樣? (我之前沒有做過這些事情,所以我真的不知道,我只是開始與ZF一起冒險)。
+0

關於問題1.您應該能夠以通常的方式訪問幫助者。然而,由於它不起作用,我認爲你引導視圖資源的方式以及你如何執行協助者的音樂會註冊或者如何向其添加幫助者路徑存在問題。我粘貼一個在Bootsrap.php中添加助手路徑的示例:http://pastebin.com/5z6yzjnx。這個關閉過程通常適用於ZF的模塊化設置。 – Marcin 2011-02-12 17:12:58

+0

您正在使用JQueryUI.php。是ZF盒子裏的東西還是自己做飯? – akond 2011-02-12 18:30:09

+0

@akond:這是我的烹飪。它只是在頁面的頭部添加`jquery.js`,`jqueryui.js`和`ui.css`,沒什麼特別。我只在一個頁面上使用它,在那裏我需要一些可拖動的東西,並且認爲在所有頁面上都沒有意義。 @Marcin:你的洞察力與往常一樣無價。你介意把它發佈爲答案嗎? – mingos 2011-02-13 01:22:49

回答

3

關於Q1(基於評論)。你應該能夠以通常的方式訪問幫助者。然而,由於它不起作用,我認爲你引導視圖資源的方式和/或你如何執行helpers的具體註冊或者你如何添加helper路徑有問題。我粘貼一個在Bootsrap中添加助手路徑的例子。php:

<?php 
#file: APPLICATION_PATH/Bootstrapt.php 

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { 

    public function _initViewHelperPath() { 

     $this->bootstrap('view'); 
     $view = $this->getResource('view'); 

      $view->addHelperPath(
       APPLICATION_PATH . '/modules/default/views/helpers', 
       'My_View_Helper' // <- this should be your helper class prefix. 
     ); 
    } 

} 
?> 

這個關閉過程通常應用於ZF的模塊化設置。

關於Q2: 您可以使用headScript視圖助手來管理您在版式的head標記中加載的腳本。使用這個幫手,你可以從你的行爲中做到這一點。

例如。如果在layout.php中有:

<head> 
    <?php echo $this->headScript(); ?> 
</head> 

然後,例如, indexAction你可以附加一些JS文件如下:

$this->view->headScript()->appendFile($this->view->baseUrl('/js/someJS.js')); 
0

我寧願擺脫你的JQueryUI.php並使用ZendX。類似的東西:

在控制器:

ZendX_JQuery::enableView ($this->view); 
    $this->view->jQuery()->enable()->setRenderMode (ZendX_JQuery::RENDER_ALL); 

在佈局:

<?php echo $this->jQuery() ?> 
3

雖然我討厭回答我的問題,還有一個更解決方案,我想出的基礎上,多了什麼馬辛在他的回答中提出了建議。它也可以在application.ini中完成:

resources.view[] = 
resources.view.helperPath.My_View_Helper = APPLICATION_PATH "/modules/default/views/helpers" 

需要注意的是行需要按此順序出現。如果它被顛倒,任何在resources.view[] =之前的內容都將被忽略。

相關問題