如何在WordPress中显示Drupal 6.20菜单?

时间:2011-08-14 18:41:03

标签: php wordpress drupal-6

是否可以在位于同一域的子目录中的WordPress主题模板文件中显示(通过php)Drupal 6.20站点的主菜单?

现在,我通过从Drupal站点复制静态html并将其添加到位于mydomain.com/blog/中的站点的WordPress模板中的header.php来显示菜单。但是,当另一个菜单项添加到Drupal站点,或者以任何方式更改Drupal菜单时,这当然不会起作用。

那么是否有一个Drupal php函数将菜单拉入WP文件?

如果失败了,有没有办法让php解析Drupal页面的菜单html(是的,这会很难看)并在WP中显示它?

3 个答案:

答案 0 :(得分:0)

挑战的第一部分是仅输出菜单,尽可能少地(或不包含)周围的HTML,因此您在解析HTML时尽可能少做一些工作。

第二部分是从Drupal获取输出并实际显示在你的WordPress网站上。

您可以使用$wpdb object的新实例将Drupal数据库添加为WordPress中的辅助数据库,编写查询以从表中获取正确的内容,并格式化结果。这可行,但可能有点矫枉过正。

另一个可行的选项可能是使用JSON来格式化主链接的输出,使用Drupal中的drupal_json函数,然后在Wordpress中使用JSON提要。

我假设:

  • 您具有登录Drupal站点的管理员权限,您需要创建节点并清除主题缓存
  • 您想要输出主链接菜单,其中90%以上的Drupal网站都使用。这可能是真的,但您的网站可能使用自定义菜单。如果是这样,这仍然是可能的,您只需在步骤3中编写略有不同的代码。

步骤如下:

  1. 创建一个Drupal节点(你可以调用它,它只是一个占位符)
  2. 获取虚拟页面的节点ID(即节点/ 234)。从节点ID,在Drupal站点的themes文件夹中创建一次性页面模板。它应该被称为page-node-xxxx.tpl.php,其中xxxx是您的节点ID
  3. 将此代码添加到page-node-xxxx.tpl.php

    <?php drupal_json(menu_navigation_links(variable_get('menu_primary_links_source', 'primary-links'))); ?>

    这将创建菜单项的JSON Feed。

  4. 访问http://yoursite.com/admin/build/themes清除Drupal网站的主题缓存,然后访问http://yoursite.com/node/xxxx查看原始JSON Feed。

  5. 您现在应该能够在Wordpress主题中使用jQuery方法(如$.getJSON$.ajax)来使用和显示JSON提要,或者可能使用json_decode和curl输出数组作为HTML。

  6. 关于Drupal的drupal_json函数的一个好处是它已经发送了正确的JSON头文件,所以现在你所要做的就是编写完成所需内容的jQuery或PHP。

    我认为你更像是一个Wordpress专家,并且具有Drupal的工作知识,但可能对其内部工作并不熟悉。所以,抱歉,如果它看起来太基本(或不够基本:)。

答案 1 :(得分:0)

Drupal主题引擎非常模块化 - 您可以在Drupal中进行适当的PHP调用以获取呈现的菜单,然后将该HTML作为WordPress页面的一部分发出。

答案 2 :(得分:0)

g_thom的答案非常好,如果你想创建一个非常简单的模块来输出主导航,你可以这样写:

<?php

function getmenus_help($path, $arg) {
  // implementing the help hook ... well, not doing anything with it just now actually
}

function getmenus_all() {
  $page_content = '';

  $page_content = json_encode(menu_navigation_links(variable_get('menu_primary_links_source', 'primary-links')));
  // fill $page_content with the menu html

  print $page_content;

  return NULL;
}

function getmenus_menu() {
  $items = array();

  $items['getmenus'] = array(
    'title' => 'Get Menus',
    'page callback' => 'getmenus_all',
    'access arguments' => array('access getmenus'),
    'type' => MENU_CALLBACK,
  );

  return $items;
}

// permissions
function getmenus_perm() {
  return array('access getmenus');
}

在PHP代码中,您可以编写如下内容:

function primary_links() {
  $primary_links = file_get_contents(SITE_URL . '/getmenus');
  $primary_links = json_decode($primary_links);
  $primary_links = (array)$primary_links;

  $i = 0;
  $last = count($primary_links);
  $output = '';

  foreach ($primary_links as $pm) {
    $href = $pm->href;
    if (strpos($pm->href, 'http://') === FALSE) {
      if ($pm->href == '<front>') {
        $href = SITE_URL . '/';
      } else {
        $href = SITE_URL . '/' . $pm->href;
      }
    }

    $output .= '
      <li>
          <a href="'. $href .'" title="'.$pm->title.'">'.$pm->title.'</a></li>';
    $i++;
  }

  return $output;
}

我希望这有帮助!

PS:确保更新模块的权限,以允许匿名用户访问您在模块中设置的路径 - 否则您将获得403权限被拒绝。