Cách chính xác để thay đổi chủ đề Drupal hoạt động theo chương trình là gì?
Cách chính xác để thay đổi chủ đề Drupal hoạt động theo chương trình là gì?
Câu trả lời:
Giải pháp Drupal 6:
Bạn muốn đảm bảo rằng bạn thay đổi $custom_theme
biến toàn cục khá sớm khi thực hiện trang.
global $custom_theme;
$custom_theme = 'garland';
$custom_theme
định nghĩa ở đâu? Là đủ để thay đổi chủ đề?
hook_custom_theme
api.drupal.org/api/drupal/modules%21system%21system.api.php/ợi
Tôi biết bạn đã hỏi cách thực hiện theo chương trình, nhưng trong trường hợp đó là giải pháp của bạn, không phải là vấn đề thực tế, bạn cũng có thể sử dụng mô-đun ThemeKey . Điều này cho phép bạn đặt các điều kiện, khi được đáp ứng, sẽ thay đổi chủ đề. Bạn có thể tạo điều kiện dựa trên đường dẫn, phân loại, loại nội dung, tạo hoặc chỉnh sửa ngày và hơn thế nữa. Bạn cũng có thể thêm vào mô -đun mô-đun Themekey Properties để có thêm nhiều tùy chọn.
Một lần nữa, tôi biết điều này không phải là lập trình, nhưng tôi không chắc câu hỏi thực sự đằng sau câu hỏi của bạn là làm thế nào để thay đổi chủ đề dựa trên các điều kiện.
Cách tốt nhất để làm điều này là tạo một móc cập nhật trong một mô-đun:
function yourmodule_update_N() {
variable_set('theme_default','yourtheme');
}
drush vset theme_default garland
drush vset admin_theme garland
drush cc all
Những điều cơ bản của việc thay đổi chủ đề mặc định và chủ đề quản trị:
// Changes the theme to Garland
variable_set('theme_default', $theme_default);
// Changes the administration theme to Garland
variable_set('admin_theme', $admin_theme);
Đây là một chức năng nhỏ để đặt lại các chủ đề một cách an toàn cho các chủ đề Drupal mặc định như Bartik hoặc Garland (được thử nghiệm trong Drupal 6 và 7):
/**
* Set the active Drupal themes (the default and the administration theme) to default ones.
* Tested in Drupal 6, 7 (but possibly working in version 8 too according to the documentations [some similarities between 7 and 8]).
*/
function TESTMODULE_set_active_theme_to_default($affect_admin_theme = TRUE) {
// Provides a list of currently available themes.
$list_themes = list_themes(TRUE);
// 6, 7, 8, etc.
$major_version = (int)VERSION;
$theme_default = isset($list_themes['bartik']) ? 'bartik' : 'garland';
$admin_theme = isset($list_themes['seven']) ? 'seven' : 'garland';
// Changes the theme to Garland
variable_set('theme_default', $theme_default);
// Changes the administration theme to Garland if argument is TRUE
if($affect_admin_theme){
variable_set('admin_theme', $admin_theme);
}
// if Switchtheme module (https://drupal.org/project/switchtheme) is enabled, use it
if (module_exists('switchtheme')) {
if (empty($_GET['theme']) || $_GET['theme'] !== $theme_default) {
$query = array(
'theme' => $theme_default
);
// in D6, drupal_goto's second argument is the query string,
// in >=D7, a more general $options array is used
if($major_version < 7){
$options = $query;
}
else{
$options = array('query' => $query);
}
drupal_goto($_GET['q'], $options);
}
}
drupal_set_message(t('Default theme has been changed to %theme_default, administration theme has been changed to %admin_theme.', array(
'%theme_default' => $theme_default,
'%admin_theme' => $admin_theme
)));
}
Bạn có thể gọi nó trong triển khai hook_init () (nhận xét nó sau khi không cần thiết):
/**
* Implements hook_init()
*/
function TESTMODULE_init() {
// ATTENTION! Comment out the following line if it's not needed anymore!
TESTMODULE_set_active_theme_to_default();
}
variable_set('theme_default','yourtheme');
Trong Drupal 7, sử dụng hook_custom_theme()
:
/**
* Implements hook_custom_theme()
* Switch theme for a mobile browser
* @return string The theme to use
*/
function mymodule_custom_theme() {
//dpm($_SERVER['HTTP_USER_AGENT']);
$theme = 'bartik'; // core theme, used as fallback
$themes_available = list_themes(); // get available themes
if (preg_match("/Mobile|Android|BlackBerry|iPhone|Windows Phone/", $_SERVER['HTTP_USER_AGENT'])) {
if (array_key_exists('custommobiletheme', $themes_available)) $theme = 'custommobiletheme';
else { drupal_set_message("Unable to switch to mobile theme, because it is not installed.", 'warning'); }
}
else if (array_key_exists('nonmobiletheme', $themes_available)) $theme = 'nonmobiletheme';
// else, fall back to bartik
return $theme;
}
Chuyển thể từ <biểu tượng cảm xúc />
Trả lại tên có thể đọc được của chủ đề để sử dụng cho trang hiện tại.
Các ý kiến cho chức năng này có thể đáng đọc:
Móc này có thể được sử dụng để tự động đặt chủ đề cho yêu cầu trang hiện tại. Nó nên được sử dụng bởi các mô-đun cần ghi đè chủ đề dựa trên các điều kiện động (ví dụ: mô-đun cho phép đặt chủ đề dựa trên vai trò của người dùng hiện tại). Giá trị trả về của hook này sẽ được sử dụng trên tất cả các trang trừ những trang có chủ đề hợp lệ trên mỗi trang hoặc mỗi phần thông qua chức năng gọi lại chủ đề trong hook_menu (); các chủ đề trên các trang đó chỉ có thể được ghi đè bằng hook_menu_alter ().
Lưu ý rằng việc trả về các chủ đề khác nhau cho cùng một đường dẫn có thể không hoạt động với bộ đệm ẩn trang. Đây rất có thể là một vấn đề nếu một người dùng ẩn danh trên một đường dẫn cụ thể có thể có các chủ đề khác nhau được trả về trong các điều kiện khác nhau.
Vì chỉ có một chủ đề có thể được sử dụng tại một thời điểm, mô-đun cuối cùng (nghĩa là có trọng số cao nhất) trả về tên chủ đề hợp lệ từ móc này sẽ chiếm ưu thế.