Zend_View_Helper_Navigation_Menu
의 출력을 변경해야합니다. 수정해야 할 두 가지 기능을 발견했으며 필요한 변경을 수행하는 방법을 알고 있습니다. 내가 모르는 것은 탐색 객체가 Zend 객체 대신 내 뷰 헬퍼를 사용하도록 만드는 방법입니다.Zend Navigation Menu View Helper는 어떻게 확장합니까?
코드 내 클래스 확장을 나타내는 니펫을 :
편집
// file /library/My/View/Helper/Navigation/Menu.php
class My_View_Helper_Navigation_Menu extends Zend_View_Helper_Navigation_Menu
{
protected function _renderDeepestMenu(Zend_Navigation_Container $container,
$ulClass,
$indent,
$minDepth,
$maxDepth)
{
// modified code here
}
protected function _renderMenu(Zend_Navigation_Container $container,
$ulClass,
$indent,
$minDepth,
$maxDepth,
$onlyActive)
{
// modified code here
}
}
내가 <li>
요소의 클래스를 변경하고 EOL
들여 쓰기을 제거 할
명확히 할 수 있습니다. 메뉴보기 스크립트로 그렇게 할 수있는 옵션이 없으므로 확장해야합니다. 내 레이아웃에 메뉴를 렌더링
$navTable = new Default_Model_Site_DbTable_Navigation();
$view = $this->getResource('view');
$view->navigation(new Zend_Navigation($navTable->getNavigation()));
: 내 부트 스트랩에서 탐색 객체를 초기화
echo $this->navigation()->menu();
솔루션
나는 일을 이름을 변경하여 작업을 얻었다 다음과 같이,하지만 나는 왜 내가 분명하지 않다. _Menu
클래스와 menu()
함수를 오버로드하거나 덮어 쓸 수 없습니다.
- 변경
My_View_Helper_Navigation_MyMenu
- 에 클래스 이름은 레이아웃의 클래스 (
return parent::menu($container);
) - 전화
echo $this->navigation()->myMenu();
에myMenu
기능을 추가
클래스 와이어 프레임 :
// file /library/My/View/Helper/Navigation/MyMenu.php
class My_View_Helper_Navigation_MyMenu extends Zend_View_Helper_Navigation_Menu
{
public function myMenu(Zend_Navigation_Container $container = null)
{
return parent::menu($container);
}
protected function _renderDeepestMenu(Zend_Navigation_Container $container,
$ulClass,
$indent,
$minDepth,
$maxDepth)
{
// modified code here
}
protected function _renderMenu(Zend_Navigation_Container $container,
$ulClass,
$indent,
$minDepth,
$maxDepth,
$onlyActive)
{
// modified code here
}
}
Zend Framework의 다른 상황에서와 같이'menu()'함수와'..._ Menu' 클래스 이름을 다시 사용할 수없는 이유를 모르겠습니다. 다른 이름을 사용해야합니다. – Sonny
해결책으로 솔루션을 받아 들일 예정이지만 뷰 도우미를 확장 할 때 왜 다른 이름을 사용해야하는지 설명하면 걱정하지 않아도됩니다. – Sonny
잘 모르겠습니다 만, Zend 라이브러리에서 먼저 도우미를 찾는 Zend_View_Helper_Navigation -> __ call()/findHelper() 메소드라고 생각합니다. 따라서 메뉴 메서드를 다시 사용하려면 parent :: menu (...)를 호출하면됩니다. –