varlık önişleme fonksiyonunun tanımlanması


10

Özel modülüm, EntityAPIController sınıfını genişleten özel bir varlık tanımlar. Ben temelde, yani özel tpl.php dosyam yoluyla alanları vb görüntüleme gösteren başardı. Ancak tpl.php dosyasına özel değişkenler eklemek için mymodule_preprocess_entity( burada önerildiği gibi ) bir işlev oluşturmak istiyorum . Ancak böyle bir işlev çalışmıyor (çağrılmıyor).

Ayrıca, bu varlığı görüntülediğimde template_preprocess_entity(&$variables), entity.module işlevinin de çalışmadığını fark ettim .

Özel varlık çağrıldığında önişleme işlevini yapmak için başka ne tanımlanması gerekir?


mymodule kullanmanız - öneri efsaneyi kullanıyor
rémy

Yanıtlar:


9

Genel bir mymodule_preprocess(&$variables, $hook)işlev oluşturdum ve belirli işlev adının olması gerektiğini gösterdi mymodule_preprocess_myentity. Varlığın myentitytam adı nerede ?

Yani, bu kod benim için çalışıyor:

function mymodule_preprocess(&$variables, $hook) {
  if (isset($variables['elements']['#entity_type'])) { // or maybe check for $hook name
    $function = __FUNCTION__ . '_' . $variables['elements']['#entity_type'];
    if (function_exists($function)) {
      $function($variables, $hook);
    }
  }
}

function mymodule_preprocess_myentity(&$vars) {
  ...
}

2

Daha genel bir yaklaşım:

/**
 * Implements hook_preprocess().
 */
function mymodule_preprocess(&$variables, $hook) {
  if (isset($variables['elements']['#entity_type'])) {
    $myhook = "preprocess_{$variables['elements']['#entity_type']}_{$variables['elements']['#bundle']}_{$variables['elements']['#view_mode']}";
    $modules = module_implements($myhook);

    foreach ($modules as $module) {
      $function = "{$module}_{$myhook}";
      $function($variables);
    }
  }
}

Ne yazık ki module_implements()etkin temanın önişleme kancasını uygulayıp uygulamadığını kontrol etmiyor.

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.