Làm thế nào để bảng chủ đề đúng?


8

Tôi đang sử dụng Trình quản lý trangBảng điều khiển , cung cấp bảng điều khiển nút tùy chỉnh với các quy tắc lựa chọn theo loại (ví dụ: một biến thể bảng cho bài viết-, một biến thể bảng cho loại nội dung blog). Công việc này trơn tru cho đến nay, kiểu dáng cũng gọn gàng. Nhưng, làm thế nào tôi có thể có được nhiều sức mạnh hơn trong việc kết xuất các yếu tố?

Có nhiều cách để kết xuất các thành phần cụ thể: thêm các trường, sử dụng mã thông báo, sử dụng chế độ xem tùy chỉnh chỉ hiển thị các trường cụ thể, sử dụng thực thể nút được kết xuất với chế độ xem. sử dụng nội dung bảng tùy chỉnh với trình giữ chỗ, v.v.

Cách tiếp cận tốt nhất ở đây là gì? Sẽ thật tuyệt khi có khả năng thêm một phần tử khung tùy chỉnh (một cái gì đó) có thể được tạo kiểu trong * .tpl.php.

Cách tiếp cận hiện tại của tôi sẽ là sử dụng bộ hiển thị, tạo các chế độ xem cho các phần / bảng điều khiển khác nhau và sử dụng các đề xuất móc chủ đề để thêm node.tpl.php tùy chỉnh cho mỗi chế độ xem. Nó sẽ không cần phải thu hút lượt xem, mà gần như là quá mức cần thiết?! kết xuất, truy vấn bổ sung ...) và có thể sử dụng các thực thể đã được lưu trong bộ nhớ cache.

function mytheme_preprocess_node(&$vars) {
  if ($vars['node']->type == 'my_content_type' && $vars['view_mode'] == 'panel_region_left') {
    $vars['theme_hook_suggestions'][] = 'node__my_content_type__panel_region_left';
  }

  if ($vars['node']->type == 'my_content_type' && $vars['view_mode'] == 'panel_region_right') {
    $vars['theme_hook_suggestions'][] = 'node__my_content_type__panel_region_right';
  }
}

Tôi không chắc chắn điều này sẽ được lưu trữ tốt như thế nào và nó sẽ tiêu thụ bao nhiêu tài nguyên. Bất kỳ lời khuyên sẽ được biết ơn.

Câu trả lời:


11

Như tài liệu chính thức nói rằng bạn có thể làm một cái gì đó như

panel-pane_node-title.tpl.php

panel-pane_panel_node_title.tpl.php

panel-pane-node-title.tpl.php

panel-pane-node_title.tpl.php

Sau một số tìm kiếm tôi đã thấy rằng các đề xuất không được phát hiện bởi các bảng, và tôi kết thúc trong chức năng tiền xử lý này.

function MYTHEME_preprocess_panels_pane(&$vars) {
// get the subtype
$subtype = $vars['pane']->subtype;

// Add the subtype to the panel theme suggestions list
$vars['theme_hook_suggestions'][] = 'panels_pane__'.$subtype;

return $vars;
}

Sau một thời gian dài tìm kiếm trên các diễn đàn tôi cũng thấy điều này,

<?php
function THEMENAME_preprocess_page(&$vars) {
    global $theme_path;
    if($panel_page = page_manager_get_current_page()){

        $target_menu = 'menu-sixth-form-college';
        $current_path = menu_get_item();

        $target_menu_links = menu_load_links($target_menu);
        foreach($target_menu_links as $links) {
            $link_paths[] = $links['link_path'];
        }
        $preferred_link_paths = $link_paths;
        // if the current link is inside menu_load_link
        if(in_array($current_path['href'], $preferred_link_paths)) {
            $vars['theme_hook_suggestions'][] = 'page__sixthform';
        }
        if($panel_page['name'] == 'page-sixth_form_college') {
            $vars['theme_hook_suggestions'][] = 'page__sixthform';
        }
    }
?>

Chủ đề và Cache.

Khi nói đến bộ nhớ đệm, tôi tin rằng Drupal sẽ xử lý bộ đệm ẩn mẫu cho bạn như bộ đệm trang bình thường. Nếu bạn không nghĩ rằng nó hoạt động, bạn có thể làm một cái gì đó như

<?php
function my_module_function() {
  $my_data = &drupal_static(__FUNCTION__);
  if (!isset($my_data)) {
    if ($cache = cache_get('my_module_data')) {
      $my_data = $cache->data;
    }
    else {
      // Do your expensive calculations here, and populate $my_data
      // with the correct stuff..
      cache_set('my_module_data', $my_data, 'cache');
    }
  }
  return $my_data;
}
?>

Không có cái móc nào trong số này hoạt động cho trang bảng điều khiển của tôi
AlxVallejo

Đảm bảo Bảng điều khiển được bật và bạn đang chỉnh sửa thư mục chủ đề chính xác. Tôi không biết những gì khác cho đến ngày.
niksmac

Với mô-đun devel, bạn có thể kpr $ vars trong hàm pre process_panels_pane không? Tôi không thể nhận được bất kỳ đầu ra.
AlxVallejo

-2

Cách tốt nhất và dễ nhất để thêm nội dung tùy chỉnh vào các bảng và theo chủ đề theo cách của bạn là tạo các bảng nội dung tùy chỉnh, thêm mã của bạn bằng chế độ bộ lọc dưới dạng bộ lọc php và gói nội dung php / html tùy chỉnh của bạn vào các thẻ div tùy chỉnh.

Bây giờ để chủ đề khung nội dung tùy chỉnh này, tất cả những gì bạn phải làm là thêm quy tắc css tùy chỉnh cho thẻ div này vào local.css của bạn

Nếu bạn có bất kỳ yêu cầu cụ thể, xin vui lòng nêu chúng ở đây.


3
Tôi không phải là một fan hâm mộ thực sự của mã trong cơ sở dữ liệu và thậm chí tệ hơn: mã php trong các trường không thuộc về nó. Giải pháp đó không thực sự là bằng chứng trong tương lai cũng không thể lưu trữ và sửa đổi đúng cách (có thể là trong khi xuất bảng điều khiển, nhưng sẽ là một mớ hỗn độn khủng khiếp để điều chỉnh tất cả mọi thứ).
Andre Baumeier
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.