Điểm:0

Làm cách nào để thêm các thuộc tính và lớp tải hộp màu vào các liên kết đến từ một hình ảnh svg?

lá cờ cn

Tôi có hình ảnh SVG được thêm vào các nút thông qua svg_image_field mô-đun. Họ có các liên kết nội bộ trong đó /load-parts-ajax/{nid}. Đường dẫn dẫn đến trang bật lên xem nội dung với đường dẫn này /load-parts-ajax/%. Tôi đang cố mở chế độ xem trong hộp màu. Tôi có điều này khi triển khai trong Drupal 7, hoạt động tốt. Chúng tôi đã cài đặt mô-đun colorbox_node và sử dụng nút hộp màu lớp và điều này rất dễ dàng.

Tuy nhiên, đối với Drupal 9, tôi đã cài đặt hộp màu và thư viện của nó và đã thử colorbox_load, với ng_lightboxvà tôi đã thêm đường dẫn vào các đường dẫn được phép trong cấu hình mà không có xúc xắc. tôi cũng đang cố gắng hộp màu_simple_load để gọi tải hộp màu lớp học không có may mắn.

(Tôi có thể hack kết xuất toàn bộ trang xem trang và tất cả bằng cách nhồi cboxElement sau buổi học nhưng tôi chắc chắn rằng điều đó là sai.)

Đây là .js:

(hàm ($, Drupal) {
  Drupal.behaviors.MY_MODULE = {
    đính kèm: chức năng (bối cảnh, cài đặt) {
      $(tài liệu).ajaxStop(function() {
        setTimeout(function () { // cần thêm một khoảng tạm dừng ngắn để hộp màu bắt đầu lại
          $(".view-MY-POP-UP-VIEW", context).once().flexslider({
            hoạt ảnh: "trang trình bày",
            trình chiếu: sai,
            chạm: sai,
            hoạt hìnhLoop: sai,
          });
        }, 500);
      });

      $(".field--name-field-MY-IMAGE .svg_a", context).each(function(index, item) {
        $(item).attr("href", $(item).attr("xlink:href"));
        $(item).attr("data-inner-width", "304");
        $(item).attr("data-inner-height", "532");
        $(item).attr("class", "colorbox-load");
      });
    }
  };
})(jQuery, Drupal);

Và đây là cách tôi gọi các thư viện .js của mình, một nơi SVG được hiển thị trong chế độ xem, một nơi để hiển thị nút.

/**
 * Triển khai hook_views_pre_render().
 */
function MY_views_pre_render(\Drupal\views\ViewExecutable $view) {
  if (isset($view) && $view->storage->id() == 'MY_VIEW') {
    $view->element['#attached']['library'][] = 'MY_MODULE/MY-THƯ VIỆN';
  }
}

/**
 * Triển khai hook_pre process_node().
 */
function MY_pre process_node(&$variables) {
  $node = $variables['node'];
  if ($node->bundle() == 'MY_NODE') {
    $variables['#attached']['library'][] = 'MY_MODULE/MY-THƯ VIỆN';
  }
}

Các thuộc tính từ tệp .js sẽ được thêm vào liên kết hình ảnh trong cả hai trường hợp, nhưng tải hộp màu lớp dường như không được công nhận vì các liên kết chỉ mở chế độ xem trong một cửa sổ mới.

Đây là phần đánh dấu, trông giống hệt với phần đánh dấu drupal 7 đang hoạt động (ngoài việc sử dụng lớp colorbox-load thay vì colorbox-node)

<a id="e3_hyperlink" xlink:title="" xlink:href="/load-parts-ajax/251" target="_blank" class="colorbox-load" href="/load-parts-ajax/251" data-inner-width="304" data-inner-height="532">

Vì vậy, trước khi tôi mở nhầm một báo cáo lỗi, có điều gì đó đơn giản mà tôi đang thiếu để triển khai tải hộp màu class đúng cách hay thứ gì đó như thế này có nên hoạt động như vậy không?

CHỈNH SỬA: Các hộp màu_simple_load có cái này trong trang dự án của nó:

$url = Url::fromUri('internal:/example.html');
$link = Liên kết::fromTextAndUrl(t('View'), $url);
$output = $link->toRenderable();
$output['#attributes']['class'] = [
  'tải hộp màu',
];
colorbox_simple_load_page_attachments($output);

Vì vậy, tôi có thể đặt cái này vào mô-đun tùy chỉnh của tôi, nhưng tôi không chắc mình sẽ cần sử dụng loại hook nào để triển khai nó trên hình ảnh SVG.

sonfd avatar
lá cờ in
Suy nghĩ đầu tiên của tôi là bởi vì bạn đang thêm các lớp hộp màu và siêu dữ liệu qua js.
tonytheferg avatar
lá cờ cn
Bạn có thể đăng giải pháp thay thế không?
sonfd avatar
lá cờ in
Thêm lớp và thuộc tính vào các liên kết trước khi chúng được hiển thị. (Không sử dụng javascript để thêm chúng sau khi trang đã được tải.)
tonytheferg avatar
lá cờ cn
Cách tốt nhất để làm điều đó là gì?
tonytheferg avatar
lá cờ cn
Các liên kết nằm trên một hình ảnh svg, vì vậy tôi không nghĩ rằng chúng có thể truy cập được vào phụ trợ Drupal.
sonfd avatar
lá cờ in
Ok, cách khác, tôi nghĩ bạn có thể thử gắn lại các hành vi, ví dụ: khi kết thúc hành vi của bạn, hãy chạy `Drupal.attachBehaviors('.field--name-field-MY-IMAGE')`. Tôi nghĩ vấn đề là hộp màu đã tìm kiếm các liên kết với lớp hộp màu trước khi bạn thêm lớp vào liên kết của mình. Sử dụng Drupal.attachBehaviors sẽ buộc hộp màu kiểm tra lại các liên kết của svg của bạn
tonytheferg avatar
lá cờ cn
các lớp đã sai, sẽ cập nhật câu hỏi `$(item).attr("class", "use-ajax"); $(item).attr("data-dialog-type", "colorbox");` nên được sử dụng
sonfd avatar
lá cờ in
Bạn đã sử dụng `Drupal.attachBehaviors()` chưa? hoặc điều này đã được giải quyết theo cách khác? Nhận xét cuối cùng của bạn cho biết bạn sẽ cập nhật câu hỏi bằng một số javascript mới mà bạn đã thử, tuy nhiên tôi không thấy nó trong câu hỏi.
tonytheferg avatar
lá cờ cn
Tôi dự định đăng những gì tôi đã làm như một câu trả lời khi tôi có thời gian. Tôi đã thêm `Drupal.attachBehaviors()`, nhưng tôi phải làm vậy để các lớp được thêm cho người dùng ẩn danh. Lý do ban đầu khiến nó không hoạt động là các lớp tôi đang sử dụng không phải là lớp phù hợp để sử dụng cùng với mô-đun colorbox_load.

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