2012-01-02 7 views
1
部分

とパン粉をしている使用して: 私私のlayout.phtmlは私が持っている:Zendのフレームワーク:私はいくつかのトラブルがカスタマイズされたブレッドクラムを作る

$container = new Zend_Navigation(); 
$this->navigation($container); 

$container->addPage(
array(
    'label'  => 'Dashboard', 
    'module'  => 'default', 
    'controller' => 'dashboard', 
    'action'  => 'index', 
    'pages'  => 
    array(
     array(
      'label'  => 'Create Order', 
      'module'  => 'default', 
      'controller' => 'createorder', 
      'action'  => 'index' 
     ), 
     array(
      'label'  => 'Query', 
      'module'  => 'default', 
      'controller' => 'query', 
      'action'  => 'index', 
      'pages' => array(
       array(
        'label'  => 'View Order', 
        'module'  => 'default', 
        'controller' => 'order', 
        'action'  => 'vieworder' 
       ) 
      ) 
     ), 
     array(
      'label'  => 'Administration', 
      'module'  => 'default', 
      'controller' => 'admin', 
      'action'  => 'index', 
      'pages'  => 
      array(
       array(
        'label'  => 'News and Announcements', 
        'module'  => 'default', 
        'controller' => 'admin', 
        'action' => 'addnews', 
        'pages' => array(
         array(
          'label'  => 'Edit News and Announcements', 
          'module'  => 'default', 
          'controller' => 'admin', 
          'action' => 'editnews' 
         ) 
        ) 
       ) 
      ) 
     ) 
    ) 
) 
); 

次の行は次のとおりです。

echo $this->navigation()->breadcrumbs()->setPartial(array('BreadCrumb.phtml','default')); 

ブレッドクラムを。 phtmlはうまくいきますが、BreadCrumb.phtmlにul-liメニューを作る方法がわかりません。私が実際に行っているナビゲーションをどのように取得するのですか? ご協力いただきありがとうございます。 Andrea

答えて

0

ビュースクリプト内では、zendナビゲーションコンテナは$this->containerで取得できます。あなたがそうするために、単純なforeachループ(例えばforeach($this->container as $page)

4

でそれを歩くことができるようにコンテナは、反復可能である、あなたのBreadCrumb.phtmlは次のようになります。

<?php 
if (null === $this->container) { 
    $this->container = $this->breadcrumbs()->getContainer(); 
} 

// find deepest active 
if (!$active = $this->breadcrumbs()->findActive($this->container)) { 
    return ''; 
} 

$active = $active['page']; 

// put the deepest active page last in breadcrumbs 
if ($this->breadcrumbs()->getLinkLast()) { 
    $html = ' <li>' . $this->breadcrumbs()->htmlify($active) . '</li>' . PHP_EOL; 
} else { 
    $html = $active->getLabel(); 
    if ($this->breadcrumbs()->getUseTranslator() && $t = $this->breadcrumbs()->getTranslator()) { 
     $html = $t->translate($html); 
    } 
    $html = ' <li>' . $this->escape($html) . '</li>' . PHP_EOL; 
} 

// walk back to root 
while (($parent = $active->getParent()) != null) { 
    if ($parent instanceof Zend_Navigation_Page) { 
     // prepend crumb to html 
     $html = ' <li>' . $this->breadcrumbs()->htmlify($parent) . '</li>' . PHP_EOL . $html; 
    } 

    if ($parent === $this->container) { 
     // at the root of the given container 
     break; 
    } 

    $active = $parent; 
} 
echo strlen($html) ? $this->breadcrumbs()->getIndent() . '<ul id="breadcrumbs">' . PHP_EOL 
       . $html . '</ul>' . PHP_EOL : ''; 
?> 

次に、あなたがこのような何かを取得します:

<ul id="breadcrumbs"> 
    <li><a href="/home">Home</a></li> 
    <li><a href="/articles">Articles</a></li> 
    <li><a href="/shop">Shop</a></li> 
    <li>Last link</li> 
</ul> 
+0

は、私はに何もない場合でも、それを動作させるために、少し私のコードを改善し、問題ありませ – cwhisperer

+0

...非常にすぐにテストを行い、あなたのフィードバックを与える、返信をお願いしますレンダリング。私に教えてください! – Liyali

+0

これはgoddですブレッドクラムの表示例、@リヤリ!どこで見つけたの?これは、公式のドキュメントの例に追加する必要があります - 現在のものは "貧しい"です:http://framework.zend.com/manual/2.3/en/modules/zend.navigation.view.helper.breadcrumbs.html#rendering -using-a-partial-view-script – webDEVILopers

関連する問題