2011-04-08 2 views
6

xml ifconfig 문 (기본값은 부울)에 대한 값을 지정하여 어딘가에서 본 것이 틀림 없습니다. 어쨌든 관리자에서 모듈을 사용하지 않으면 실제로 작동하지 않습니다 (모듈 출력 만 사용 중지됨).Magento - xml 레이아웃. ifconfig에 값을 지정 하시겠습니까?

<action method="setTemplate" ifconfig="advanced/modules_disable_output/Myname_Mymodule"> 
    <template>mytemplate.phtml</template> 
</action> 

이 어떻게 당신이 반전 할 수 템플릿 있도록 : 그러나 예를 들어, 모듈 사용할 수 경우에만 템플릿을 설정할 수 있도록, 레이아웃 파일에 ifconfig를 추가 할 수는 다음과 모듈이 이 활성화 된 경우에만 설정됩니다.? 이것은 내가 작업했습니다 something (자기 링크)과 잘 맞는

<action method="setTemplate" ifconfig="advanced/modules_disable_output/Myname_Mymodule" value="0"> 
    <template>mytemplate.phtml</template> 
</action> 

답변

21

:처럼 뭔가.

ifconfig의 동작을 변경하려면 클래스 재 작성없이 원하는 것을 정확히 수행 할 수 없습니다. 다음은 ifconfig 기능을 구현하는 코드입니다.

File: app/code/core/Mage/Core/Model/Layout.php 
protected function _generateAction($node, $parent) 
{ 
    if (isset($node['ifconfig']) && ($configPath = (string)$node['ifconfig'])) { 
     if (!Mage::getStoreConfigFlag($configPath)) { 
      return $this; 
     } 
    } 

ifconfig가 있고 구성 값이 true를 반환하면 작업 메서드가 호출되지 않습니다. _generateAction을 다시 작성하고 자신의 조건부를 구현할 수 있지만 재 작성을 유지 관리하는 데 따르는 표준 부담은 줄어 듭니다.

더 나은 방법은 작업 매개 변수에 도우미 메서드를 사용하는 것입니다. 이

<action method="setTemplate"> 
    <template helper="mymodule/myhelper/switchTemplateIf"/> 
</action> 

같은 뭔가 하나가 템플릿 또는 변경을 유지하는 것이 switchTemplateIf에서 사용자 정의 로직을 구현

Mage::helper('mymodule/myhelper')->switchTemplateIf(); 

에 대한 호출의 결과에 setTemplate를 호출하고 당신은 갈 수있을 것입니다.

+0

-> 상단 또는 - >을 클릭하십시오. 그래서 최상위가 선택되었는지 확인한 다음 내 제품을 카탈로그 페이지의 product_list 아래 product_list 맨 아래에 표시합니다. Thanx .. –

+0

맞춤형 로직이 true 또는 false를 반환하는 ifConfig 대신 헬퍼 메소드를 호출 할 수 있습니까? –

+0

안녕하세요 Alan,이 방법을 사용하여 우리 자신의 모듈의 시스템 변수를 사용하여 특정 Magento 페이지의 템플릿 레이아웃을 설정할 수 있습니까? 내가 새로운 질문을 열었습니다. 당신이 그것을 여기 chekc 수 있다면 다행 것입니다 http://stackoverflow.com/questions/11593340/magento-changes-layout-dynamically-via-system-variable – Kamal

8

모듈 system.xml 이외의 것을 사용하여 설정을 사용하여 별도의 설정을 만들 수 있습니다.

<config> 
    <sections> 
     <advanced> 
      <groups> 
       <YOURMODULE> 
        <fields> 
         <enable> 
          <label>YOUR MODULE</label> 
          <frontend_type>select</frontend_type> 
          <source_model>adminhtml/system_config_source_enabledisable</source_model> 
          <show_in_default>1</show_in_default> 
          <show_in_website>1</show_in_website> 
          <show_in_store>1</show_in_store> 
         </enable> 
        </fields> 
       </YOURMODULE> 
      </groups> 
     </advanced> 
    </sections> 
</config> 

그런 다음 레이아웃 파일에 새 설정을 사용

난 그냥 두 가지 값 필드의 값을 확인 layout.xml에서 확인 할
<action method="setTemplate" ifconfig="advanced/YOURMODULE/enable"> 
    <template>mytemplate.phtml</template> 
</action> 
+0

그래, 내가 어떻게 작동하는지 현재 어떻게하고 있지만, 기본 모듈 disabler를 사용하여 모든 레이아웃에 이것을 추가하지 않아도 좋을 것입니다. –

+0

해당 필드의 값을 확인하는 방법 .. => ifvalue = "...."... 필드의 값을 확인한 다음 product_list의 위 또는 아래에 내 눈금을 표시하려고합니다. 감사합니다. ... –

+1

@ime, 현재 레이아웃 시스템에는'ifvalue'가 없으며 0이 아닌 값을 검사하는'ifconfig' 만 있습니다.네/아니오 설정 쌍으로 '위의 제품 목록'과 '제품 목록 아래'로 사용할 수 있습니다. (사용자가 원하지 않을 수도있는 기능을 사용자가 사용하거나 사용하지 못하게 할 수 있습니다.) 유일한 다른 방법은 직접 PHP를 작성하는 것입니다. – clockworkgeek

관련 문제