如何从block_view调用模块中的函数

时间:2017-10-16 12:53:13

标签: php drupal drupal-7

我正在编写一个Drupal 7模块,用于查询我的数据库并打印出一个view_block,其中包含属于当前登录用户的项目列表:

ID ClientName ProjectName ProjectDescription
 1     mickey       toon1        bla bla bla
 2      mouse       toon2        bla bla bla

此时,我需要用户选择他的一个项目以进行可视化。

编辑:

我需要做的是在我的模块中调用另一个函数并将其传递给当前用户选择的项目的ID。

我知道如何为表中的每一行添加一个链接,并将ID值带到下一页,使用GET [' id']来检索它,但我真的不喜欢&#39 ;出于安全原因,我想更改网址 - 也就是说,我不希望用户更改网址中的ID并查看其他人的项目,也不会阻止其发生。我希望尽可能保持网址清洁。

Drupal 7中有什么正确的逻辑允许用户选择一个项目然后调用我的模块中的另一个函数来根据所选的ID加载数据?

1 个答案:

答案 0 :(得分:1)

我会实现hook_menu。使用此解决方案,您需要在URL中传递项目的Id,但是钩子菜单允许您定义2个函数。访问功能将检查用户是否有权访问项目,回调函数将检索项目并显示项目详细信息。

这是我如何实现它的一个简单示例:

/**
 * Implements hook_menu().
 */
function my_module_menu() {
    $items['my_module/show_project_detail/%'] = array(
        'title' => 'Show Task Detail',
        'access callback' => 'show_project_access',
        'access arguments' => array(1),
        'title callback' => false,
        'page callback' => 'show_project',
        'page arguments' => array(1),
    );
    return $items;
}

function show_project_access( $sProjectId ){
    // checks if the user has access to $sProjectId.
    // returns true if he has access, otherwise returns false
}

function show_project( $sProjectId ){
    //returns the html of the task's detail view
}

然后调用hook_menu,你会调用这个url https://my_drupal/my_module/show_project_detail/123 其中123是项目ID。