管理パネルの<フィールド>に<iframe>を挿入する方法は?


13

MagentoのフロントエンドでGoogleマップを表示するカスタムモジュールを作成しています。これらのマップを取得するには、管理者が管理パネルでマップの場所のURLを入力して保存する必要があります。これはすべて正常に動作します。URLはデータベースに保存され、マップはストアのフロントエンドに表示されます。

しかし、今、管理パネルでもこの​​マップのプレビューを表示したいと思います。これにより、管理者は正しいURLが入力および保存されているかどうかを簡単に確認できます。

これPreview Mapを新しい<field>(URLを入力するフィールドのすぐ下)に表示し、マッププレビューを使用し<label>ます。以下のモックアップは、私が達成しようとしているものを示しています。

ここに画像の説明を入力してください

モジュールsystem.xmlファイルに次のコードを追加しました。

<fields>
    ....
    <preview translate="label comment">
        <label>Map Preview</label>
        <frontend_type>link</frontend_type>
        <frontend_model>mymodule/system_config_map</frontend_model>
        <comment>Preview of your map</comment>
        <sort_order>20</sort_order>
        <show_in_default>1</show_in_default>
        <show_in_website>1</show_in_website>
        <show_in_store>1</show_in_store>
    </preview>
</fields>

そして、私MyNamespace/MyModule/Block/System/Config/Map.phpの次のコードが含まれています:

class MyNamespace_MyModule_Block_System_Config_Map extends Mage_Adminhtml_Block_Abstract implements Varien_Data_Form_Element_Renderer_Interface
{
    public function render(Varien_Data_Form_Element_Abstract $element) {

    $url = Mage::helper('mymodule')->getMapUrl($store = null);

    return '<iframe style="border: 0;" src="'.$url.'" frameborder="0" width="100%" height="270"></iframe>';
    }
}

これにより、管理パネルにGoogleマップがレンダリングされ、適切にレンダリングされます<group>が、目的の場所にはロードされませ<field>ん。これは、現在の状況の実際のスクリーンショットです。

ここに画像の説明を入力してください

私は<frontend_type>考えられるすべてを試してみました....

だから私の質問は次のとおりです。どうすれば<iframe>管理パネルに挿入でき<field>ますか?私に何かを追加する必要があり<frontend_model>ますか?


私はあなたの使用<frontend_model>が実際に行く方法であると信じています。そのファイル内でできること$rendered .= '<iframe...
ティムホールマン

sort_orderあなたの'Map Details'分野は何ですか?それ20はあなたのために使用されるよりも少ない'Map Preview'ですか?
ティムホールマン

回答:


2

ではVarien_Data_Form_Element_Renderer_Interface、あなたが望むよう行全体を設計行う自由を持っています。メソッドでiframe のみを拡張Mage_Adminhtml_Block_Abstractして返すため、これが得られます。デフォルトのテーブルレイアウトを使用するには、代わりに拡張し、要素プロパティを変更してiframeを表示した後、デフォルトのメソッドを使用します。render()Mage_Adminhtml_Block_Widget_Form_Renderer_Fieldset_ElementtoHtml()

現在、指定したであるため、renderメソッドはVarien_Data_Form_Element_Linkasパラメーターを受け取りfrontend_typeます。ただし、実際に入力フィールドを表示したくないので、レンダリングされた出力を任意のHTMLに簡単に置き換えることができるフロントエンドタイプに変更する必要があります。

を使用することをお勧めしますlabel。その場合、renderメソッドは次のようになります。

public function render(Varien_Data_Form_Element_Abstract $element) {

    $url = Mage::helper('mymodule')->getMapUrl($store = null);

    $element->setData('value', '');
    $element->setData('after_element_html', '<iframe style="border: 0;" src="'.$url.'" frameborder="0" width="100%" height="270"></iframe>');

    return $this->toHtml();
}

ラベルの値は常にエスケープされるため、空のafter_element_htmlままにしておく必要があることに注意してください。valueafter_element_html


0

ここでCSSクラスを定義し、width = "100%"を削除します。

return '<iframe style="border: 0;" src="'.$url.'" frameborder="0"'
    . ' width="100%" height="270"></iframe>'
;

例:

return '<iframe class="adminmap" style="border: 0;" src="' . $url
    . '" frameborder="0" width="270" height="270"></iframe>'
;

CSS(幅とマージンを推測するだけ)

.adminmap { 
    width: 270px !important; 
    margin-left: 50px; 
}

text代わりにフロントエンドタイプに使用することもできlinkます。

ここでさまざまなタイプを見つけることができます。


ご提案ありがとうございます。私はそれらを試しましたが、残念ながら彼らは私を助けませんでした。地図のサイズを変更するだけで、位置は変更しません。どういうわけかが<iframe>のセットの上にまだレンダリングされていますが、2行目の<fields>内部<table>(sort_order 20)にレンダリングする必要があります。<iframe>が最初にレンダリングされた理由がわかりません(で定義した<label>and なし<comment>system.xml)。<table>その後、1行だけでレンダリングされます
...-ForMat

-1

そのために、デザインフォルダーのphtmlファイルにコーディングできます。フィールドとしてiframeを使用する必要はありません。

1。

foreach($ itemとしての$ collection){

                    $ i = $ i + 1;
                     $ item-> getTitle($ i);
                     $ item-> getUrl($ i);
                     $ temp = $ item-> getUrl();
                     $ ytarray = explode( "/"、$ temp);
                            $ ytendstring = end($ ytarray);
                            $ ytendarray = explode( "?v ="、$ ytendstring);
                            $ ytendstring = end($ ytendarray);
                            $ ytendarray = explode( "&"、$ ytendstring);
                            $ ytcode = $ ytendarray [0]; 
                    ?> ";?>


  1. これは私のブロックコードです
 $ fieldset-> addField( 'url'、 'text'、array(
          'label' => Mage :: helper( 'videoslider')-> __( 'ビデオURLを入力')、
          'class' => 'required-entry'、
          'style' => 'width:700px;'、
          '必須' => true、
          「名前」=>「URL」、
      ));

これを行うと、あなたはすべて設定されています!モジュールのビューフォルダーでこの変更を行い、コントローラーでsaveactionを変更して、管理側でも表示できるようにします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.