2012-11-03 105 views
0

使用Magento,我需要將數據庫中的值傳遞給json中的自定義模塊中的javascript。由於CSP,我避免了內嵌JavaScript。我跟着http://www.pierrefay.com/magento-create-block-44用於Javascript的Magento自定義塊

我遇到了佈局文件中塊的type屬性問題。當我使用page/html時,顯示我的JavaScript模板文件,但發送文本/ html標題而不是文本/ javascript,我認爲這是xss風險。

當我嘗試一個自定義類型,如拍賣/歷史記錄,JavaScript佈局不加載。相反,它顯示了標準店鋪設計的空白頁面。下面是我的文件

應用程序/代碼/本地/ Mymodule中/拍賣的/ etc/config.xml中

在這裏,我有塊定製產品視圖頁面除了新的塊我試圖使用的JavaScript。

<config> 
... 
    <frontend> 
    <routers> 
     <routeurfrontend> 
      <use>standard</use> 
      <args> 
       <module>Mymodule_Auction</module> 
       <frontName>auction</frontName> 
      </args> 
     </routeurfrontend> 
    </routers> 
    <layout> 
     <updates> 
      <auction> 
       <file>history.xml</file> 
      </auction> 
     </updates> 
    </layout> 
    </frontend> 

    <global> 
    <blocks> 
     <Mymodule_Auction> 
      <class>Mymodule_Auction_Block_Catalog_Product_View</class> 
     </Mymodule_Auction> 
     <catalog> 
      <rewrite> 
       <product_view>Mymodule_Auction_Block_Catalog_Product_View</product_view> 
      </rewrite> 
     </catalog> 
     <auction> 
       <class>Mymodule_Auction_Block</class> 
     </auction> 
    </blocks> 

    ... (code for models and helpers) ... 

    </global> 
</config> 

應用程序/設計/前端/ Mymodule中/默認/佈局/ history.xml如果我更改類型= 「拍賣/史」 到 「頁/ HTML」,它顯示但text/html的頭部,而不是文本/ JavaScript的

<layout version="0.1.0"> 
    <default> 
      <reference name="content"></reference> 
     </default> 
    <auction_index_history> 
     <reference name="content"> 
      <block type="auction/history" template="auction/history.phtml" /> 
     </reference> 
    </auction_index_history> 
</layout> 

應用程序/代碼/本地/ Mymodule中/拍賣/座/ History.php

<?php 
class Mymodule_Auction_Block_History extends Mage_Core_Block_Template 
{ 
    public function methodblock() 
    { 
     return ‘informations about my block !!’ ; 
    } 
} 

回答

1

我想你誤塊和控制器。

塊只是你的頁面的一部分。 控制器告訴你的頁面應該如何在瀏覽器中呈現。

關於您在Block上的問題:當您需要創建一個沒有任何相關Block方法的新模板時,應該使用core/template。此塊是最上面的一個(html/page繼承了核心/模板,但你可能不希望添加邏輯)

如果你需要一些自定義邏輯(塊方法),創建一個繼承一個PHP代碼塊類Mage_Core_Block_Template

而且關於你的頭問題:如果你只輸出JSON,你應該使用控制器和方法強制JSON的輸出:

$this->getResponse()->setHeader('Content-type', 'application/x-json'); 
+0

工作。 $ this-> getResponse() - > setHeader('Content-type','text/javascript'),因爲我有JavaScript代碼以及json。這些包含在與