在我写几个问题之前,我需要说我尝试按照这里描述的方式进行自定义drupal登录:https://stackoverflow.com/questions/19737229/custom-login-form-in-a-drupal-7
因此,这意味着覆盖http://example.org/user登录页面。这在我的情况下不起作用,因为我可以隐藏标题&页脚(因为它们是以不同的方式构建而不使用drupal块)。
现在我转向另一种解决方案。我创建了一个自定义内容类型“登录”和一个自定义模板文件,如下所示:
现在我需要一个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代码来使这个登录表格有用。欢迎各种帮助。
答案 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