Điểm:0

Làm cách nào tôi có thể thay đổi biểu mẫu đăng nhập trong khối đăng nhập chứ không phải trong trang đăng nhập?

lá cờ tr

Tôi nên sử dụng như thế nào hook_form_alter() để sửa đổi khối đăng nhập của người dùng chứ không phải trang biểu mẫu đăng nhập của người dùng? Mọi thứ tôi đã thử sửa đổi cả hai thực thể hoặc không hoạt động, thậm chí không sử dụng các móc sau.

function mymodule_form_user_login_block_form_alter(&$form, &$form_state, $form_id) {
  // â¦
}
function mymodule_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'user_login_block') {
    // â¦
  }
}
Điểm:2
lá cờ fr

Nó thực sự phụ thuộc vào những gì bạn đang cố gắng hoàn thành. Biểu mẫu đăng nhập người dùng có ID biểu mẫu là user_login_form. Biểu mẫu đó, với ID biểu mẫu đó, có thể được hiển thị trong khối đăng nhập của người dùng hoặc trên /người dùng trang. Nó không hiển thị hai lần trên cùng một trang - nếu bạn đang truy cập /người dùng sau đó khối sẽ không được hiển thị. Đối với tôi, nếu bạn muốn thay đổi hình thức đăng nhập đó, bạn chắc chắn nên thay đổi nó ở cả hai nơi mà nó xuất hiện. Đối với trường hợp đó, hãy sử dụng hook_form_FORM_ID_alter() mà trong trường hợp này là hook_form_user_login_form_alter().

Nếu bạn chỉ muốn tạo kiểu khác cho khối của mình, bạn có thể sử dụng CSS và nhắm mục tiêu #block-userlogin phần tử hay cụ thể hơn là #block-userlogin #user-login-form thành phần.

Hoặc, bạn có thể thay đổi plugin chặn bằng cách sử dụng hook_block_alter().

Hoặc, bạn có thể tạo khối tùy chỉnh của riêng mình để hiển thị biểu mẫu đăng nhập tùy chỉnh của riêng bạn.

Hoặc ...

Một lần nữa, nó thực sự phụ thuộc vào những gì bạn đang cố gắng thực hiện bằng cách chỉ thay đổi khối.

lá cờ tr
Vì tôi không muốn thay đổi trang đăng nhập tại/người dùng, nên chỉ nhắm mục tiêu ID biểu mẫu sẽ không hoạt động. Các thay đổi của tôi có liên quan nhiều hơn CSS cho phép, vì vậy tôi cần có khả năng sử dụng một mô-đun. Có vẻ như hook_block_alter() có thể là con đường tốt nhất của tôi. Bất kỳ tài nguyên nào về cách tôi có thể sử dụng tài nguyên đó để nhắm mục tiêu khối đăng nhập?
lá cờ tr
Tôi không chắc liệu hook_block_alter() có hoạt động hay không, vì tôi cần thay đổi các thành phần thực tế của biểu mẫu. Tôi đoán hook_block_alter() chỉ thay đổi bản dựng của khối? Tôi đang giải thích điều đó một cách chính xác?
lá cờ fr
Một lần nữa, tôi khuyên bạn nên nghĩ về điều này - nếu bạn định thêm thông tin hoặc thêm các thành phần biểu mẫu vào biểu mẫu đăng nhập ở một nơi thì bạn thực sự nên làm điều đó ở mọi nơi.Để xem liệu hook_block_alter() có làm những gì bạn muốn hay không, hãy triển khai nó và in ra mảng $definitions để xem những gì bạn có sẵn để thay đổi. Trường hợp xấu nhất, bạn có thể phải tạo một đối tượng biểu mẫu tùy chỉnh để thay thế nội dung của user_login_form bên trong khối.
lá cờ fr
Ngoài ra, hãy xem https://api.drupal.org/api/drupal/core%21modules%21block%21block.api.php/group/block_api/9.3.x để biết các lựa chọn thay thế khác.
lá cờ tr
Khối đăng nhập hiển thị trong tiêu đề. Tôi yêu cầu alter() sửa đổi một số thành phần trình bao bọc trên các trường biểu mẫu và thực hiện một số thay đổi tùy chỉnh đối với văn bản giữ chỗ, v.v. Tôi sẽ không thêm các trường biểu mẫu mới. Tôi đặc biệt cần điều này để tạo chủ đề cho một khối trông khác với trang đăng nhập của người dùng. Một cái có bố cục nằm ngang trong khi cái kia bố trí theo chiều dọc. Đó là lý do tại sao tôi yêu cầu điều này. Tôi biết những gì tôi cần làm. Tôi chỉ không biết cách nhắm mục tiêu user_login_block đó. Có vẻ như điều này là không thể nếu không xây dựng một biểu mẫu tùy chỉnh, điều này thực sự rất tệ.
Điểm:1
lá cờ us

Biểu mẫu được sử dụng trong biểu mẫu đăng nhập và trong trang đăng nhập là biểu mẫu được triển khai bởi Drupal\user\Form\UserLoginForm lớp. Điều này có nghĩa là ID biểu mẫu để đăng ký hook_form_alter() hoặc hook_form_FORM_ID_alter() là như nhau trong cả hai trường hợp.

Thực thi hook_block_view_BASE_BLOCK_ID_alter(), có thể thay đổi đầu ra hiển thị cho một khối, bao gồm cả khối đăng nhập.

function mymodule_block_view_user_login_block_alter(mảng &$build, \Drupal\Core\Block\BlockPluginInterface $block) {
  // Thay đổi biểu mẫu đăng nhập, được lưu trữ trong $build['user_login_form'].
  // Ví dụ này thay đổi kích thước của trường tên và mật khẩu.
  $build['user_login_form']['name']['#size'] = 18;
  $build['user_login_form']['pass']['#size'] = 18;
}

ID plugin cho khối đăng nhập được cung cấp trong chú thích cho Người dùngĐăng nhậpKhối lớp. nội dung của xây dựng $ mảng được trả về từ UserLoginBlock::build().

  $form = \Drupal::formBuilder()->getForm('Drupal\user\Form\UserLoginForm');
  unset($form['name']['#attributes']['autofocus']);

  unset($form['name']['#description']);
  unset($form['name']['#attributes']['aria-descriptedby']);
  unset($form['pass']['#description']);
  unset($form['pass']['#attributes']['aria-descriptedby']);
  $form['name']['#size'] = 15;
  $form['pass']['#size'] = 15;

  $placeholder = 'form_action_p_4r8ITd22yaUvXM6SzwrSe9rnQWe48hz9k1Sxto3pBvE';
  $form['#attached']['placeholders'][$placeholder] = [
    '#lười_xây' => [
      '\Drupal\user\Plugin\Block\UserLoginBlock::renderPlaceholderFormAction',
      [],
    ],
  ];
  $form['#action'] = $placeholder;

  $items = [];
  if (\Drupal::config('user.settings')->get('register') != UserInterface::REGISTER_ADMINISTRATORS_ONLY) {
    $items['create_account'] = [
      '#type' => 'liên kết',
      '#title' => $this->t('Tạo tài khoản mới'),
      '#url' => Url::fromRoute('user.register', [], [
        'thuộc tính' => [
          'title' => $this->t('Tạo tài khoản người dùng mới.'),
          'lớp học' => [
            'tạo liên kết tài khoản',
          ],
        ],
      ]),
    ];
  }
  $items['request_password'] = [
    '#type' => 'liên kết',
    '#title' => $this->t('Đặt lại mật khẩu của bạn'),
    '#url' => Url::fromRoute('user.pass', [], [
      'thuộc tính' => [
        'title' => $this->t('Gửi hướng dẫn đặt lại mật khẩu qua email.'),
        'lớp học' => [
          'yêu cầu-mật khẩu-liên kết',
        ],
      ],
    ]),
  ];
  trở lại [
    'user_login_form' => $form,
    'user_links' => [
      '#theme' => 'item_list',
      '#items' => $items,
    ],
  ];
lá cờ tr
Điều này trông giống như những gì tôi đang theo đuổi! Cảm ơn bạn! Tôi sẽ thử điều này và báo cáo lại sớm.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.