관리자 패널 <field>에 <iframe>을 삽입하는 방법은 무엇입니까?


13

Magento의 프론트 엔드에 Google지도 를 표시하는 맞춤 모듈을 만들고 있습니다. 지도를 가져 오려면 관리자가 관리자 패널에서지도 위치의 URL을 입력하고 저장해야합니다. 이 모든 것이 잘 작동합니다. URL이 데이터베이스에 저장되고 맵이 상점의 프론트 엔드에 표시됩니다.

그러나 이제 관리자 패널에서도이 맵의 미리보기를 표시하고 싶습니다. 이를 통해 관리자는 올바른 URL을 입력하고 저장했는지 쉽게 확인할 수 있습니다.

URL을 입력 해야하는 필드 바로 아래 Preview Map에 이것을 새로 표시 <field>하고 맵 미리보기를 사용하고 싶습니다 <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...
Tim Hallman

sort_order당신의 'Map Details'분야 는 무엇입니까 ? 보다 작습니까20사용하는'Map Preview' 습니까?
Tim Hallman

답변:


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_Link이므로 as 매개 변수 를받습니다 frontend_type. 그러나 실제로 입력 필드를 표시하지 않으려면 렌더링 된 출력을 임의의 HTML로보다 쉽게 ​​대체 할 수있는 프런트 엔드 유형으로 변경해야합니다.

을 사용하는 것이 좋습니다 label. 렌더링 방법은 다음과 같습니다.

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_htmlvalue레이블의 값은 항상 이스케이프되고 항상 임의의 HTML을 사용할 수 있으므로 하고 비워 두어야 합니다.after_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>여전히 세트 위에 렌더링 <fields>되지만 <table>두 번째 행 (sort_order 20)에서 렌더링해야합니다 . 나는 왜 <iframe>( <label>그리고 <comment>정의 된 것 없이) 먼저 렌더링 된 system.xml다음에 <table>하나의 행으로 렌더링 되는 이유를 이해하지 못합니다 ...
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', 배열 (
          'label'=> 마법사 :: helper ( 'videoslider')-> __ ( '동영상 URL 입력'),
          'class'=> '필수 항목',
          'style'=> 'width : 700px;',
          '필수'=> true,
          'name'=> 'url',
      ));

이 작업을 수행하면 모든 준비가 완료됩니다! 모듈의보기 폴더 에서이 변경을 수행하고 컨트롤러에서 저장 작업을 변경하여 관리자 측에도 표시 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.