Làm cách nào để chèn <iframe> trong Bảng quản trị <trường>?


13

Tôi đang tạo một mô-đun tùy chỉnh hiển thị Google Maps ở mặt trước của Magento. Để có được những bản đồ đó, Quản trị viên sẽ phải nhập và lưu URL của vị trí bản đồ trong Bảng quản trị. Tất cả điều này hoạt động tốt. URL đang được lưu trong cơ sở dữ liệu và các bản đồ được hiển thị ở lối vào của cửa hàng.

Nhưng bây giờ tôi cũng muốn hiển thị bản xem trước của bản đồ này trong Bảng quản trị. Điều này sẽ cho phép Quản trị viên dễ dàng kiểm tra xem URL chính xác được nhập và lưu hay chưa.

Tôi muốn hiển thị cái này Preview Maptrong một cái mới <field>(ngay bên dưới trường cần nhập URL) và sử dụng Bản xem trước bản đồ <label>. Mockup dưới đây hiển thị những gì tôi đang cố gắng để đạt được.

nhập mô tả hình ảnh ở đây

Để system.xmltập tin mô-đun của tôi, tôi đã thêm mã sau đây:

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

Và của tôi MyNamespace/MyModule/Block/System/Config/Map.phpchứa mã sau đây:

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

Điều này không hiển thị Google Map trong Bảng quản trị và nó cũng hiển thị đúng <group>nhưng nó không được tải theo cách <field>tôi muốn. Đây là một ảnh chụp màn hình thực tế của tình hình hiện tại.

nhập mô tả hình ảnh ở đây

Tôi đã thử mọi cách <frontend_type>tôi có thể nghĩ đến ....

Vì vậy, câu hỏi của tôi là: Làm thế nào tôi có thể chèn một <iframe>Bảng quản trị <field>? Tôi có nên thêm một cái gì đó cho tôi <frontend_model>?


Tôi tin rằng sử dụng của bạn <frontend_model>thực sự là con đường để đi. Trong tập tin đó, bạn sẽ có thể$rendered .= '<iframe...
Tim Hallman

Là gì sort_ordercủa bạn 'Map Details'lĩnh vực? Là nó ít hơn so với 20sử dụng cho của bạn 'Map Preview'?
Tim Hallman

Câu trả lời:


2

Với Varien_Data_Form_Element_Renderer_Interfacebạn có sự tự do làm thiết kế toàn bộ hàng như bạn muốn. Vì bạn mở rộng Mage_Adminhtml_Block_Abstractchỉ trả lại iframe trong render()phương thức của nó , đây là những gì bạn nhận được. Để sử dụng bố trí bảng mặc định, Mage_Adminhtml_Block_Widget_Form_Renderer_Fieldset_Elementthay vào đó hãy mở rộng và sử dụng toHtml()phương thức mặc định của nó sau khi sửa đổi thuộc tính thành phần để hiển thị iframe.

Hiện tại renderphương thức sẽ nhận được một Varien_Data_Form_Element_Linktham số dưới dạng vì đó là frontend_type, mà bạn đã chỉ định. Nhưng vì bạn không thực sự muốn hiển thị trường đầu vào, bạn nên thay đổi trường đó thành loại lối vào nơi bạn có thể dễ dàng thay thế đầu ra được kết xuất thành HTML tùy ý.

Tôi đề nghị sử dụng label, sau đó phương thức kết xuất trông như thế này:

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

Lưu ý rằng bạn phải sử dụng after_element_htmlvà để valuetrống, vì giá trị của nhãn luôn được thoát, trong khi bạn luôn có thể sử dụng HTML tùy ý trongafter_element_html


0

Xác định một lớp CSS ở đây và loại bỏ width = "100%".

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

thí dụ:

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

CSS (chỉ cần đoán về chiều rộng và lề)

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

Bạn cũng có thể muốn sử dụng textcho loại frontend thay vì link.

Bạn có thể tìm thấy các loại khác nhau ở đây .


Cảm ơn lời đề nghị của bạn. Tôi đã thử chúng, nhưng tiếc là chúng không giúp tôi. Tất cả những gì họ làm là thay đổi kích thước của bản đồ, nhưng không phải là vị trí. Bằng cách nào đó, <iframe>nó vẫn được hiển thị phía trên tập hợp <fields>nhưng tôi cần nó được hiển thị bên <table>trong hàng thứ hai (sort_order 20). Tôi chỉ không hiểu tại sao cái <iframe>được hiển thị đầu tiên (không có <label><comment>được xác định trong đó system.xml) và sau đó <table>được hiển thị sau đó, chỉ với một hàng ...
ForMat

-1

Vâng, để bạn có thể mã hóa tệp phtml trong thư mục thiết kế, bạn không cần lấy iframe làm trường lấy textfield ở đây những gì tôi đã làm cho thanh trượt video

1.

foreach (bộ sưu tập $ dưới dạng $ item) {

                    $ i = $ i + 1;
                     $ item-> getTitle ($ i);
                     $ mục-> getUrl ($ i);
                     $ temp = $ item-> getUrl ();
                     $ ytarray = explode ("/", $ temp);
                            $ ytendopes = end ($ ytarray);
                            $ ytWikiray = explode ("? v =", $ ytend chuỗi);
                            $ ytendopes = end ($ ytWikiray);
                            $ ytWikiray = explode ("&", $ ytend chuỗi);
                            $ ytcode = $ ytWikiray [0]; 
                    ?> ";?>


  1. đây là mã khối của tôi
 $ fieldset-> addField ('url', 'text', mảng (
          'nhãn' => Mage :: helper ('videoslider') -> __ ('Nhập URL video'),
          'class' => 'bắt buộc nhập',
          'phong cách' => 'chiều rộng: 700px;',
          'bắt buộc' => đúng,
          'tên' => 'url',
      ));

làm điều này và bạn đã hoàn tất thực hiện thay đổi này trong thư mục xem trong mô-đun của bạn và cũng thực hiện các thay đổi về sự cứu nguy trong bộ điều khiển để bạn cũng có thể hiển thị nó trong phía quản trị viên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.