ตรวจสอบว่าชุดรูปแบบเปิดใช้งานโดยทางโปรแกรมหรือไม่


9

ฉันจะตรวจสอบว่าธีมเปิดใช้งานในการติดตั้ง drupal ได้อย่างไร ฉันกำลังมองหาบางอย่างเช่น module_exists () แต่สำหรับธีม ฉันไม่พบสิ่งใดในเอกสาร

คำตอบ:


6

ใช้list_themes

พารามิเตอร์

$ refresh : โหลดรายการธีมจากฐานข้อมูลซ้ำหรือไม่ ค่าเริ่มต้นเป็น FALSE

ค่าส่งคืน

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

  • ชื่อไฟล์ : ชื่อไฟล์และชื่อของไฟล์. info
  • ชื่อ : ชื่อเครื่องของชุดรูปแบบ
  • สถานะ : 1 สำหรับเปิดใช้งาน, 0 สำหรับธีมที่ถูกปิดใช้งาน
  • ข้อมูล : เนื้อหาของไฟล์. info
  • stylesheets : อาร์เรย์สองมิติโดยใช้ปุ่มแรกสำหรับแอตทริบิวต์สื่อ (เช่น 'ทั้งหมด'), ชุดที่สองสำหรับชื่อไฟล์ (เช่น style.css) ค่าเป็นพา ธ ไฟล์ที่สมบูรณ์ (เช่น themes / bartik / style.css) ไม่ได้ตั้งค่าหากไม่มีการกำหนดสไตล์ชีทในไฟล์. info
  • สคริปต์ : อาเรย์แบบเชื่อมโยงของ JavaScript โดยใช้ชื่อไฟล์เป็นคีย์และพา ธ ไฟล์ที่สมบูรณ์เป็นค่า ไม่ได้ตั้งค่าหากไม่มีการกำหนดสคริปต์ไว้ในไฟล์. info
  • คำนำหน้า : คำนำหน้าเครื่องมือธีมฐาน
  • เอ็นจิน : ชื่อเครื่องของเอ็นจิ้นธีม
  • base_theme : หากนี่เป็นธีมย่อยชื่อเครื่องของธีมพื้นฐานที่กำหนดไว้ในไฟล์. info มิฉะนั้นองค์ประกอบจะไม่ถูกตั้งค่า
  • base_themes : ถ้านี่เป็น sub-theme, อาเรย์แบบสัมพันธ์ของบรรพบุรุษธีม - ธีมของธีมนี้, เริ่มต้นด้วยธีมพื้นฐานของธีมนี้, จากนั้นธีมพื้นฐานของธีมพื้นฐานของแต่ละรายการเป็นต้นแต่ละรายการมีคีย์อาร์เรย์เท่ากับธีมของ ชื่อเครื่องและค่าเท่ากับชื่อชุดรูปแบบที่มนุษย์อ่านได้ หากชุดรูปแบบที่มีชื่อเครื่องตรงกันไม่มีอยู่ในระบบค่าจะเป็น NULL แทน (และเนื่องจากระบบจะไม่ทราบว่าชุดรูปแบบนั้นมีชุดรูปแบบพื้นฐานหรือไม่ซึ่งจะสิ้นสุดอาร์เรย์ของชุดรูปแบบพื้นฐาน) ไม่ได้ตั้งค่าหากชุดรูปแบบไม่ใช่ชุดรูปแบบย่อย
  • sub_themes : อาเรย์แบบเชื่อมโยงของธีมในระบบที่เป็นธีมย่อยโดยตรง (นั่นคือพวกเขาประกาศว่าธีมนี้เป็นธีมพื้นฐานของพวกเขา) ธีมย่อยโดยตรงของธีมย่อย ฯลฯ คีย์เป็นเครื่องของธีม ชื่อและค่าเป็นชื่อที่มนุษย์อ่านได้ของธีม องค์ประกอบนี้ไม่ได้ตั้งค่าหากไม่มีชุดรูปแบบในระบบที่ประกาศชุดรูปแบบนี้เป็นชุดรูปแบบพื้นฐานของพวกเขา

ใช้path_to_themeเพื่อรับธีมที่ใช้งานอยู่ ..

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


3

ข้อมูลจะถูกจัดเก็บในที่เดียวกันอย่างแน่นอนsystemตาราง ฉันไม่พบฟังก์ชันที่มีอยู่เพื่อตรวจสอบ (แม้ว่าอาจมีอยู่ที่ใดที่หนึ่ง) แต่สิ่งนี้ควรทำอย่างรวดเร็ว:

function theme_exists($theme_name) {
  $themes = list_themes();
  return isset($themes[$theme_name]) && $themes[$theme_name]->status == 1;
}

1
ฉันเพิ่งพิมพ์เสร็จในสิ่งเดียวกัน -_- แม้ว่าฉันอาจจะไม่เรียกใช้ฟังก์ชั่นtheme_existsเพียงก้าวเท้าเลี่ยงปัญหาที่เป็นไปได้ใด ๆ กับระบบชุดรูปแบบ
Chapabu

1
list_themes () ทำการแคชแบบสแตติกอยู่แล้วดังนั้นจึงไม่มีความจำเป็นในฟังก์ชันนี้
Letharion

1
@Chapabu ฉันชอบทำสิ่งต่าง ๆ ... น่าสนใจ;)
คลีฟ

@Letharion ขออภัยเพิ่งได้รับสิ่งที่คุณต้องการจะลบบิตนั้น
Clive

1
ฉันไม่ได้หมายความว่าฟังก์ชั่นนี้ไม่จำเป็นฉันคิดว่ามันยอดเยี่ยม ฉันอ้างถึงข้อความของคุณเองว่าสามารถปรับปรุงได้ด้วยการแคชซึ่งฉันไม่คิดว่าจะเป็นประโยชน์ในกรณีนี้
Letharion
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.