0

在我写几个问题之前,我需要说我尝试以此处描述的方式进行自定义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 代码来使这个登录表单有用。欢迎各种帮助。

4

2 回答 2

1

如果您这样做,您将不得不使用drupal_validate_form()验证您的表单,否则您的网站将容易受到sql 注入攻击。

但是,您可以通过使用 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";
    }
}

在您的模板文件夹中创建文件 page--user-login.tpl.php。

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

于 2013-11-03T07:04:57.643 回答
-2

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

对不起,但这是非常糟糕的方法。

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

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

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

于 2013-11-03T06:11:42.510 回答