Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从块视图调用模块中的函数_Php_Drupal_Drupal 7 - Fatal编程技术网

Php 如何从块视图调用模块中的函数

Php 如何从块视图调用模块中的函数,php,drupal,drupal-7,Php,Drupal,Drupal 7,我正在编写一个Drupal 7模块,该模块查询我的数据库并打印出一个视图块,其中包含属于当前登录用户的项目列表: ID ClientName ProjectName ProjectDescription 1 mickey toon1 bla bla bla 2 mouse toon2 bla bla bla 此时,我需要用户选择他的一个项目来进行可视化 编辑: 我需要做的是调用模块中的另一个函数,并将当前用户所选项目的I

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

ID ClientName ProjectName ProjectDescription
 1     mickey       toon1        bla bla bla
 2      mouse       toon2        bla bla bla
此时,我需要用户选择他的一个项目来进行可视化

编辑:

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

我知道如何向表中的每一行添加链接,并将ID值带到下一页,使用GET['ID']检索它,但出于安全原因,我真的不想更改url-也就是说,我不想用户更改url中的ID并查看其他人的项目,也不想阻止它发生。我更喜欢保持url尽可能干净

在Drupal 7中,允许用户选择一个项目,然后调用模块中的另一个函数来根据所选ID加载数据的正确逻辑是什么。使用此解决方案,您需要在url中传递项目Id,但钩子菜单允许您定义两个函数。access函数将检查用户是否有权访问项目,回调函数将检索项目并显示项目详细信息

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

/**
 * 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_菜单,您将调用此url
其中123是项目Id。

它是一个自定义块?是的,它是由我的模块生成的块视图。如果您想保留url,则需要使用ajax来创建另一个自定义url,然后用POST参数传递,然后在response replace table上我不想粗鲁地否决你,但我明确表示,为了安全起见,我不想更改urlreasons@user299791这是一个正确的实现。无论id参数如何传输,访问控制都是关键。url中的Id根本不是问题。此外,用户可能希望复制或共享此类链接,以便稍后从其他页面或其他任何页面实际查看相应的项目。。如果url中没有id,您会怎么做?您仍然可以实现一个表单,该表单发布id并重定向到相应的页面,但这有点过分,并且无法解决访问控制问题。您无法使用未完全描述其目的地[URL]的锚定链接导航到某个位置。这可能是正确的,但不是我要求的。url中没有id是完全可行的,POST是正确的解决方案,它确实解决了访问控制问题。@EricLavault:谢谢你清楚地表达了我的观点:)@user299791很抱歉,我很确定你问了Drupal 7中允许用户的正确逻辑是什么。。。。我只是想知道如何防止用户像通过GET那样使用任意id参数发出POST请求?什么样的魔法可以阻止用户仅仅通过改变参数的来源来访问内容?