Penangan tampilan khusus tanpa meja


22

Ini tampak mudah pada awalnya, tetapi saya kehilangan rambut saya karena ini.

Saya hanya ingin menambahkan penangan tampilan kustom yang tidak menggunakan tabel.

Saya coba lakukan sebagai tampilan php yang diajukan, $ data ['views'] ['mycustomfield'] di hook_views_data, tapi tetap saja, "mycustomfield colum not found".

Ada bantuan? Terima kasih!

Jawaban:


26

Sebenarnya itu mudah. Lihat saja implementasi Handler Views Global yang tersedia di views.views.inc .

Di bawah ini adalah contoh bagaimana Anda bisa menambahkan field handler tanpa memiliki tabel,

  1. Tentukan penangan khusus Anda di hook_views_data seperti di bawah ini,

    /**
     * Implements hook_views_data().
     */
     function my_module_views_data() {
       $data['custom']['table']['group'] = t('Custom');
       $data['custom']['table']['join'] = array(
         // #global is a special flag which let's a table appear all the time.
         '#global' => array(),
       );
    
       $data['custom']['custom_handler'] = array(
         'title' => t('Custom Handler'),
         'help' => t('Custom Handler.'),
         'field' => array(
           'handler' => 'views_handler_custom_handler',
         ),
       );
    
       return $data;
    }
  2. Buat file inc untuk handler Anda dan letakkan logika Anda di sana. sesuatu seperti di bawah ini Di sini nama file akan menjadi views_handler_custom_handler.inc

    /**
     * A handler to provide a field that is completely custom by the administrator.
     *
     * @ingroup views_field_handlers
     */
     class views_handler_custom_handler extends views_handler_field {
       function query() {
         // do nothing -- to override the parent query.
       }
    
       function option_definition() {
         $options = parent::option_definition();
    
         // Override the alter text option to always alter the text.
         $options['alter']['contains']['alter_text'] = array('default' => TRUE);
         return $options;
       }
    
       function options_form(&$form, &$form_state) {
         parent::options_form($form, $form_state);
    
         // Remove the checkbox
         unset($form['alter']['alter_text']);
         unset($form['alter']['text']['#dependency']);
         unset($form['alter']['text']['#process']);
       }
    
       function render($values) {
         // Render your content.
         return 'Sample';
       }
    }
  3. Tentukan file penangan baru ini di file info modul Anda

  4. Bersihkan cache

Sekarang pengendali bidang baru akan ada di daftar bidang.


1
Terima kasih ! Tepat 2 hal yang saya butuhkan: menimpa kueri dengan menetapkannya kosong, dan bergabung dengan '#global'.
Gregory Kapustin

Apakah ada cara untuk memfilter hasil ini? Misalnya, saya telah membuat Field Handler khusus untuk menghitung "status" khusus berdasarkan hubungan pengguna dengan suatu entitas. Saya ingin dapat memfilter melalui status itu. Ada ide?
tigertrussell

Terima kasih, ini yang saya butuhkan! Tapi sepertinya saya tidak bisa mengaktifkan hubungan pandangan untuk penangan lapangan seperti ini. drupal.stackexchange.com/questions/166734/... Ada ide?
donquixote

1

Agar lengkap: Anda juga perlu menambahkan hook_views_api

function my_module_views_api() {
  return array(
    'api' => 3,
    'path' => drupal_get_path('module', 'my_module'),
  );
}

1
Agar lengkap: Anda harus memasukkan handler dalam file file .info [] = views_handler_custom_handler.inc
Fawwad
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.