it-swarm.asia

كيف يمكنني تجاوز قالب عرض افتراضي من وحدة نمطية أخرى؟

يوفر دروبال hook_theme(). ولكن هل هناك من hook_theme_alter ()؟ أنا أبحث عن شيء مثل hook_menu_link_alter() ، والذي يتجاوز إدخالات قائمة الربط ، ولكن للسمة. أريد تعديل إدخال سمة عرض ربط حتى أتمكن من تحديد مكان البحث عن أحد القوالب المخصصة الخاصة بي. لست مهتمًا بتحديده من خلال واجهة طرق العرض ، نظرًا لأنه يبحث عن قالب السمة داخل مجلد السمة ، وأريد أن يكون القالب الخاص بي في وحدة ميزات.

لقد وجدت [hook_theme_registry_alter() و _theme_process_registry() . يمكنك الإجابة على أيهما الأفضل للاستخدام ولماذا.

أي من هذه المفاتيح يجب أن أقوم بتعديلها لجعل العرض يلتقط القالب من الوحدة؟

إذا قمت بوضع views-data-export-xml-header - richard-feeds-nokia-movies - views-data-export-1 في الميزة ، فإن العرض الافتراضي لالتقاط طرق العرض data-export-xml-header. tpl.php. إذا وضعت هذا القالب في طبقة السمة ، فإن العرض يلتقطه (حتى مع ربط خطاف التسجيل في مكانه).

6
amateur barista

يجب أن تقوم الميزة بتطبيق hook_theme_registry_alter(). حالة الاستخدام التي تصفها هي بالضبط ما هو هذا الخطاف. يجب أن يساعدك رمز المثال المرتبط بصفحة واجهة برمجة التطبيقات على البدء. تتمثل الفكرة الأساسية في استهداف الإدخال الذي يتوافق مع الإدخال الذي يتم إدراج views_theme() في السجل ، وتغيير القالب ليطابق النموذج الموجود في ميزتك.

13
jhedstrom

هذا هو الرمز الذي أستخدمه للإعلان عن قالب عرض مخزن في قالب مجلد وحدة مخصصة.

/**
 * Implements hook_theme_registry_alter().
 */
function custom_module_theme_registry_alter(&$theme_registry) {
  $extension   = '.tpl.php';
  $module_path = drupal_get_path('module', 'custom_module');
  $files       = file_scan_directory($module_path . '/templates', '/' . preg_quote($extension) . '$/');

  foreach ($files as $file) {
    $template = drupal_basename($file->filename, $extension);
    $theme    = str_replace('-', '_', $template);
    list($base_theme, $specific) = explode('__', $theme, 2);

    // Don't override base theme.
    if (!empty($specific) && isset($theme_registry[$base_theme])) {
      $theme_info = array(
        'template'   => $template,
        'path'       => drupal_dirname($file->uri),
        'variables'  => $theme_registry[$base_theme]['variables'],
        'base hook'  => $base_theme,
        // Other available value: theme_engine.
        'type'       => 'module',
        'theme path' => $module_path,
      );

      $theme_registry[$theme] = $theme_info;
    }
  }
}

يجب أن تكون قادرًا بسهولة على تخطّي موضوع حالي بدلاً من إضافة مظهر جديد. آمل أن يساعد شخص ما.

1
Sebastien M.