在我写几个问题之前,我需要说的是,我尝试以此处描述的方式进行自定义drupal登录:https://stackoverflow.com/questions/19737229/custom-login-form-in-a-drupal-7
因此,这意味着覆盖 http://example.org/user 登录页面。这在我的情况下不起作用,因为我可以隐藏页眉和页脚(因为它们是以不同的方式构建的,不使用drupal块)。
现在我转向一个不同的解决方案。我创建了一个自定义内容类型"login"和一个自定义模板文件,如下所示:
http://www.will.sx/login
现在,我需要一个drupal登录功能来集成到我的自定义表单中。
这是 HTML 代码:
<div id="form-wrapper">
<form id="login">
<h1>billing & 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代码来使这个日志形式有用。欢迎各种帮助。
如果你这样做,你必须用drupal_validate_form()验证你的表单,否则你的网站将容易受到SQL注入攻击。
但是,您可以通过仅为用户登录页面创建全新的页面布局来实现一种更简单、更安全的方法,该布局将使用模板文件中的template_preprocess_page覆盖 page.tpl.php.php 模板。将以下代码复制到模板.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 代码复制并粘贴到 page--user-login.tpl.php 中,删除不需要的任何内容,然后刷新缓存。
我创建了一个自定义内容类型"login"和一个自定义模板文件,如下所示:
抱歉,这是非常糟糕的方法。
我不明白,为什么你不能只是重新定义用户登录表单,而是使用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