是否可以在位于同一域的子目录中的WordPress主题模板文件中显示(通过php)Drupal 6.20站点的主菜单?
现在,我通过从Drupal站点复制静态html并将其添加到位于mydomain.com/blog/中的站点的WordPress模板中的header.php来显示菜单。但是,当另一个菜单项添加到Drupal站点,或者以任何方式更改Drupal菜单时,这当然不会起作用。
那么是否有一个Drupal php函数将菜单拉入WP文件?
如果失败了,有没有办法让php解析Drupal页面的菜单html(是的,这会很难看)并在WP中显示它?
答案 0 :(得分:0)
挑战的第一部分是仅输出菜单,尽可能少地(或不包含)周围的HTML,因此您在解析HTML时尽可能少做一些工作。
第二部分是从Drupal获取输出并实际显示在你的WordPress网站上。
您可以使用$wpdb object的新实例将Drupal数据库添加为WordPress中的辅助数据库,编写查询以从表中获取正确的内容,并格式化结果。这可行,但可能有点矫枉过正。
另一个可行的选项可能是使用JSON来格式化主链接的输出,使用Drupal中的drupal_json函数,然后在Wordpress中使用JSON提要。
我假设:
步骤如下:
page-node-xxxx.tpl.php
,其中xxxx是您的节点ID 将此代码添加到page-node-xxxx.tpl.php
:
<?php
drupal_json(menu_navigation_links(variable_get('menu_primary_links_source', 'primary-links')));
?>
这将创建菜单项的JSON Feed。
访问http://yoursite.com/admin/build/themes清除Drupal网站的主题缓存,然后访问http://yoursite.com/node/xxxx查看原始JSON Feed。
您现在应该能够在Wordpress主题中使用jQuery方法(如$.getJSON或$.ajax)来使用和显示JSON提要,或者可能使用json_decode和curl输出数组作为HTML。
关于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权限被拒绝。