2011-08-14 13 views
0

Drupal 6.20サイトのメインメニューを、同じドメインのサブディレクトリにあるWordPressテーマテンプレートファイルに(php経由で)表示することはできますか?WordPressでDrupal 6.20メニューを表示するには?

現時点では、Drupalサイトから静的なHTMLをコピーし、mydomain.com/blog/にあるサイトのWordPressテンプレートのheader.phpに追加してメニューを表示しています。もちろん、別のメニューアイテムがDrupalサイトに追加されたとき、またはDrupalメニューが何らかの方法で変更されたときには、動作しません。

これで、メニューをWPファイルにプルするDrupal PHP関数がありますか?

これは失敗します。PHPのDrupalページをHTMLのメニューとして解析する方法はありますか(これは醜いでしょう)、それをWPで表示しますか?

答えて

0

チャレンジの最初の部分は、できるだけ周囲のHTMLを少ししか持たない(または全く表示しない)メニューを出力することです。できるだけHTMLを解析する作業はほとんどありません。

2番目の部分は、Drupalの出力をWordPressサイトに表示することです。

$wpdb objectの新しいインスタンスを使用してWordPressのセカンダリデータベースとしてDrupalデータベースを追加し、クエリを書き込んでテーブルから適切なコンテンツを取得し、結果をフォーマットすることができます。それはうまくいくかもしれませんが、余計かもしれません。

Drupalでdrupal_json関数を使用してJSONを使用してプライマリリンクの出力をフォーマットし、その後WordpressでJSONフィードを使用することもできます。

私が想定しています:

  • あなたはプライマリリンクノードを作成し、出力に
  • がしたいテーマのキャッシュをクリアする必要がありますDrupalサイトにログインするための管理者のアクセス権を持っていますメニューで、Drupalサイトの90%以上が使用します。おそらくこれは当てはまりますが、サイトでカスタムメニューを使用する可能性があります。

    1. (あなたが何か、それを呼び出すことができ、それだけだDrupalのノードを作成します。もしそうなら、これはまだ可能である、あなただけの手順は以下のようになり

ステップ3でわずかに異なるコードを記述します。プレースホルダー)

  • ダミーページのノードID(つまり、node/234)を取得します。ノードIDから、Drupalサイトのテーマフォルダにワンオフページテンプレートを作成します。

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

    これはあなたのメニュー項目のJSONフィードを作成します。それはxxxxはあなたのノードID

  • page-node-xxxx.tpl.phpにこのコードを追加していると、page-node-xxxx.tpl.php呼ばれるべきです。

  • http://yoursite.com/admin/build/themesにアクセスしてDrupalサイトのテーマキャッシュをクリアし、http://yoursite.com/node/xxxxにアクセスして、未処理のJSONフィードを確認してください。

  • これでJSONフィードを消費し、表示するためにあなたのWordpressのテーマで$.getJSONまたは$.ajaxのようなjQueryのメソッドを使用することができ、または可能性HTMLとして出力する、あなたの配列をjson_decodeとカールを使用する必要があります。

  • のDrupalのdrupal_json機能の良いところは、それがすでに正しいJSONヘッダを送信し、今あなたがしなければならないすべてはあなたが必要なものを行いjQueryのか、PHPを記述するということです。

    あなたはもっとWordPressの専門家であり、Drupalの実践的な知識を持っていると思われますが、内部の仕組みに精通していない可能性があります。だから、もしそれがあまりにも基本的な(または十分に基本的ではない:)と思えば、ごめんなさい。

    +0

    ありがとう、私はDrupalをまったく使用しませんが、これは良い方法です。私はDrupalのオーナーがこれをやりたくないので、実際にこれをテストしなかったので、今は手動でメニューhtmlをWPに追加します。しかし、これはうまくいくように見えます。 – markratledge

    +0

    問題ありません。はい、それは動作します - 私はそれを確認しようとしました:) –

    +0

    ノードを使用して、任意のPHPを挿入するためのカスタムテンプレートを作成することができますので、これを行うには本当に複雑な方法です。 "Drupalの方法"はカスタムモジュールを作成することです - hook_menuを実装して特定のURIへのコールバックを作成し、提案したPHPをそのコールバックに挿入します。 – Simon

    0

    Drupalテーマエンジンは非常にモジュール化されています。Drupalに適切なPHP呼び出しを行い、レンダリングされたメニューだけを取得して、そのHTMLをWordPressページの一部として出力することができます。

    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:モジュールで設定したパスに匿名ユーザーがアクセスできるようにモジュールのアクセス許可を更新する必要があります。そうしないと、アクセス許可が拒否されます。

    関連する問題