Php 在Zend web应用程序中显示Drupal 6菜单

Php 在Zend web应用程序中显示Drupal 6菜单,php,postgresql,zend-framework,menu,drupal-6,Php,Postgresql,Zend Framework,Menu,Drupal 6,我在Drupal6旁边运行了一个Zend web应用程序。基本结构如下: www.domain.com/cms/ www.domain.com/zf/ require_once 'path/to/drupal/folder/installation/includes/bootstrap.inc'; drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); // you now have access to all Drupal functions CMS是Drupa

我在Drupal6旁边运行了一个Zend web应用程序。基本结构如下:

www.domain.com/cms/
www.domain.com/zf/
require_once 'path/to/drupal/folder/installation/includes/bootstrap.inc'; 
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); // you now have access to all Drupal functions
CMS是Drupal内容,ZF是Zend框架内容

问题是。我希望将Drupal的主要/次要链接放置到ZF菜单中,以便在CMS和Zend之间导航时页面相对无缝。目前,Zend中正在进行一个Ajax调用,以从Drupal获取主要链接。这是低效的,并显示在报告中,因此我的任务是修复它


从概念上讲,做这件事的最佳方式是什么?我应该在我的ZF应用程序中包含Drupal的文件,还是其他什么?我对Drupal知之甚少,因此我不确定是否可以通过数据库调用来获取链接,或者是否应该调用某个函数。

Id'说最好的方法是以某种格式导出Drupal菜单,然后在ZF应用程序中解析它。为了保持同步,只需编写一个小脚本,每天导出并运行它,或者根据您的需要运行它(最好是在您的站点流量最低的情况下,如果性能是优先考虑的话)

以下是与Drupal菜单相关的函数列表:

这将让您开始:

  $menus = menu_get_menus();
  foreach ($menus as $menu_machine_name => $menu_human_name) {
    $menu_items = menu_tree_all_data($menu_machine_name);
  }
但是您必须引导Drupal,才能访问Drupal的所有功能。所以你可以这样做:

www.domain.com/cms/
www.domain.com/zf/
require_once 'path/to/drupal/folder/installation/includes/bootstrap.inc'; 
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); // you now have access to all Drupal functions
当然,您可以直接调用数据库,但首先您必须了解Drupal是如何获得菜单结构的,然后去掉所需的SQL查询


祝你好运

您能将这两行引导代码放在Zend application.ini中吗?实际上,我们最终使用了当前的配置,即通过和ajax请求调用菜单,除了在Zend中缓存菜单。我们将缓存设置为大约15分钟。这将ajax请求的数量从每个页面请求减少到每个用户每15分钟只有一个页面请求。显著减少对服务器的点击。谢谢你的意见。我喜欢你的建议。哦,还有,Drupal的菜单系统很混乱。有大约40个数据库点击菜单;诚然,他们一次只能得到一行或几行,但是从您自己的DB调用重建菜单是过度和乏味的。我不会走这条路。我花了一个下午的时间在它上面,感觉比刚开始的时候更困惑。我不确定Zend是如何工作的,但是引导程序应该在使用Drupal函数之前完成。是的,它可能会导致大量的数据库点击。这就是为什么我说您应该在批处理过程中执行此操作,每天一次,并将其导出到XML或其他格式。然后,为了获得额外的性能,解析XML并将菜单结构缓存在Zend中。抱歉,我无法给出任何关于如何与Zend集成的提示,我还没有使用过它。