节点加载用户的配置文件(外部数据库+视图)。当我访问时,所有这些都有效:node / 123 / profile / id / 3。现在我已经实现了hook_menu()以加载任何配置文件页面并拥有更好的URL。
当我因为某种原因自己加载它时,page.tpl.php中的$ left突然变空,并且似乎没有更多的变量被加载。我已经尝试了许多不同的函数来渲染和创建正确的$ output,但意识到node_show()似乎是选择的函数。
现在测试显示,由于某些原因,忽略了hook_nodeapi()
次呼叫
我的代码:
/**
* Implementation of hook_menu
*/
function modulename_menu() {
$items = array();
$items['my/nice/url/profile'] = array(
'description' => 'This page holds a view that shows profiles based on the %',
'page callback' => 'website_profile_load',
'access callback' => TRUE,
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Menu path wildcard callback
*/
function website_profile_load() {
$output = node_show(node_load(1221), false, true);
return $output;
}
这样做的正确方法是什么,让Panels(见下面的评论)正确加载?
我正在使用table wizard和Views 2连接到另一个数据库,其中包含有关不是系统用户的人的信息。这是一个校友页面,页面由外部管理并在内部显示(我无能为力,必须让这项工作:)
刚刚发现Panels根本没有加载。因此,即使我尝试加载的节点由于某种原因使用了面板,也都没有加载。
答案 0 :(得分:0)
/**
* Menu path wildcard callback
*/
function website_profile_load($uid = null) {
if (!$uid) {
global $user; // if no user passed in argument, show current user profile
$uid = $user->uid;
}
$output = drupal_render(content_profile_show_profiles($uid));
}
答案 1 :(得分:0)
为什么渲染node_load的结果与转到库存Drupal路径/节点不同有很多原因。诚实地回顾这里太过分了,但简短的回答是你必须为你创建的每个页面定义一个模板/主题和块等。仅仅因为你创建一个新路径并在该路径的回调中执行node_load并不意味着Drupal可以自动知道你想要如何显示该内容。它只是从节点加载数据,之后可以用它做任何事情。这就是为什么你会看到一个看起来很空白的页面而不是你想要通过/节点的那个页面。
但是我会提供这个简单的解决方案,因为它听起来像你想要转到'node / 123 / profile / id / 3'时可以获得的完全相同的页面,但可以通过你自己定义的链接访问。您只需要在hook_menu中设置重定向,如下所示:
$items['my/nice/url/profile'] = array(
'description' => 'This page holds a view that shows profiles based on the %',
'page callback' => 'drupal_goto',
'page arguments' => 'node/123/profile/id/3',
'access callback' => TRUE,
'type' => MENU_CALLBACK);
这实质上是说当你导航到'my / nicer / url / profile'时它会运行:drupal_goto('node / 123 / profile / id / 3');
答案 2 :(得分:0)
我发现答案显然是在创建节点的过程中,Drupal使用$path
(最初由$_GET['q']
设置),有时也$_GET['q']
来确定如何渲染页面。请注意,我正在使用Panels和Ctools Page Manager模块,以使我的工作正常。
事实证明,如果您搜索代码,Panels会查看$_GET['q']
相当多的内容。
以下是我最终的结果:
/**
* Implementation of hook_menu
*/
function modulename_menu() {
$items = array();
// For department and having nice URL's for their profile pages.
$items['my/nice/url/profile/%'] = array(
'description' => 'This page holds a view that shows profiles based on the %',
'page callback' => 'website_profile_load',
'page arguments' => arg(4),
'access callback' => TRUE,
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Menu path callback
*/
function website_profile_load($id = NULL) {
// Rename the query internally since other functions base the design
// on the way the query is structured and not simply by the node which
// is currently loading.
if(!empty($id)) {
$path = $_GET['q'] = 'node/1221/profile/id/' . $id;
}
// Use ctools function to correctly display node view since
// this site heavily uses ctools rendering for panels and
// web parts / web pages.
drupal_load('module', 'page_manager');
ctools_include('node_view', 'page_manager', 'plugins/tasks');
if(function_exists('page_manager_node_view')) {
$output = page_manager_node_view(node_load(1221));
} else {
// Will display incorrectly but still load the UI
$output = node_page_view(node_load(1221));
}
return $output;
}
它有效:)