【发布时间】:2012-03-02 18:49:58
【问题描述】:
为 Zend Framework 项目寻找更好的 Breadcrumb 解决方案。
目前我有一个类似的 navigation.xml
<?xml version="1.0" encoding="UTF-8"?>
<configdata>
<nav>
<home>
<label>Home</label>
<module>default</module>
<controller>index</controller>
<action>index</action>
<pages>
<countryurl>
<label>Spain</label>
<module>default</module>
<controller>country</controller>
<action>index</action>
<route>country_url</route>
<params>
<country>spain</country>
</params>
<pages>
<provinceurl>
<label>Madrid</label>
<module>default</module>
<controller>country</controller>
<action>province</action>
<route>province_url</route>
<params>
<country>spain</country>
<province>madrid</province>
</params>
<pages>
<cityurl>
<label>City</label>
<module>default</module>
<controller>country</controller>
<action>city</action>
<route>city_url</route>
<params>
<country>spain</country>
<province>madrid</province>
<city>madrid</city>
</params>
<pages>
<producturl>
<label>Product</label>
<module>default</module>
<controller>country</controller>
<action>product</action>
<route>product_url</route>
<params>
<country>spain</country>
<province>madrid</province>
<city>madrid</city>
<product>product</product>
</params>
</producturl>
</pages>
</cityurl>
</pages>
</provinceurl>
</pages>
</countryurl>
</pages>
</home>
</nav>
</configdata>
和类似的路线
$router->addRoute(
'product_url',
new Zend_Controller_Router_Route(':lang/:country/:province/:city/:product', array(
'controller' => 'country',
'action' => 'product'
))
);
$router->addRoute(
'city_url',
new Zend_Controller_Router_Route(':lang/:country/:province/:city', array(
'controller' => 'country',
'action' => 'city'
))
);
$router->addRoute(
'province_url',
new Zend_Controller_Router_Route(':lang/:country/:province', array(
'controller' => 'country',
'action' => 'province'
))
);
$router->addRoute(
'country_url',
new Zend_Controller_Router_Route(':lang/:country', array(
'controller' => 'country',
'action' => 'index'
))
);
我面临一些问题/正在寻找一些建议。在 Zend_Navigation 的帮助下创建面包屑
$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav');
$container = new Zend_Navigation($config);
$view->navigation($container);
1 ) http://example.com/en/spain/madrid/madrid/product 的请求显示面包屑,在
$this->navigation()
->breadcrumbs()
->setMinDepth(0)
->setLinkLast(true)
->setSeparator(" > ");
作为Home > Spain > Madrid > City > Product
但是指向西班牙、马德里、城市的链接都是http://example.com。应该是 http://example.com/en/spain , http://example.com/en/spain/madrid , http://example.com/en/spain/madrid/madrid 。
2) 当前请求http://example.com/en/spain时
面包屑将显示Home >> Spain
<label>Spain</label>
<module>default</module>
<controller>country</controller>
<action>index</action>
<route>country_url</route>
<params>
<country>spain</country>
</params>
但您可以看到 param country 因国家/地区而异。那么我们要为所有国家/地区添加标签吗?
Home >> Spain
Home >> India
我有省份、城市和产品,有什么建议我可以为它构建吗?
这也是一个多语言网站,那么我们如何才能对标签进行必要的更改呢?我想如果我们使用 Zend_Translate,它会做出必要的改变。
【问题讨论】:
-
首先,您似乎需要动态导航(在引导程序中初始化,获取您所有的国家、省、市;或者如果您使用导航仅创建面包屑,然后你可以在
routeShutdown()之后再做,所以你可以只添加你需要的国家/省/城市路径)。但这仍然不能解决您的核心问题:导航/面包屑似乎正在使用错误的路线组装 url。 -
谢谢 David Weinraub,目前我只在寻找 Breadcrumb,而且 Bootstrap.php 也有点不同。它根本不是一个类,这实际上是一个用 1.6 编写的遗留项目,我刚刚升级到 1.11 以使用 Breadcrumb 和一些东西。
标签: zend-framework breadcrumbs zend-navigation