Bagaimana cara tema Panel dengan benar?

8

Saya menggunakan Page Manager dan Panel , memberikan panel pemilihan node kustom dengan aturan pemilihan berdasarkan jenis (misalnya satu varian panel untuk artikel-, satu varian panel untuk jenis konten blog). Ini berfungsi dengan lancar sejauh ini, penataan juga rapi. Tapi, bagaimana saya bisa mendapatkan lebih banyak kekuatan atas rendering elemen?

Ada beberapa cara untuk merender elemen tertentu: menambahkan bidang, menggunakan token, menggunakan tampilan khusus yang hanya merender bidang tertentu, menggunakan entitas simpul yang diberikan dengan mode tampilan. menggunakan konten panel khusus dengan placeholder dll.

Apa pendekatan terbaik di sini? Akan sangat bagus memiliki kemampuan untuk menambahkan elemen panel kustom (sesuatu) yang dapat ditata dalam * .tpl.php.

Pendekatan saya saat ini akan menggunakan tampilan suite, membuat mode tampilan untuk berbagai bagian / wilayah panel dan menggunakan saran tema kait untuk menambahkan custom node.tpl.php untuk setiap mode tampilan. Tidak perlu memunculkan pandangan, yang cukup banyak? render, kueri tambahan ...) dan dapat menggunakan entitas yang sudah di-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';
  }
}

Saya tidak yakin seberapa baik ini akan di-cache dan berapa banyak sumber daya yang akan dikonsumsi. Saran apa pun akan berterima kasih.

Andre Baumeier
sumber

Jawaban:

11

Seperti yang dikatakan oleh dokumen resmi, Anda dapat melakukan sesuatu seperti

panel-pane_node-title.tpl.php

panel-pane_panel_node_title.tpl.php

panel-pane-simpul-title.tpl.php

panel-pane-node_title.tpl.php

Setelah beberapa pencarian saya menemukan bahwa saran tidak terdeteksi oleh panel, dan saya berakhir di fungsi preprocess ini.

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;
}

Setelah lama mencari di forum saya menemukan ini juga,

<?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';
        }
    }
?>

Tema dan Tembolok.

Ketika datang ke caching, saya percaya Drupal akan menangani caching template untuk Anda sebagai cache halaman normal. Jika Anda tidak berpikir itu berhasil, Anda dapat melakukan sesuatu seperti

<?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;
}
?>
niksmac
sumber
Tidak ada kait ini yang berfungsi untuk halaman panel saya
AlxVallejo
Pastikan Panel diaktifkan dan Anda sedang mengedit folder tema yang benar. Saya tidak tahu harus bagaimana lagi hari ini.
niksmac
Dengan modul devel, bisakah Anda kpr $ vars dalam fungsi preprocess_panels_pane? Saya tidak bisa mendapatkan hasil apa pun.
AlxVallejo
-2

Cara terbaik dan termudah untuk menambahkan konten khusus ke panel dan tema sesuai keinginan Anda adalah, membuat panel konten khusus, menambahkan kode Anda menggunakan mode filter sebagai filter php, dan merangkum konten php / html kustom Anda ke dalam tag div kustom.

Sekarang untuk tema panel konten kustom ini, yang harus Anda lakukan adalah menambahkan aturan css kustom Anda untuk tag div ini ke local.css Anda

Jika Anda memiliki persyaratan khusus, sebutkan di sini.

pengguna1153986
sumber
3
Saya bukan penggemar nyata kode dalam basis data dan bahkan lebih buruk: kode php di bidang yang bukan miliknya. Solusi itu bukan benar-benar bukti di masa depan atau tidak dapat dengan mudah dilalui dan dapat direvisi (mungkin saat mengekspor panel, tetapi akan sangat berantakan untuk menyesuaikan semua hal).
Andre Baumeier