Điểm:0

Có thể tìm thấy tuyến đường "gốc" trong khi thực thi mã từ tiện ích con không?

lá cờ br

Mình ở D9.

Tôi có một biểu mẫu chỉnh sửa nút với một phương tiện truyền thông trường bằng cách sử dụng thư viện phương tiện phụ tùng.

Khi một phương tiện mới được thêm vào, tôi cần chạy một số mã tùy chỉnh để thay thế một mã thông báo của vị trí đường dẫn phương tiện, tùy thuộc vào giá trị của chính nút đó.

Tuy nhiên, các tuyến đường có sẵn với \Drupal::routeMatch()media_library.ui và không có gì đối tượng nút có sẵn

Tôi cho rằng điều này là chính xác, vì mã được thực thi trong khi yêu cầu "bên trong tiện ích thư viện phương tiện".

Vì vậy, tôi đang cố gắng tìm xem liệu có thể bằng cách nào đó để nhận yêu cầu "chính\gốc" từ thời điểm đó và người thân đối tượng nút hoặc nếu nó là không thể. Trong trường hợp sau, bạn có biết liệu mục tiêu đó có thể thực hiện được bằng cách nào đó không?

apaderno avatar
lá cờ us
Để làm cho câu hỏi hữu ích cho người đọc trong tương lai, bạn nên hiển thị mã bạn đang sử dụng và làm rõ bạn đang sử dụng hook nào và bạn đang cố gắng thay đổi hình thức nào. Có vẻ như câu hỏi về biểu mẫu chỉnh sửa nút, nhưng sau đó nó nói rằng `\Drupal::routeMatch()` trả về `'media_library.ui'`, đây không phải là định tuyến cho biểu mẫu chỉnh sửa nút.
apaderno avatar
lá cờ us
Tôi đoán rằng những gì được mô tả sẽ có thể thực hiện được khi tiện ích trường đang sử dụng AJAX.
Giuseppe avatar
lá cờ br
@apaderno hiện tại tôi chưa có mã xác định để hiển thị, tôi đang gỡ lỗi trực tiếp bên trong `token_tokens` vì tôi đang cố xem bản vá này có hoạt động không https://www.drupal.org/project/token/ problems/919760 với trường hợp sử dụng của tôi. Như tôi đã nói, tuyến đường không phải là một trong các biểu mẫu chỉnh sửa nút, bởi vì mã "chạy" trong quá trình chèn phương tiện, nằm trong "phương thức tiện ích phương tiện"
Điểm:2
lá cờ us

Để thay đổi biểu mẫu widget, Drupal gọi các hook này.

Trong cả hai trường hợp, bạn có thể lấy nút mà trường hướng tới bằng cách sử dụng thư viện phương tiện widget được đính kèm bằng cách sử dụng mã tương tự như sau.

if ($context['widget']->getPluginId() == 'media_library_widget') {
  $field_definition = $context['items']->getFieldDefinition();
  if ($field_definition->getTargetEntityTypeId() == 'nút') {
    $node = $context['items']->getEntity();
    // Sử dụng nút $.
  }
}

Thay vào đó, nếu bạn đang cố gắng thay đổi giá trị của mã thông báo khi nó được sử dụng cho tiện ích con đó, thì điều đó là không thể, vì hook để thay đổi mã thông báo (hook_tokens_alter()) chỉ biết mã thông báo được yêu cầu cho loại thực thể nào ($context['type']) và đối tượng thực thể nào ($context['data'][$context['type']]).

Điểm:0
lá cờ cn

Đây là mã của tôi thực hiện công việc tương tự - trích xuất nút từ các tham số trình duyệt thực thể (Tuy nhiên, tôi không chắc bạn sẽ thay đổi vị trí đường dẫn phương tiện nào).

/**
 * Triển khai hook_form_BASE_FORM_ID_alter().
 */
function my_module_form_entity_browser_media_entity_browser_modal_form_alter(&$form, FormStateInterface $form_state) {
  // @todo Chuyển mã đó sang ClassResolver.
  /** @var \Drupal\entity_browser\Form\EntityBrowserForm $form_object */
  $form_object = $form_state->getFormObject();
  $eb = $form_object->getEntityBrowser();
  $eb_params = $eb->getAdditionalWidgetParameters();
  if (!isset($eb_params["path_parts"][1]) || !isset($eb_params["path_parts"][2])) {
    trở lại;
  }

  if (!is_numeric($eb_params["path_parts"][2])) {
    trở lại;
  }

  $params = [];
  cố gắng {
    $params = Url::fromUserInput(implode('/', $eb_params["path_parts"]))->getRouteParameters();
  }
  bắt (Ngoại lệ $ngoại lệ) {
    Drupal::messenger()->addError($Exception->getMessage());
  }

  nút $ = NULL;
  if (isset($params['node'])) {
    $node = Nút::load($params['node']);
  }

  nhóm $ = NULL;
  if (isset($params['group'])) {
    $group = Nhóm::load($params['group']);
  }

  if (trống($nút) && trống($nhóm)) {
    trở lại;
  }

  $ nhãn = [];
  $group_links = [];
  $group_urls = [];
  $ gids = [];
  $ gid = NULL;
  $form['#attributes']['data-parent_node'] = NULL;

  switch (!$node ? 'group' : 'node') {
    trường hợp 'nhóm':
      $gid = $group->id();
      nghỉ;
    trường hợp 'nút':
      $group_contents = GroupContent::loadByEntity($node);
      foreach ($group_contents là $group_content) {
        $group = $group_content->getGroup();
        $gids[] = $group->id();
        $nhãn[] = $group->nhãn();
        $group_urls[] = $group->toUrl()->toString();
        $group_links[] = $group->toLink($group->label())->toString();
      }

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

      $gid = đặt lại($gids);
      nghỉ;
  }

  $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;
}

Đă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.