Tablo olmadan özel görünümler işleyicisi


22

Bu başlangıçta kolay görünüyordu ama bu konuda saçımı kaybediyorum.

Sadece tablo kullanmayan özel bir görünüm işleyicisi eklemek istiyorum.

Hook_views_data php, $ data ['views'] ['mycustomfield'] 'nin önerdiği görünümleri yapmaya çalıştım, ama yine de, "mycustomfield colum bulunamadı".

Herhangi bir yardım ? Teşekkürler !

Yanıtlar:


26

Aslında kolay. Sadece views.views.inc dosyasında bulunan Views Global işleyicileri uygulamasına bakın .

Aşağıda, bir tablo kullanmadan alan işleyicisini nasıl ekleyebileceğiniz örneği verilmiştir.

  1. Özel işleyicilerinizi aşağıdaki gibi hook_views_data içinde belirtin ,

    /**
     * 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. İşleyiciniz için bir inc dosyası oluşturun ve mantığınızı buraya yerleştirin. aşağıdaki gibi bir şey Burada dosya adı views_handler_custom_handler.inc olur

    /**
     * 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. Bu yeni işleyici dosyasını modülünüzün bilgi dosyasında belirtin

  4. Önbellekleri temizle

Şimdi yeni saha işleyicisi saha listesinde olacak.


1
Teşekkürler ! Tam olarak ihtiyacım olan 2 şey: sorguyu boş bırakarak geçersiz kılın ve '#global' ifadesine katılın.
Gregory Kapustin

Bu sonuçları filtrelemenin bir yolu var mı? Örneğin, bir kullanıcının varlık ile olan ilişkisine dayanarak özel bir "durum" hesaplamak için özel bir Alan İşleyici oluşturdum. Bu durum üzerinden filtreleme yapabilmek istiyorum. Herhangi bir fikir?
tigertrussell

Teşekkürler, ihtiyacım olan şey bu! Ancak, böyle bir alan işleyicisinin görüşlerini ilişkilendirebilmem gibi görünüyor. drupal.stackexchange.com/questions/166734/… Herhangi bir fikir?
donquixote

1

Tamamlanmak için: Siz de hook_views_api eklemeniz gerekir.

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

1
Tamamlanmak için: .info dosya dosyalarına işleyici eklemelisiniz [] = views_handler_custom_handler.inc
Fawwad
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.