그것은 안정적으로 레이아웃에서 위시리스트 링크 블록을 제거 할 공개적으로 이용 가능한 방법이 나타납니다. 그래서 여기
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>
환호성. 해키하지만, Magento에게는 새로운 것이 아니기 때문에 지금 당장해야 할 것 같습니다. 왜 그런 생각이 들었습니까? –
사실, 그냥이 링크를보고 기쁨, 아직 시도했다. 더 이상 아이디어가 없습니까? –
새로운 기능으로 인해 부주의 한 버그가 많이 생기는 것은 아닙니다. 이것은 나를 위해 기본 설치에서 작동하므로 local.xml이로드되고 있는지 그리고 모든 것이 정확한 핸들로 둘러싸여 있는지 확인합니다. 확인한 후에는 기본 템플릿 클래스의 setTemplate 메소드에 디버그 코드를 추가하여 액션 메소드가 실제로 호출되는지 확인하십시오. 이 새로운 레이아웃을 재정의하는 다른 레이아웃 업데이트가 있습니까? –