Kiểm tra xem chủ đề có được lập trình không


9

Làm cách nào tôi có thể kiểm tra xem liệu một chủ đề có được bật khi cài đặt drupal không? Tôi đang tìm kiếm một cái gì đó như module_exists () nhưng cho các chủ đề. Tôi không thể tìm thấy bất cứ điều gì trên tài liệu.

Câu trả lời:


6

Sử dụng list_theme

Thông số

$ refresh : Có tải lại danh sách các chủ đề từ cơ sở dữ liệu hay không. Mặc định cho FALSE.

Giá trị trả về

Một mảng kết hợp của các chủ đề hiện có. Các khóa là tên máy của chủ đề và các giá trị là các đối tượng có các thuộc tính sau:

  • tên tệp : filepath và tên của tệp .info.
  • Tên : Tên máy của chủ đề.
  • trạng thái : 1 cho bật, 0 cho chủ đề bị vô hiệu hóa.
  • Thông tin : Nội dung của tệp .info.
  • bảng định kiểu : Một mảng hai chiều, sử dụng khóa đầu tiên cho thuộc tính media (ví dụ: 'all'), thứ hai cho tên của tệp (ví dụ style.css). Giá trị là một filepath hoàn chỉnh (ví dụ: Themes / bartik / style.css). Không được đặt nếu không có bảng định kiểu nào được xác định trong tệp .info.
  • các tập lệnh : Một mảng kết hợp của JavaScripts, sử dụng tên tệp làm khóa và filepath hoàn chỉnh làm giá trị. Không được đặt nếu không có tập lệnh nào được xác định trong tệp .info.
  • tiền tố : Tiền tố công cụ chủ đề cơ sở.
  • engine : Tên máy của công cụ chủ đề.
  • base_theme : Nếu đây là chủ đề phụ, tên máy của chủ đề cơ sở được xác định trong tệp .info. Mặt khác, phần tử không được đặt.
  • base_theme : Nếu đây là chủ đề phụ, một mảng kết hợp của tổ tiên chủ đề cơ sở của chủ đề này, bắt đầu với chủ đề cơ sở của chủ đề này, sau đó là chủ đề cơ sở của chủ đề cơ sở, v.v. Mỗi mục có một khóa mảng bằng với chủ đề tên máy và giá trị bằng với tên chủ đề con người có thể đọc được; nếu một chủ đề với tên máy phù hợp không tồn tại trong hệ thống, thay vào đó, giá trị sẽ là NULL (và vì hệ thống sẽ không biết liệu chủ đề đó có chủ đề cơ bản hay không, điều đó sẽ kết thúc mảng chủ đề cơ sở). Điều này không được đặt nếu chủ đề không phải là chủ đề phụ.
  • sub_theme : Mảng liên kết của các chủ đề trên hệ thống là chủ đề phụ trực tiếp (nghĩa là họ tuyên bố chủ đề này là chủ đề cơ bản của họ), chủ đề phụ trực tiếp của chủ đề phụ, v.v. Các phím là máy của chủ đề tên và các giá trị là tên dễ đọc của chủ đề. Phần tử này không được đặt nếu không có chủ đề nào trên hệ thống khai báo chủ đề này làm chủ đề cơ bản.

Sử dụng path_to_theme để có được chủ đề hoạt động ..

Nó có thể trỏ đến chủ đề đang hoạt động hoặc mô-đun xử lý việc thực hiện theo chủ đề. Ví dụ, khi được gọi trong phạm vi của một cuộc gọi theo chủ đề, nó sẽ phụ thuộc vào nơi chức năng chủ đề được xử lý. Nếu được thực hiện từ một mô-đun, nó sẽ trỏ đến mô-đun. Nếu được thực hiện từ chủ đề đang hoạt động, nó sẽ trỏ đến chủ đề đang hoạt động. Khi được gọi ngoài phạm vi của một cuộc gọi theo chủ đề, nó sẽ luôn trỏ đến chủ đề đang hoạt động.


3

Dữ liệu thực sự được giữ ở cùng một nơi, systembảng. Tôi không thể tìm thấy một chức năng hiện có để kiểm tra (mặc dù có thể có một chức năng ở đâu đó), nhưng điều này sẽ làm trong một nhúm:

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

1
Tôi vừa gõ xong chính xác cùng một thứ -_- mặc dù tôi có thể sẽ không gọi hàm theme_existschỉ để vượt qua mọi vấn đề có thể xảy ra với hệ thống chủ đề
Chapabu

1
list_theme () đã thực hiện bộ nhớ đệm tĩnh, vì vậy có lẽ không cần điều đó trong hàm này.
Letharion

1
@Chapabu Tôi thích làm mọi thứ ... thú vị;)
Clive

@Letharion Xin lỗi chỉ cần hiểu ý bạn, sẽ xóa bit đó
Clive

1
Tôi không có nghĩa là chức năng này là không cần thiết, tôi nghĩ nó rất tuyệt. Tôi đã đề cập đến tuyên bố của riêng bạn rằng nó có thể được cải thiện với bộ nhớ đệm, điều mà tôi không nghĩ sẽ hữu ích trong trường hợp này.
Letharion
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.