Score:-1

ฟังก์ชัน drupal_add_js ที่ไม่ได้กำหนดภายใน themename_preprocess_page

ธง cn

ฉันต้องการใช้จาวาสคริปต์เพื่อลบตัวเลือกออกจากรายการตัวเลือกในกรณีที่ผู้ใช้ไม่ใช่ผู้ดูแลระบบและฉันค้นหาและพบรหัสนี้ในโพสต์และฉันใช้มันในไฟล์ themes->mythemename->mythemename.theme ของโครงการ แต่ไม่ได้ผลและฉันมีปัญหาหลายอย่างที่ฉันต้องการทราบวิธีแก้ปัญหา เนื่องจากฉันค้นหามากฉันไม่พบวิธีแก้ปัญหา

ฟังก์ชัน mythemename_preprocess_page(&$ตัวแปร, $hook) {
    ถ้า (!in_array("ผู้ดูแลระบบ", \Drupal::currentUser()->บทบาท) {
        if (isset($variables['node']->type) && !empty($variables['node']->type) && (strpos($variables['node']->type, 'proxy_request') ! == เท็จ)) {
            drupal_add_js(drupal_get_path('ธีม', 'mythemename') . '/js/datcbaseauth.js');
        }
    }
}

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

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

ปัญหาที่สามและสุดท้ายคือฉันกำลังบอกว่าฟังก์ชัน drupal_add_js และฟังก์ชัน drupal_get_path นั้นไม่ได้กำหนด

ผมค้นหาอยู่นานแต่ไม่เจอวิธีแก้ปัญหาทั้ง 3 ข้อนี้ แม้แต่หัวข้อที่เขาบอกมาก็ยังไม่ครบ เช่น ไม่แจ้งว่าใช้ฟังก์ชัน drupal_add_js ในไฟล์ .theme คืออะไร ข้อกำหนดเบื้องต้นหรือแม้กระทั่งในเอกสารประกอบของ Drupal เอง ไม่มีข้อมูลใดในตัวแปร &$ตัวแปร ที่จะบอกเกี่ยวกับเนื้อหา ลักษณะของแต่ละส่วน ฯลฯ ยกเว้นว่าเป็นอาร์เรย์ที่เชื่อมโยง

Score:1
ธง gb
  • ปัญหาแรกในการรับบทบาทของผู้ใช้ปัจจุบันใช้สิ่งนี้

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

  • ปัญหาที่สอง: $ตัวแปร['โหนด']->ประเภท เป็นอาร์เรย์เพื่อใช้ $ตัวแปร['โหนด']->มัด() เพื่อรับประเภทแทน:

  • ที่สาม drupal_add_js ไม่รองรับอีกต่อไปใน Drupal 8 ใช้ไลบรารีและแนบมาด้วย ดังนั้นลองทำสิ่งต่อไปนี้


/**
 * ใช้ hook_preprocess_HOOK()
 */
ฟังก์ชัน THEME_preprocess_page(&$ตัวแปร) {
  ถ้า (in_array("ผู้ดูแลระบบ", \Drupal::currentUser()->getRoles())) {
    ถ้า ($variables['node']->bundle() && (strpos($variables['node']->bundle(), 'proxy_request') !== FALSE)) {
      $variables['#attached']['library'][] = 'THEME/custom-library';
    }
  }
}

Amr.Mohammad87 avatar
cn flag
ฉันได้รับข้อผิดพลาดนี้หลังจากแก้ไข "ข้อผิดพลาด: การเรียกไปยังกลุ่มฟังก์ชันสมาชิกหรือค่าว่างใน gasfv1_preprocess_page()" โดยรู้ว่าชื่อ gasfv1 เป็นชื่อของธีมที่กำหนดเอง นี่คือรหัสใหม่ของฉันตอนนี้ function -> function gasfv1_preprocess_page(&$variables, $hook) { ถ้า (!in_array("ผู้ดูแลระบบ", \Drupal::currentUser()->getRoles()) { ถ้า ($variables['node']->bundle() && (strpos($variables['node']->bundle(), 'proxy_request') !== เท็จ)) { $variables['#attached']['library'][] ='gasfv1/js/datcbaseauth.js'; } } }
Amr.Mohammad87 avatar
cn flag
คำถามของฉันยากขนาดนั้นเลยเหรอ?
berramou avatar
gb flag
หากคุณได้รับข้อผิดพลาดให้เพิ่มเงื่อนไข *isset($variables['node'])* ในคำสั่ง if!
Amr.Mohammad87 avatar
cn flag
ปัญหาไม่ได้อยู่ที่เงื่อนไข ปัญหาคือหมายความว่าไม่มีรายการที่เรียกว่าโหนดภายในตัวแปร $variables และฉันต้องการทราบว่าชื่อเครื่องของประเภทเนื้อหาที่แสดงผลมีรูปแบบบางอย่างหรือไม่ เช่น proxy_request เพื่อที่ฉันจะได้แทรกจาวาสคริปต์ ไฟล์สำหรับหน้าเหล่านั้นซึ่งเป็นประเภทเนื้อหา
berramou avatar
gb flag
โดยปกติ **$variables['node']** จะมีข้อมูลโหนดหากคุณอยู่ในหน้าโหนด เช่น คุณมีประเภทเนื้อหาชื่อ *proxy_request* และหน้าปัจจุบันของคุณเป็นโหนดประเภท *proxy_request คุณจะพบข้อมูลภายใน คีย์โหนด

โพสต์คำตอบ

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