0

Magento を使用して、カスタム モジュールの json でデータベースから JavaScript に値を渡す必要があります。CSP のためにインライン JavaScript を避けています。http://www.pierrefay.com/magento-create-block-44に従いました

レイアウト ファイルのブロックの type 属性に問題があります。page/html を使用すると、javascript テンプレート ファイルが表示されますが、xss リスクであると思われる te​​xt/javascript の代わりに text/html ヘッダーが送信されます。

オークション/履歴などのカスタム タイプを試すと、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>

app/design/frontend/Mymodule/default/layout/history.xml type="auction/history" を "page/html" に変更すると表示されますが、text/javascript ではなく text/html ヘッダーが表示されます

<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 !!’ ;
     }
}
4

1 に答える 1

1

ブロックとコントローラーを間違えていると思います。

ブロックはページの一部にすぎません。コントローラーは、ブラウザーでページをレンダリングする方法を指示します。

Block に関する質問について: 関連する Block メソッドを使用せずに新しいテンプレートを作成する必要がある場合は、 を使用する必要がありますcore/template。このブロックは一番上のブロックです (html/pageコア/テンプレートを継承しますが、望ましくないロジックが追加されています)

カスタム ロジック (ブロック メソッド) が必要な場合は、継承する php ブロック クラスを作成します。Mage_Core_Block_Template

ヘッダーの質問について: JSON のみを出力する場合は、コントローラーとメソッドを使用して JSON の出力を強制する必要があります。

$this->getResponse()->setHeader('Content-type', 'application/x-json');
于 2012-11-03T17:40:26.487 に答える