jQueryの魚眼レンズで動作するようになってZend_Navigationメニュー
-
12-09-2019 - |
質問
私は、私のメニューを構築するために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>
両方を含む<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;
}
私はこのスクリプトで(サブメニューの1つのレベルのメニュー)私はもともと持っていたもの作り終わっます:
// -- 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 /ビュー/ヘルプ/ナビゲーション/ 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(); ?>
さて、あなたはあなたのナビゲーションiniファイルまたはXMLファイルに追加することができ、生成されるHTMLに独自のカスタムプロパティを追加したい場合。たとえばます:
<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;
...
}
この情報がお役に立てば幸いです。 ピーター