문제

zend_navigation (프레임 워크에 달콤한 추가)을 사용하여 메뉴를 만들고 그 후 페이지에서 렌더링해야합니다. 먼저 컨트롤러 어딘가에 컨테이너를 설정했습니다.

// $pages is the array containing all page information
$nav = new Zend_Navigation($pages);
$this->view->navigation($nav);

그런 다음 레이아웃에서 다음과 같이 렌더링됩니다.

echo $this->navigation()->menu();

완벽하게 작동합니다. 지금 : 메뉴가 조금 다르게 렌더링되기를 원합니다. 내가 빌딩하는 페이지는 jQuery를 사용합니다 어항-플루인 MAC와 같은 도크 메뉴를 구축합니다. 그러나이 플러그인에는 특정 마크 업이 필요합니다 ...

실제로, 그것은 목록을 취합니다 <a> 둘 다 포함하는 요소 <img> (아이콘의 경우) 및 a <span> (툴팁의 경우). 표준 메뉴보기 헬퍼는 지정되지 않은 목록 (논리적으로) 내부의 모든 것을 'label' 링크 텍스트로 매개 변수.

콘텐츠가 전달 된 것 같습니다 'label' 렌더링하기 전에 매개 변수가 탈출되므로 HTML을 삽입하면 좋은 일이 아닙니다. 또한, 어항은 보통에 포함 된 품목을 가져 가지 않는 것 같습니다. <li> 모든 것을 포장 한 상태에서 태그 <ul></ul>, 그러나 단지 한 레벨 목록입니다 <a> 집단.

나는 도크에 대한 커스텀 뷰 도우미를 쓰는 것에 대해 생각하고 있었는데, 이는 <img> 그리고 <span>, 그러나 내비게이션 클래스에 사용자 정의 뷰 도우미를 첨부하는 데 어려움을 겪고 있습니다. 다른 모든 커스텀 클래스 (모델 등)가 자동 로더에 의해 잘 관리 되더라도 어디에 배치 해야하는지, 어떤 방식 으로든 알 수 없습니다. 이것에 대한 아이디어가 있습니까?

다시 한 번,이 뷰 도우미가 작동하도록 할 수 있더라도 여전히 HTML이 지정되지 않은 목록이 남아 있습니다. 커스텀 뷰 도우미를 사용하여 그 중 하나를 잃을 수 있다는 것을 알고 있지만 항상 메인을 포함하는 팬이었습니다. 의미를 위해 목록 내부의 내비게이션 메뉴.

누군가가 나를 조금 도울 수 있다면, 나는 그것을 크게 감사합니다. 어항이 함께 일할 의도가 없다면 <ul>이 경우 Zend_navigation을 모두 잃을 좋은 이유가 있습니까?

도움이 되었습니까?

해결책

커스텀 렌더러를 만드는 측면에서 아직 그 길을 보지 못했습니다. 그래도 내가 한 일은 다음과 같습니다.

먼저, 기본 메뉴 () 호출을 렌더링하는 대신 렌더링 할 부분을 작성하십시오.

// menu.phtml is partial, cms is module
$partial = array('menu.phtml', 'cms');
$this->navigation()->menu()->setPartial($partial);
echo $this->navigation()->menu()->render();

그런 다음 (문서에서) "사용자 정의"렌더를 만들 수 있습니다.

// -- inside menu.phtml
foreach ($this->container as $page) 
{
    // this just prints a "<a>" or "<span>" tag
    // depending on whether the page has a uri
    echo $this->menu()->htmlify($page), PHP_EOL;
}

나는이 스크립트와 함께 원래 가지고있는 것을 만들었습니다 (한 수준의 하위 메뉴가있는 메뉴).

// -- another menu.phtml
<ul class="navigation">

<?php

$html = array();

foreach ($this->container as $page) 
{
    $html[] = "<li>";
    $html[] = $this->menu()->htmlify($page) . PHP_EOL;

    if (!empty($page->pages))
    {
        $html[] = "<ul>";
        foreach ($page->pages as $subpage) 
        {
            $html[] = "<li>";
            if ($href = $subpage->getHref()) $html[] = "<a href=\"{$href}\">";
            else $html[] = "<span>";
            $html[] = "<img src=\"/ui/cms/img/icons/edit.png\" alt=\"\"/>";
            $html[] = $subpage->getLabel();
            if ($href) $html[] = "</a>";
            else $html[] = "</span>";            
            $html[] = "</li>";
        }
        $html[] = "</ul>";
    }

    $html[] = "</li>";
}

echo join(PHP_EOL, $html);

?>
</ul>

부분에서 마크 업을 변경하고 이미지/아이콘을 추가 할 수 있습니다.

다른 팁

죄송합니다. 이전 게시물의 서식 문제는

사용자 정의 도우미를 추가하려면 부트 스트랩에서 다음을 수행하십시오.

protected function _initNavigation()
{
    $this->bootstrap('view');           // make sure we have a view
    $view = $this->getResource('view');     // get the view resource
    $config = new Zend_Config_Xml(APPLICATION_ROOT . '/config/navigation.xml','nav');
    $container = new Zend_Navigation($config);
    $view->navigation($container);

    // Tell Zend were it can find your custom helpers and what
    // the prefix is going to be.

   $view->addHelperPath(
          APPLICATION_ROOT . '/library/MyApp/View/Helper/Navigation',
          'MyApp_View_Helper_'
          );

}

다음으로 사용자 정의 뷰 도우미를 만들어 'AddhelperPath'경로에 넣으십시오. 원하는 일에 따라 최소한 자신의 htmlify 기능을 구현해야합니다. Zend/View/Help/Navigation/Menu.php를 예로 들어보십시오.

class MyApp_View_Helper_MyMenu extends Zend_View_Helper_Navigation_Menu
{
    public function myMenu(Zend_Navigation_Container $container = null)
    {
        if (null !== $container) {
            $this->setContainer($container);
        }
        return $this;
    }

    protected function htmlify(Zend_Navigation_Page $page ) 
    {
        ...
    }
}

다음으로 PHTML 스크립트에서 :

   <?php echo $this->navigation()->myMenu()->setMaxDepth(0); ?>

아니면 그냥

   <?php echo $this->navigation()->myMenu(); ?>

이제 생성 된 HTML에 고유 한 사용자 정의 속성을 추가하려면 내비게이션 INI 또는 XML 파일에 추가 할 수 있습니다. 예를 들어:

<home>
  <label>Home</label>
  <uri>/</uri>
  <img>
      <src>/images/MyIcon.gif</src>
  <img>
</home>

사용자 정의 XML 태그 <img> 내비게이션 페이지의 속성으로 저장되며 다음과 같이 가져올 수 있습니다.

foreach ($iterator as $page) {

    ...

    $properties = new Zend_Config($page->GetCustomProperties());
    $myPicture = $properties->img->src;

    ...
}

도움이 되었기를 바랍니다. 베드로

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top