我想更改“注册用户” ,“更改密码” 和“用户编辑” 。 在Drupal前端这是不可能的,并且您还必须在代码中多加注意。 在论坛上,您通常会发现很少的帮助,如果不是,那么 满意的。 因此,我喜欢分享自己的解决方案,以免使人头痛。
答案 0 :(得分:0)
Drupal标准已经提供了三种形式,如果要更改它们,则必须访问路由并重定向。
为此,您首先创建一个类似于“ my_forms”的模块。
第二个要挂接到网站的表单或页面。例如 “ ForgotPasswordForm”
在my_forms“路由”中创建一个文件夹,并创建一个文件“ RouteSubscriber.php”
代码:
<?php
namespace Drupal\my_forms\Routing;
class RouteSubscriber extends RouteSubscriberBase{
protected function alterRoutes( RouteCollection $collection ){
//enter code here
}
}
代码:
//edit the 'forgot password' page
if ( $route = $collection->get( 'user.pass' ) ){
$route->setDefault( '_form', '\Drupal\my_forms\Form\ForgotPasswordForm' );
}
关键字“ user.pass”允许您更改路由。 setDefault将路由重定向到您自己的表单。
//edit the 'register' page
if ( $route = $collection->get( 'user.register' ) )
{
$route->setDefaults( array(
'_title' => 'Register',
'_controller' => '\Drupal\myy_forms\Controller\LocalTaskController::offerRegistrationPage'
)
);
}
注册的关键字是“ user.register”。通过使用setDefault s 设置路线,您还可以更改链接/按钮的名称。在这种情况下,我使用控制器在注册内打印出正常页面。 (更多信息在文章末尾)
if ( $route = $collection->get( 'entity.user.edit_form' ) ){
//enter code here
}
对于“用户编辑”页面,您需要使用关键字“ entity.user.edit_form”。
使用Drupal控制器加载简单页面:
namespace Drupal\my_forms\Controller;
class LocalTaskController extends ControllerBase{
/** @var NodeStorage $nodeStorage */
protected $nodeStorage;
/** @var EntityViewBuilder $viewBuilder */
protected $viewBuilder;
function __construct( $nodeStorage, $viewBuilder )
{
$this->nodeStorage = $nodeStorage;
$this->viewBuilder = $viewBuilder;
}
public static function create( ContainerInterface $container )
{
$nodeStorage = $container->get( 'entity.manager' )->getStorage( 'node' );
$viewBuilder = $container->get( 'entity_type.manager' )->getViewBuilder( 'node' );
return new static( $nodeStorage, $viewBuilder );
}
public function offerRegistrationPage()
{
$node = $this->nodeStorage->load( 24 );
$renderArray = $this->viewBuilder->view( $node );
return [
'#type' => '#markup',
'#markup' => render( $renderArray ),
];
}
“ 24”是简单页面的编号,应显示而不是标准注册。