私は、コントローラの特定のアクションに基づいてユーザに表示されるナビゲーションメニューを持っています。ここに私がやっていることがあります。Zend Frameworkのアクションベースのナビゲーション
//in each controller-action where i want "action navigation menu"
public function indexAction()
{
$this->_helper->navigation()->renderActionNavigation();
}
public function newAction()
{
$this->_helper->navigation()->renderActionNavigation();
}
ナビゲーションメニューが表示されます。ここに私のnavigation.xmlファイルがあります。
<?xml version="1.0" encoding="UTF-8"?>
<configdata>
<item-index>
<new-item>
<label>New Item</label>
<route>admin-item-new</route>
</new-item>
<delete-item>
<label>Delete Item</label>
<uri>#</uri>
</delete-item>
</item-index>
<item-new>
<publish-unpublish-item>
<label>Save & Close</label>
<uri>#</uri>
</publish-unpublish-item>
<delete-item>
<label>Save & New</label>
<uri>#</uri>
</delete-item>
</item-new>
</configdata>
各ナビゲーションメニューの親要素は、上記navigation.xmlファイル内の命名規則を表し、例えばここに
`<item-index>` represents item{controller}index{action}
`<item-new>` represents item{controller}new{action}
//and so on
はアクションヘルパーです。 Navigation.php私は
/application
/layouts
admin.phtml
default.phtml
/modules
/admin
/controllers
/helpers
/Navigation.php
IndexController.php
/views
/helpers
/scripts
/partials
_action-navigation.pthml
sidebar.phtml
/index
/item
私が経験しています奇妙な行動があるが、次のように私のディレクトリ構造がある
class Zend_Controller_Action_Helper_Navigation extends Zend_Controller_Action_Helper_Abstract
{
private $_view = null;
public function direct()
{
$this->_view = Zend_Layout::getMvcInstance()->getView();
$this->_view->placeholder('action-navigation');
return $this;
}
public function renderActionNavigation()
{
$config = new Zend_Config_Xml(
APPLICATION_PATH.'/configs/navigation.xml', strtolower(
$this->getRequest()->getControllerName().'-'.
$this->getRequest()->getActionName()
)
);
$container = new Zend_Navigation($config);
$this->_view->partial('partials/_action-navigation.phtml', array('container' => $container));
}
}
し、最終的に_action-navigation.phtml
<?php $this->placeholder('action-navigation')->captureStart(); ?>
<div class="statsRow">
<div class="wrapper" >
<?php foreach($this->container as $page): ?>
<a href="<?php echo $page->getHref(); ?>" class="<?php echo $page->class; ?>" id="<?php echo $page->id; ?>"></a>
<?php endforeach; ?>
</div>
</div>
<?php $this->placeholder('action-navigation')->captureEnd(); ?>
を使用しています。私のBootstrap.phpファイルに空の_initView()メソッドがあります。このメソッドが存在する場合、私のアプリケーションは正常に動作します。このメソッドは空であることに注意してください。しかし、それを削除すると、それは私に次のエラーを与える。
Application error
Exception information:
Message: script 'partials/_action-navigation.phtml' not found in path (./views/scripts/)
Zend Frameworkではこの動作を理解できません。ブートストラップで_initViewメソッドに関連するアクションナビゲーションコードはどうですか?何が起こっているのか、これに対する修正や、コードの改善のための提案?
更新: 問題は、あなたが2番目の引数としてadmin
モジュールの名前を追加するのを忘れコード
$this->_view->partial('partials/_action-navigation.phtml', array('container' => $container));
あなたのコードを '_initView()'に入れるのは興味深いことです。私の推測では、あなたのブートストラップメソッドで '$ return'を返さないということです。 – Liyali
あなたに会えてうれしい:)、問題は私のアプリがバックエンドとフロントエンドと1つのブートストラップファイルで構成されていることです。だから私はそれをすべてのコードを追加しないでよりきれいに保つために努めています。私は共有されるだけのリソースを維持しようとしています。バックエンドとフロントエンドの両方で –
'_action-navigation.pthml'はあなたのモジュール間で共有されていますか、' '/ admin''モジュールでのみ使用されていますか? – Liyali