2010-12-12 5 views
1

는 이전 젠토에서 위시리스트 링크를 사용하여 추가 된 (wishlist.xml에서) 다음Magento - 1.4.2의 위시리스트 링크를 제거 하시겠습니까?

<action method="addWishlistLink"></action> 

그리고 당신은 그것을 무시하고 (당신의 local.xml에서) 다음을 사용하여 제거 할 수 있습니다 :

<action method="addLinkBlock"><blockName>wishlist_link</blockName></action> 

누구나 알고 t :

<remove name="wishlist_link"/> 

그러나, 최신 젠토, 1.4.2에서, 그들은 위시리스트 링크는 다음에 추가하는 방법을 변경했습니다 o 위시리스트 링크를 제거하고 추가 된 방법을 변경했습니다.

답변

9

그것은 안정적으로 레이아웃에서 위시리스트 링크 블록을 제거 할 공개적으로 이용 가능한 방법이 나타납니다. 그래서 여기

Fatal error: Call to a member function getPosition() on a non-object in /Users/alanstorm/Sites/magento1point4.2.dev/app/code/core/Mage/Page/Block/Template/Links.php on line 112 

을 던져지는 당신은 치명적인 오류의 결과를 설명하는 방법으로 제거하여,

addLinkBlock 통과 됐어요 블록의 존재를 가정 (당신은 해결의 끝으로 건너 뛸 수 있습니다) 해당 오류

app/code/core/Mage/Page/Block/Template/Links.php 
public function addLinkBlock($blockName) 
{ 
    $block = $this->getLayout()->getBlock($blockName); 
    $this->_links[$this->_getNewPosition((int)$block->getPosition())] = $block;   
    return $this; 
} 

이 방법은 그것의 전달되는 어떤 이름으로 블록을 꺼내 할 수있을 것 가정, 그래서 우리는 이전 버전에서 수 우리가 단지 wishlist_link 블록을 제거 할 수 없습니다를 유발하는 핵심 코드.

링크를 제거하는 유일한 메커니즘이이 문자열 비교를 사용하여 수행됩니다 같은 블록 클래스 그러나

app/code/core/Mage/Page/Block/Template/Links.php 
public function removeLinkByUrl($url) 
{ 
    foreach ($this->_links as $k => $v) { 
     if ($v->getUrl() == $url) { 
      unset($this->_links[$k]); 
     } 
    } 
    return $this; 
} 

에 다음과 같은 방법으로 표시하고 더 신뢰할 수있는 방법으로 (내가 아는)이 없다 레이아웃 파일에서 URL 객체를 생성하고, 문자열로 캐스팅 한 다음 메서드에 전달합니다 (최종 문자열 URL의 내용을 변경할 수있는 수많은 구성 설정이 필요하기 때문에 필요합니다). 이 방법은 우리의 필요에 도움이되지 않습니다.

그래서 우리는 무엇이든 수 있습니다 빈 또는 존재하지 않는 템플릿을 사용하여 기존 wishlist_link 블록을 수정합니까? 이렇게하면 블록은 여전히 ​​렌더링되지만 빈 문자열로 렌더링됩니다. 결과적으로 위에서 언급 한 치명적인 오류는 피할 수 있지만 선택한 페이지에서 링크를 제거 할 수 있습니다.

다음은 default handle.

<!-- file: local.xml --> 
<layout> 
    <default> 
     <reference name="wishlist_link"> 
      <action method="setTemplate"><template>blank-link.phtml</template></action>   
     </reference>    
    </default> 
</layout> 
+0

환호성. 해키하지만, Magento에게는 새로운 것이 아니기 때문에 지금 당장해야 할 것 같습니다. 왜 그런 생각이 들었습니까? –

+0

사실, 그냥이 링크를보고 기쁨, 아직 시도했다. 더 이상 아이디어가 없습니까? –

+0

새로운 기능으로 인해 부주의 한 버그가 많이 생기는 것은 아닙니다. 이것은 나를 위해 기본 설치에서 작동하므로 local.xml이로드되고 있는지 그리고 모든 것이 정확한 핸들로 둘러싸여 있는지 확인합니다. 확인한 후에는 기본 템플릿 클래스의 setTemplate 메소드에 디버그 코드를 추가하여 액션 메소드가 실제로 호출되는지 확인하십시오. 이 새로운 레이아웃을 재정의하는 다른 레이아웃 업데이트가 있습니까? –

1

당신은 관리자 패널 시스템> 구성> 위시리스트에서 위시리스트 링크> 활성화를 제거 할 수 = "아니오"

+0

위시리스트 기능을 사용하지 않으려면 특정 페이지에서 링크를 삭제하십시오. –

3

In your local.xml file,

<?xml version="1.0"?> 
<layout version="0.1.0"> 
    <default> 
    <reference name="root"> 
     <reference name="top.links"> 
     <!-- Remove wishlist link in magento 1.4.x and newer --> 
     <remove name="wishlist_link"/> 
     </reference> 
    </reference> 
    </default> 
</layout> 
1

Add the following to your local.xml file.

<reference name="top.links"> 
    <remove name="wishlist_link"/> 
</reference> 

This works! I have removed Wishlink from Toplinks and wanted to add it back into another block but that doesn't seem possible when you remove it in this way. Sadly.

0

I know I'm years late here, but for all of those people who are still looking for answers to this.

I have a way to work around this issue that is only a bit of extra work but it's not hacky and it gives you FULL control of your top.links block.

Simply unset the top.links 블록을 사용하여 모든 페이지 에서 링크를 제거하고 (더 이상 wishlist_link 블록) 비어, 그것을 다시 만들 것입니다 다음과 당신이 할 일은 당신의 내부에 원하는 링크 중 추가있다 그것! (이 모든 작업을 theme/layout/local.xml 파일에서 수행하십시오.)

<layout version="0.1.0"> 
<default> 
    <!-- HEADER --> 
    <reference name="header"> 

     <!-- Unsetting the already existing top links block --> 
     <action method="unsetChild"> 
      <name>topLinks</name> 
     </action> 

     <!-- Re-creating a new top links block --> 
     <block type="page/template_links" name="top.links" as="topLinks"> 
      <!-- EXAMPLE: Account Dashboard Link --> 
      <action method="addLink" translate="label title" module="catalog"> 
       <label>Account Dashboard</label> 
       <url helper="customer/getAccountUrl"/> 
       <title>Account Dashboard</title> 
      </action> 
      <!-- You can add any other links that you want --> 
     </block> 

    </reference> 
</default> 
</layout> 

또한 Sign In 같은 몇 가지 링크에 대한 것을 기억하고 Log Out 당신은 당신이 젠토의 customer.xml 파일을 볼 수있는이 가이드로 대신 <default> 내부의 처리하는 적절한 <customer_logged_out><customer_logged_in> 내부에 top.links 블록을 참조해야합니다.

중요 : 모든 모듈은 top.links 블록에 링크를 추가 프로젝트에 포함되어있을 경우 local.xml가 마지막으로 처리되기 때문에, 그 연결이 방법을 사용하는 경우, 그래서 그냥 마음에 계속, 표시되지 않습니다 :)

저는 3 년 이상의 경력을 가진 Magento 프런트 엔드 개발자로 인증되었으며, 우리가 가장 친한 친구가 된 시점까지 레이아웃 XML 두통을 극복했습니다.

관련 문제