Score:0

ฉันจะแก้ไขแบบฟอร์มการเข้าสู่ระบบในบล็อกการเข้าสู่ระบบแต่ไม่ใช่ในหน้าการเข้าสู่ระบบได้อย่างไร

ธง tr

ฉันควรใช้อย่างไร hook_form_alter() หากต้องการแก้ไขบล็อกการเข้าสู่ระบบของผู้ใช้ แต่ไม่ใช่หน้าแบบฟอร์มการเข้าสู่ระบบของผู้ใช้ ทุกสิ่งที่ฉันได้ลองแก้ไขเอนทิตีทั้งสองหรือไม่ทำงาน ไม่ได้ใช้ hook ต่อไปนี้ด้วยซ้ำ

ฟังก์ชัน mymodule_form_user_login_block_form_alter(&$form, &$form_state, $form_id) {
  // â¦
}
ฟังก์ชัน mymodule_form_alter(&$form, &$form_state, $form_id) {
  ถ้า ($form_id == 'user_login_block') {
    // â¦
  }
}
Score:2
ธง fr

ขึ้นอยู่กับสิ่งที่คุณพยายามทำให้สำเร็จ แบบฟอร์มการเข้าสู่ระบบของผู้ใช้มี ID ของแบบฟอร์ม user_login_form. แบบฟอร์มนั้นพร้อม ID แบบฟอร์มนั้นอาจแสดงในบล็อกการเข้าสู่ระบบของผู้ใช้หรือบน /ผู้ใช้ หน้าหนังสือ. ไม่แสดงสองครั้งในหน้าเดียวกัน - หากคุณเปิดอยู่ /ผู้ใช้ จากนั้นบล็อกจะไม่ปรากฏขึ้น สำหรับฉัน หากคุณต้องการเปลี่ยนแบบฟอร์มการเข้าสู่ระบบ คุณควรเปลี่ยนทั้งสองที่ที่ปรากฏ สำหรับกรณีนั้นให้ใช้ hook_form_FORM_ID_alter() ซึ่งในกรณีนี้ก็คือ hook_form_user_login_form_alter().

หากคุณต้องการจัดรูปแบบบล็อกให้แตกต่างออกไป คุณสามารถใช้ CSS และกำหนดเป้าหมาย #block-userlogin องค์ประกอบหรือโดยเฉพาะอย่างยิ่ง #block-userlogin #user-login-form ธาตุ.

หรือคุณสามารถเปลี่ยนปลั๊กอินบล็อกโดยใช้ hook_block_alter().

หรือคุณสามารถสร้างบล็อกของคุณเองเพื่อแสดงแบบฟอร์มการเข้าสู่ระบบที่กำหนดเอง

หรือ ...

อีกครั้ง มันขึ้นอยู่กับสิ่งที่คุณพยายามทำโดยการแก้ไขเฉพาะบล็อก

tr flag
เนื่องจากฉันไม่ต้องการเปลี่ยนหน้าเข้าสู่ระบบที่ /user การกำหนดเป้าหมาย ID แบบฟอร์มจะไม่ทำงาน การเปลี่ยนแปลงของฉันมีส่วนเกี่ยวข้องมากกว่าที่ CSS จะอนุญาต ดังนั้นฉันจึงต้องสามารถใช้โมดูลได้ ดูเหมือนว่า hook_block_alter() อาจเป็นเส้นทางที่ดีที่สุดของฉัน แหล่งข้อมูลใดเกี่ยวกับวิธีที่ฉันสามารถใช้สิ่งนั้นเพื่อกำหนดเป้าหมายการบล็อกการเข้าสู่ระบบ
tr flag
ฉันไม่แน่ใจว่า hook_block_alter() จะใช้งานได้หรือไม่ เนื่องจากฉันต้องแก้ไของค์ประกอบที่แท้จริงของแบบฟอร์ม ฉันเดาว่า hook_block_alter() แค่เปลี่ยนการสร้างบล็อก? ฉันตีความถูกต้องหรือไม่?
fr flag
อีกครั้ง ฉันเตือนคุณให้คิดเกี่ยวกับเรื่องนี้ - หากคุณกำลังจะเพิ่มข้อมูลหรือเพิ่มองค์ประกอบของแบบฟอร์มในแบบฟอร์มการเข้าสู่ระบบในที่เดียว คุณควรทำในทุกที่หากต้องการดูว่า hook_block_alter() จะทำสิ่งที่คุณต้องการหรือไม่ ให้นำไปใช้และพิมพ์อาร์เรย์ $definitions เพื่อดูว่าคุณสามารถเปลี่ยนแปลงอะไรได้บ้าง กรณีที่แย่ที่สุด คุณอาจต้องสร้างอ็อบเจกต์ฟอร์มแบบกำหนดเองเพื่อแทนที่เนื้อหาของ user_login_form ภายในบล็อก
fr flag
โปรดดู https://api.drupal.org/api/drupal/core%21modules%21block%21block.api.php/group/block_api/9.3.x สำหรับทางเลือกอื่นๆ
tr flag
บล็อกการเข้าสู่ระบบปรากฏในส่วนหัว ฉันต้องการให้ alter() แก้ไของค์ประกอบ wrapper บางส่วนในฟิลด์แบบฟอร์มและทำการเปลี่ยนแปลงแบบกำหนดเองกับข้อความตัวยึด ฯลฯ ฉันไม่ได้เพิ่มฟิลด์ฟอร์มใหม่ ฉันต้องการสิ่งนี้อย่างชัดเจนสำหรับการสร้างบล็อกเพื่อให้ดูแตกต่างจากหน้าเข้าสู่ระบบของผู้ใช้ หนึ่งมีเลย์เอาต์แนวนอนในขณะที่อีกอันหนึ่งเป็นแนวตั้ง นั่นเป็นเหตุผลที่ฉันขอสิ่งนี้ ฉันรู้ว่าฉันต้องทำอะไร ฉันไม่รู้วิธีกำหนดเป้าหมาย user_login_block นั้น ดูเหมือนว่านี่จะเป็นไปไม่ได้เลยหากไม่มีการสร้างฟอร์มแบบกำหนดเอง ซึ่งมันแย่จริงๆ
Score:1
ธง us

