使用自定义URL进行Drupal自定义登录

时间:2013-11-02 10:37:24

标签: php drupal drupal-7

在我写几个问题之前,我需要说我尝试按照这里描述的方式进行自定义drupal登录:https://stackoverflow.com/questions/19737229/custom-login-form-in-a-drupal-7

因此,这意味着覆盖http://example.org/user登录页面。这在我的情况下不起作用,因为我可以隐藏标题&页脚(因为它们是以不同的方式构建而不使用drupal块)。

现在我转向另一种解决方案。我创建了一个自定义内容类型“登录”和一个自定义模板文件,如下所示:

http://www.will.sx/login

现在我需要一个drupal登录功能来集成到我的自定义表单中。

这是HTML代码:

  <div id="form-wrapper">
    <form id="login">
        <h1>billing &amp; support</h1>
        <input type="email" id="email" name="email" placeholder="Type your email">
        <input type="password" id="password" name="password" placeholder="Type your password">
        <input type="submit" value="Login">
        <a href="#" class="reset-pass">Forgot password?</a>
    </form>
</div>   

现在我需要一个PHP代码来使这个登录表格有用。欢迎各种帮助。

2 个答案:

答案 0 :(得分:1)

如果您这样做,则必须使用drupal_validate_form()验证您的表单,否则您的网站将容易发生sql injection攻击。

但是,您可以通过在template.php文件中使用template_preprocess_page覆盖用户登录页面来覆盖page.tpl.php模板,从而实现更简单,更安全的方法。将以下代码复制到template.php:

function yourthemename_preprocess_page(&$variables) {
    $url = drupal_get_destination();
    $url = $url['destination'];
    if ($url == 'user/login') {
        $variables['theme_hook_suggestions'][] =  "page__user_login";
    }
}

在模板文件夹中创建文件页面 - user-login.tpl.php。

您可以将原始page.tpl.php代码复制并粘贴到页面 - user-login.tpl.php中,删除不需要的内容,然后刷新缓存。

答案 1 :(得分:-2)

  

我创建了一个自定义内容类型“登录”和一个自定义模板文件,如下所示:

抱歉,这是非常糟糕的做法。

我不明白,为什么你不能只重新定义用户登录表单,而不是创建自定义内容类型,你可以使用hook_menu()创建自定义页面(或使用hook_menu_alter()重新定义标准)。请注意,在自定义页面的代码中,如果需要,可以重新定义所有Drupal输出(只打印结果,而不是从页面回调中返回)。 请参阅api.drupal.org以获取挂钩声明&amp;实例

然后,在您的页面回调代码中,只需打印您的表单,如下所示:

print drupal_render(drupal_get_form('my_login_form'));

我建议您使用标准登录表单(ID为“user_login”,只需将上面代码中的'my_logn_form'替换为'user_login'),因为drupal登录逻辑不易重复。

关于创建自定义页面:https://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_menu/7