Score:0

อัปเดตค่าเว็บฟอร์มที่ส่งโดยคลิกปุ่มได้อย่างไร

ธง in

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

Score:4
ธง ne

คุณสามารถใช้ได้ hook_entity_operation เพื่อเพิ่มการดำเนินการเอนทิตีแบบกำหนดเองสำหรับการส่งเว็บฟอร์ม กับ การรวมมุมมองเว็บฟอร์ม โมดูลคุณควรสามารถเพิ่มฟิลด์ "การดำเนินการ" ในมุมมองของคุณได้แล้วโดยจะแสดงการดำเนินการเริ่มต้นโดยขึ้นอยู่กับระดับการเข้าถึง (แก้ไข ลบ ฯลฯ) การดำเนินการที่กำหนดเองของคุณจะปรากฏขึ้นที่นั่น

MYMODULE.module

<?php

/**
 * @ไฟล์
 * Hooks ดำเนินการโดยโมดูล MYMODULE
 */

ใช้ Drupal\Core\Entity\EntityInterface;
ใช้ Drupal\webform\WebformSubmissionInterface

/**
 * ใช้ hook_entity_operation()
 */
ฟังก์ชัน MYMODULE_entity_operation (EntityInterface $submission) {
  $การดำเนินการ = [];
  ถ้า (อินสแตนซ์การส่ง $ ของ WebformSubmissionInterface) {
    ถ้า ($submission->getElementData('MY_HIDDEN_REVIEW_ELEMENT') !== 'อนุมัติ') {
      $operations['อนุมัติ'] = [
        'title' => t('อนุมัติ'),
        'น้ำหนัก' => 15,
        'url' => Url::fromRoute('MYMODULE.webform_submission_approve', [
          'ส่ง' => $submission->id(),
        ], [
          'query' => \Drupal::destination()->getAsArray(),
        ]),
      ];
    }
  }
  ส่งคืน $operation;
}

MYMODULE.routing.yml

MYMODULE.webform_submission_approve:
  เส้นทาง: '/admin/MYMODULE/submission/{submission}/approve'
  ค่าเริ่มต้น:
    _controller: '\Drupal\MYMODULE\Controller\WebformSubmissionApproveController::อนุมัติ'
  ตัวเลือก:
    พารามิเตอร์:
      ส่ง:
        ประเภท: 'เอนทิตี:webform_submission'
  ความต้องการ:
    _custom_access: '\Drupal\MYMODULE\Controller\WebformSubmissionApproveController::การเข้าถึง'

src/Controller/WebformSubmissionApproveController.php

<?php

เนมสเปซ Drupal\MYMODULE\Controller;

ใช้ Drupal\Core\Access\AccessResult;
ใช้ Drupal\Core\Controller\ControllerBase;
ใช้ Drupal\webform\Entity\WebformSubmission
ใช้ Symfony\Component\HttpFoundation\RedirectResponse;
ใช้ Symfony\Component\HttpFoundation\Request;

/**
 * คลาส WebformSubmissionApproveController
 *
 * @package Drupal\MYMODULE\Controller
 */
คลาส WebformSubmissionApproveController ขยาย ControllerBase {

  /**
   * อนุมัติวิธีการ
   *
   * @param \Drupal\webform\Entity\WebformSubmission $submission
   * การส่งเว็บฟอร์ม
   * @param \Symfony\Component\HttpFoundation\Request $request
   * คำขอ HTTP ปัจจุบัน
   *
   * @return array|\Symfony\Component\HttpFoundation\RedirectResponse
   *   การตอบสนอง.
   *
   * @throws \Drupal\Core\Entity\EntityStorageException
   */
  ฟังก์ชั่นสาธารณะอนุมัติ (WebformSubmission $submission, Request $request) {

    $submission->setElementData('MY_HIDDEN_REVIEW_ELEMENT', 'อนุมัติ');
    $submission->save();

    $this->messenger()->addMessage($this->t('การส่ง @serial ได้รับการอนุมัติ', [
      '@serial' => $submission->serial(),
    ]));

    ส่งคืน $request->query->get('destination') ? new RedirectResponse($request->query->get('ปลายทาง')): [];
  }

  /**
   * ตรวจสอบการเข้าถึงสำหรับคำขอเฉพาะ
   *
   * @return \Drupal\Core\Access\AccessResult
   * ผลการเข้าถึง
   *
   * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
   * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
   */
  การเข้าถึงฟังก์ชั่นสาธารณะ (WebformSubmission $submission) {
    ส่งคืน AccessResult::allowedIf(!$submission->isDraft() && in_array('administrator', $this->currentUser()->getRoles()));
  }

}

โพสต์คำตอบ

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