Yönetici Paneli'ne <field> <iframe> nasıl eklenir?


13

Magento'nun ön ucunda Google Haritalar'ı gösteren özel bir modül oluşturuyorum . Bu haritaları almak için Yöneticinin, harita konumunun URL'sini Yönetici Paneli'ne girmesi ve kaydetmesi gerekir. Tüm bunlar iyi çalışıyor. URL veritabanına kaydedilir ve haritalar mağazanın ön ucunda görüntülenir.

Ancak şimdi Yönetici Paneli'nde bu haritanın bir önizlemesini görüntülemek istiyorum. Bu, Yöneticinin doğru URL'nin girilip kaydedilmediğini kolayca kontrol etmesini sağlar.

Bunu Preview Mapyeni bir <field>URL'de (URL'nin girilmesi gereken alanın hemen altında) görüntülemek ve Harita Önizlemesi kullanmak istiyorum <label>. Aşağıdaki model, elde etmeye çalıştığım şeyi gösteriyor.

resim açıklamasını buraya girin

Modüller system.xmldosyama aşağıdaki kodu ekledim:

<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>

Ve benim MyNamespace/MyModule/Block/System/Config/Map.phpaşağıdaki kodu içerir:

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>';
    }
}

Bu, Google Haritasını Yönetici Panelinde işler ve aynı zamanda uygun hale getirir <group>ancak <field>istediğim yere yüklenmez . Bu, mevcut durumun gerçek bir ekran görüntüsüdür.

resim açıklamasını buraya girin

Aklıma gelen her <frontend_type>şeyi denedim ....

Yani sorum şu: <iframe>Yönetici Paneline nasıl ekleyebilirim <field>? Bir şey eklemem gerekir <frontend_model>mi?


Bence senin kullanman <frontend_model>gerçekten de bir yol. Bu dosya içinde yapabilmeniz gerekir$rendered .= '<iframe...
Tim Hallman

sort_orderAlanınız nedir 'Map Details'? 20Sizin için kullanılandan daha az mı 'Map Preview'?
Tim Hallman

Yanıtlar:


2

Varien_Data_Form_Element_Renderer_InterfaceÖzgürlüğünüz ile istediğiniz sırayı istediğiniz gibi tasarlayın. Yönteminde yalnızca iframe'i genişletip Mage_Adminhtml_Block_Abstractgeri verdiğiniz için , elde ettiğiniz budur. Varsayılan tablo düzenini kullanmak için bunun yerine uzatın ve iframe'i görüntülemek için element özelliğini değiştirdikten sonra varsayılan yöntemini kullanın .render()Mage_Adminhtml_Block_Widget_Form_Renderer_Fieldset_ElementtoHtml()

Şu anda renderyöntem bir Varien_Data_Form_Element_Linkas parametresi alacaktır, çünkü frontend_typebelirttiğiniz budur. Ancak, bir giriş alanını gerçekte göstermek istemediğiniz için, bunu, oluşturulan çıktıyı rastgele HTML olarak daha kolay bir şekilde değiştirebileceğiniz bir ön uç türüyle değiştirmeniz gerekir.

Ben kullanmanızı öneririz label, sonra render yöntemi şöyle görünür:

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

Bir etiketin değeri her zaman kaçtığından, her zaman rastgele HTML kullanabileceğiniz için kullanmanız after_element_htmlve valueboş bırakmanız gerektiğini unutmayın .after_element_html


0

Burada bir CSS sınıfı tanımlayın ve width = "100%" öğesini kaldırın.

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

misal:

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

CSS (sadece genişlik ve kenar boşluklarını tahmin etme)

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

Bunun textyerine kullanıcı arabirimi türü için de kullanmak isteyebilirsiniz link.

Farklı türleri burada bulabilirsiniz .


Önerileriniz için teşekkürler. Onları denedim ama maalesef bana yardım etmediler. Tek yaptıkları haritanın boyutunu değiştirmek, ancak konumunu değiştirmek değil. Her nasılsa <iframe>hala kümesinin üzerinde işlenir <fields>ama <table>ikinci satırda (sort_order 20) içinde işlenmesi gerekiyor . Sadece neden anlamıyorum <iframe>(olmadan ilk oluşturulur <label>ve <comment>hangi ı tanımlanan system.xml) ve daha sonra <table>... tek bir satırla, sonradan oluşturulduğu
FORMAT

-1

Peki bunun için tasarım alanında phtml dosyasında kodlayabilirsiniz bir alan metin alanı almak gibi iframe almanıza gerek yok İşte video kaydırıcı için ne yaptım

1.

foreach ($ collection $ item) {

                    $ i = $ i + 1;
                     $ İtem-> getTitle (i $);
                     $ İtem-> getUrl (i $);
                     $ temp = $ item-> getUrl ();
                     $ ytarray = patlayabilir ("/", $ temp);
                            $ Ytendstring = ucu ($ ytarray);
                            $ ytendarray = patlayabilir ("? v =", $ ytendstring);
                            $ Ytendstring = ucu ($ ytendarray);
                            $ ytendarray = patlayabilir ("&", $ ytendstring);
                            $ Ytcode = $ ytendarray [0]; 
                    ?> ";?>


  1. bu benim blok kodum
 $ fieldset-> addField ('url', 'metin', dizi (
          'label' => Mage :: yardımcı ('videoslider') -> __ ('Video URL'sini Girin'),
          'class' => 'zorunlu giriş',
          'style' => 'width: 700px;',
          'zorunlu' => doğru,
          'name' => 'url',
      ));

bunu yapın ve hepiniz hazırsınız! modülünüzdeki görünüm klasöründe bu değişiklikleri yapın ve ayrıca yönetici tarafında da görüntüleyebilmeniz için denetleyicideki tasarrufta değişiklikler yapın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.