แบบฟอร์มที่ใช้ในแบบฟอร์มเข้าสู่ระบบและในหน้าเข้าสู่ระบบเป็นแบบฟอร์มที่ดำเนินการโดย Drupal\user\Form\UserLoginForm ระดับ. ซึ่งหมายความว่าแบบฟอร์ม ID เพื่อเช็คอิน hook_form_alter() หรือ hook_form_FORM_ID_alter() เหมือนกันทั้งสองกรณี

กำลังดำเนินการ hook_block_view_BASE_BLOCK_ID_alter()เป็นไปได้ที่จะแก้ไขการแสดงผลการแสดงผลสำหรับบล็อก รวมถึงบล็อกการเข้าสู่ระบบ

ฟังก์ชัน mymodule_block_view_user_login_block_alter (อาร์เรย์ &$build, \Drupal\Core\Block\BlockPluginInterface $block) {
  // แก้ไขแบบฟอร์มเข้าสู่ระบบซึ่งเก็บไว้ใน $build['user_login_form']
  // ตัวอย่างนี้เปลี่ยนขนาดของฟิลด์ชื่อและรหัสผ่าน
  $build['user_login_form']['name']['#size'] = 18;
  $build['user_login_form']['pass']['#size'] = 18;
}

ID ปลั๊กอินสำหรับบล็อกการเข้าสู่ระบบมีให้ในคำอธิบายประกอบสำหรับ บล็อกการเข้าสู่ระบบของผู้ใช้ ระดับ. เนื้อหาของ สร้าง $ อาร์เรย์ถูกส่งคืนจาก UserLoginBlock::build().

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

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

  $placeholder = 'form_action_p_4r8ITd22yaUvXM6SzwrSe9rnQWe48hz9k1Sxto3pBvE';
  $form['#attached']['placeholders'][$placeholder] = [
    '#lazy_builder' => [
      '\Drupal\user\Plugin\Block\UserLoginBlock::renderPlaceholderFormAction',
      [],
    ]
  ];
  $form['#action'] = $placeholder;

  $รายการ = [];
  ถ้า (\Drupal::config('user.settings')->get('register') != UserInterface::REGISTER_ADMINISTRATORS_ONLY) {
    $items['create_account'] = [
      '#type' => 'ลิงค์',
      '#title' => $this->t('สร้างบัญชีใหม่'),
      '#url' => Url::fromRoute('user.register', [], [
        'คุณสมบัติ' => [
          'title' => $this->t('สร้างบัญชีผู้ใช้ใหม่'),
          'คลาส' => [
            'สร้างลิงค์บัญชี'
          ]
        ]
      ]),
    ];
  }
  $items['request_password'] = [
    '#type' => 'ลิงค์',
    '#title' => $this->t('รีเซ็ตรหัสผ่านของคุณ'),
    '#url' => Url::fromRoute('user.pass', [], [
      'คุณสมบัติ' => [
        'title' => $this->t('ส่งคำแนะนำในการรีเซ็ตรหัสผ่านทางอีเมล'),
        'คลาส' => [
          'ขอรหัสผ่านลิงค์'
        ]
      ]
    ]),
  ];
  กลับ [
    'user_login_form' => $แบบฟอร์ม,
    'user_links' => [
      '#theme' => 'item_list',
      '#items' => $items,
    ]
  ];
tr flag
ดูเหมือนว่าสิ่งที่ฉันกำลังตามหา! ขอขอบคุณ! ฉันจะลองสิ่งนี้และรายงานกลับเร็ว ๆ นี้

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา