【问题标题】:How to display a Drupal 6.20 menu in WordPress?如何在 WordPress 中显示 Drupal 6.20 菜单?
【发布时间】:2011-08-14 18:41:03
【问题描述】:

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

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

那么有没有一个 Drupal php 函数可以将菜单拉入 WP 文件?

如果做不到这一点,php 有没有办法为菜单的 html 解析 Drupal 页面(是的,这会很难看)并在 WP 中显示它?

【问题讨论】:

    标签: php wordpress drupal-6


    【解决方案1】:

    挑战的第一部分是只输出菜单,周围的 HTML 尽可能少(或没有),因此您在解析 HTML 时要做的工作尽可能少。

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

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

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

    我假设:

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

    步骤如下:

    1. 创建一个 Drupal 节点(你可以叫它任何名字,它只是一个占位符)
    2. 获取虚拟页面的节点 ID(即 node/234)。根据节点 ID,在 Drupal 站点的主题文件夹中创建一次性页面模板。它应该被称为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 提要。

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

    5. 1234563 /p>

    Drupal 的 drupal_json 函数的一个好处是它已经发送了正确的 JSON 标头,所以现在您所要做的就是编写满足您需要的 jQuery 或 PHP。

    我假设您更像是 Wordpress 专家,并且对 Drupal 有一定的应用知识,但可能不太熟悉其内部工作原理。所以,对不起,如果它看起来太基本(或不够基本:)。

    【讨论】:

    • 谢谢,我根本不使用 Drupal,但这是一个很好的方法。我实际上并没有对此进行测试,因为 Drupal 所有者最终不想这样做,所以我现在将手动将菜单 html 添加到 WP。但这看起来可以正常工作。
    • 使用节点创建自定义模板来插入任意 PHP 是一种非常复杂的方法。 “Drupal 方式”是创建一个自定义模块 - 实现 hook_menu 以创建对某个 URI 的回调,然后将您建议的 PHP 插入到该回调中。
    【解决方案2】:

    Drupal 主题引擎是非常模块化的 - 您可以对 Drupal 进行适当的 PHP 调用以仅渲染菜单,然后将该 HTML 作为 WordPress 页面的一部分发出。

    【讨论】:

      【解决方案3】:

      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 Permission Denied。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多