Điểm:-1

chức năng drupal_add_js không xác định bên trong themename_pre process_page

lá cờ cn

Tôi muốn sử dụng javascript để xóa một tùy chọn khỏi danh sách các tùy chọn trong trường hợp người dùng không phải là quản trị viên và tôi đã tìm kiếm và tìm thấy mã này trong một bài đăng và tôi đã sử dụng nó trong tệp themes->mythemename->mythemename.theme của dự án, nhưng cách đó không hiệu quả và tôi có một số vấn đề muốn biết cách giải quyết, vì tôi đã tìm kiếm rất nhiều nhưng không tìm ra giải pháp

function mythemename_pre process_page(&$variables, $hook) {
    if (!in_array("quản trị viên", \Drupal::currentUser()->roles) {
        if (isset($variables['node']->type) && !empty($variables['node']->type) && (strpos($variables['node']->type, 'proxy_request') ! == sai)) {
            drupal_add_js(drupal_get_path('theme', 'mythemename') . '/js/datcbaseauth.js');
        }
    }
}

Vấn đề đầu tiên là tôi không thể lấy dữ liệu của người dùng hiện tại, vì tôi luôn được thông báo rằng tham số thứ hai của hàm in_array là null.

Vấn đề thứ hai là tôi đang nói rằng tham số thứ hai của hàm strpos là một đối tượng chứ không chỉ là một chuỗi mặc dù ví dụ trong bài đăng coi nó chỉ là một chuỗi.

Vấn đề thứ ba và cũng là vấn đề cuối cùng là tôi đang nói rằng hàm drupal_add_js và hàm drupal_get_path không được xác định.

Mình tìm rất lâu nhưng không thấy có lời giải cho 3 vấn đề này, kể cả các chủ đề có thể họ đề cập trong đó cũng không đầy đủ, ví dụ như không báo cách sử dụng hàm drupal_add_js bên trong file .theme là gì. điều kiện tiên quyết hoặc ngay cả trong chính tài liệu của Drupal, không có dữ liệu nào về biến &$variables sẽ nói về nội dung của nó, bản chất của từng phần, v.v. ngoại trừ việc nó là một mảng kết hợp

Điểm:1
lá cờ gb
  • Vấn đề đầu tiên để có được vai trò người dùng hiện tại sử dụng này

    \Drupal::currentUser()->getRoles();

  • Vấn đề thứ hai: $variables['node']->type là một mảng nên sử dụng $variables['node']->bundle() để có được loại thay vì:

  • thứ ba drupal_add_js không được hỗ trợ nữa trong thư viện sử dụng Drupal 8 và được đính kèm, vì vậy hãy thử một cái gì đó như sau


/**
 * Triển khai hook_pre process_HOOK().
 */
function THEME_pre process_page(&$variables) {
  if (in_array("quản trị viên", \Drupal::currentUser()->getRoles())) {
    if ($variables['node']->bundle() && (strpos($variables['node']->bundle(), 'proxy_request') !== FALSE)) {
      $variables['#attached']['library'][] = 'THEME/custom-library';
    }
  }
}

Amr.Mohammad87 avatar
lá cờ cn
Tôi gặp lỗi này sau khi chỉnh sửa "Lỗi: gọi đến gói chức năng thành viên hoặc null trong gasfv1_pre process_page()" khi biết rằng tên gasfv1 là tên của chủ đề tùy chỉnh. Đây là mã mới của tôi bây giờ function -> function gasfv1_pre process_page(&$variables, $hook) { if (!in_array("quản trị viên", \Drupal::currentUser()->getRoles()) { if ($variables['node']->bundle() && (strpos($variables['node']->bundle(), 'proxy_request') !== false)) { $variables['#attached']['library'][] ='gasfv1/js/datcbaseauth.js'; } } }
Amr.Mohammad87 avatar
lá cờ cn
Câu hỏi của tôi khó vậy sao?
berramou avatar
lá cờ gb
nếu bạn gặp lỗi, hãy thêm điều kiện *isset($variables['node'])* vào câu lệnh if!
Amr.Mohammad87 avatar
lá cờ cn
Vấn đề không nằm ở điều kiện. Vấn đề là điều đó có nghĩa là không có mục nào được gọi là nút bên trong biến $variables và tôi muốn biết liệu tên máy của loại nội dung đang được hiển thị có chứa một mẫu nhất định hay không, tức là proxy_request, để tôi có thể chèn javascript của mình tệp cho các trang đó, là loại nội dung
berramou avatar
lá cờ gb
Thông thường, **$variables['node']** chứa thông tin về nút nếu bạn đang ở trong trang nút, ví dụ: bạn có loại nội dung được gọi là *proxy_request* và trang hiện tại của bạn là loại nút *proxy_request, bạn sẽ tìm thấy thông tin bên trong phím nút

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