Score:0

เป็นไปได้ไหมที่จะค้นหาเส้นทาง "ดั้งเดิม" ในขณะที่รันโค้ดจากวิดเจ็ต

ธง br

ฉันอยู่ D9

ฉันมีรูปแบบการแก้ไขโหนดด้วยไฟล์ สื่อ ฟิลด์โดยใช้ ไลบรารีสื่อ วิดเจ็ต

เมื่อมีการเพิ่มสื่อใหม่ ฉันต้องเรียกใช้โค้ดที่กำหนดเองเพื่อแทนที่โทเค็นหนึ่งรายการของตำแหน่งเส้นทางสื่อ ทั้งนี้ขึ้นอยู่กับค่าของโหนดเอง

อย่างไรก็ตาม เส้นทางที่ให้บริการกับ \Drupal::routeMatch() เป็น media_library.ui และไม่มี วัตถุโหนด มีอยู่

ฉันคิดว่ามันถูกต้อง เนื่องจากโค้ดถูกเรียกใช้งานระหว่างการร้องขอ "ภายในวิดเจ็ตไลบรารีสื่อ"

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

apaderno avatar
us flag
เพื่อให้คำถามเป็นประโยชน์กับผู้อ่านในอนาคต คุณควรแสดงรหัสที่คุณใช้และระบุให้ชัดเจนว่าคุณกำลังใช้ hook ใดและรูปแบบใดที่คุณพยายามแก้ไข คำถามดูเหมือนเกี่ยวกับรูปแบบการแก้ไขโหนด แต่มันบอกว่า `\Drupal::routeMatch()` ส่งคืน `'media_library.ui'` ซึ่งไม่ใช่เส้นทางสำหรับรูปแบบการแก้ไขโหนด
apaderno avatar
us flag
ฉันเดาว่าสิ่งที่อธิบายจะเป็นไปได้เมื่อวิดเจ็ตฟิลด์ใช้ AJAX
Giuseppe avatar
br flag
@apaderno สำหรับตอนนี้ฉันยังไม่มีรหัสที่กำหนดไว้ที่จะแสดง ฉันกำลังแก้ไขข้อบกพร่องโดยตรงภายใน `token_tokens` เพราะฉันกำลังพยายามดูว่าแพทช์นี้ใช้งานได้หรือไม่ https://www.drupal.org/project/token/ ปัญหา/919760 กับกรณีการใช้งานของฉัน อย่างที่ฉันพูด เส้นทางไม่ใช่รูปแบบการแก้ไขโหนด เนื่องจากรหัส "รัน" ระหว่างการแทรกสื่อซึ่งอยู่ใน "โมดอลวิดเจ็ตสื่อ"
Score:2
ธง us

หากต้องการเปลี่ยนรูปแบบวิดเจ็ต Drupal จะเรียกใช้ hooks เหล่านี้

ในทั้งสองกรณี คุณสามารถรับโหนดที่ฟิลด์นั้นใช้ ไลบรารีสื่อ มีการแนบวิดเจ็ตโดยใช้โค้ดที่คล้ายกับต่อไปนี้

ถ้า ($context['widget']->getPluginId() == 'media_library_widget') {
  $field_definition = $context['items']->getFieldDefinition();
  ถ้า ($field_definition->getTargetEntityTypeId() == 'โหนด') {
    $node = $context['items']->getEntity();
    // ใช้โหนด $
  }
}

หากคุณกำลังพยายามเปลี่ยนค่าของโทเค็นแทนเมื่อใช้กับวิดเจ็ตนั้น นั่นเป็นไปไม่ได้ เนื่องจาก hook จะแก้ไขโทเค็น (hook_tokens_alter()) รู้เฉพาะประเภทเอนทิตีที่โทเค็นร้องขอ ($บริบท['ประเภท']) และวัตถุเอนทิตีใด ($context['data'][$context['type']]).

Score:0
ธง cn

นี่คือรหัสของฉันซึ่งทำงานคล้ายกัน - แยกโหนดออกจากพารามิเตอร์เบราว์เซอร์เอนทิตี (แต่ฉันไม่แน่ใจว่าคุณจะเปลี่ยนตำแหน่งเส้นทางสื่อใด)

/**
 * ใช้ hook_form_BASE_FORM_ID_alter()
 */
ฟังก์ชัน my_module_form_entity_browser_media_entity_browser_modal_form_alter(&$form, FormStateInterface $form_state) {
  // @todo ย้ายโค้ดนั้นไปที่ ClassResolver
  /** @var \Drupal\entity_browser\Form\EntityBrowserForm $form_object */
  $form_object = $form_state->getFormObject();
  $eb = $form_object->getEntityBrowser();
  $eb_params = $eb->getAdditionalWidgetParameters();
  ถ้า (!isset($eb_params["path_parts"][1]) || !isset($eb_params["path_parts"][2])) {
    กลับ;
  }

  ถ้า (!is_numeric($eb_params["path_parts"][2])) {
    กลับ;
  }

  $params = [];
  พยายาม {
    $params = Url::fromUserInput(implode('/', $eb_params["path_parts"]))->getRouteParameters();
  }
  จับ (ข้อยกเว้น $ ข้อยกเว้น) {
    Drupal::messenger()->addError($exception->getMessage());
  }

  $โหนด = NULL;
  ถ้า (isset($params['node'])) {
    $node = Node::load($params['โหนด']);
  }

  $group = โมฆะ;
  ถ้า (isset($params['group'])) {
    $group = Group::load($params['group']);
  }

  ถ้า (ว่าง ($ โหนด) && ว่าง ($ กลุ่ม)) {
    กลับ;
  }

  ป้ายชื่อ $ = [];
  $group_links = [];
  $group_urls = [];
  $gids = [];
  $gid = โมฆะ;
  $form['#attributes']['data-parent_node'] = NULL;

  สวิตช์ (!$node ? 'group' : 'node') {
    กรณี 'กลุ่ม':
      $gid = $group->id();
      หยุดพัก;
    กรณี 'โหนด':
      $group_contents = GroupContent::loadByEntity($โหนด);
      foreach ($group_contents เป็น $group_content) {
        $group = $group_content->getGroup();
        $gids[] = $group->id();
        $labels[] = $group->label();
        $group_urls[] = $group->toUrl()->toString();
        $group_links[] = $group->toLink($group->label())->toString();
      }

      $form['#attributes']['data-parent_node'] = $node->id();

      $gid = รีเซ็ต ($gids);
      หยุดพัก;
  }

  $form['#attributes']['data-parent_group_names'] = json_encode($labels);
  $form['#attributes']['data-parent_group_urls'] = json_encode($group_urls);
  $form['#attributes']['data-parent_group_links'] = json_encode($group_links);
  $form['#attributes']['data-parent_group_ids'] = json_encode($gids);
  $form['#attributes']['data-parent_group_id'] = $gid;
}

โพสต์คำตอบ

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