سؤال

لقد طورت ميزة أرشيف تشبه Blogger (كما تعلمون، من وحدة الميزة). أريد تحرير ملف .Module من أجل تحميل قالب العرض تلقائيا (الذي يتم تجميعه في الميزة) في السمة. هل هناك طريقة للقيام بذلك؟

هل كانت مفيدة؟

المحلول

على المستوى العام: يجب أن تفكر "الميزات = الوحدات"وترك السموم ل ... المواضيع! هذا لا يعني أنه يجب ألا تضمين قالب مع ميزة الخاص بك، ولكن يجب عليك تقييم ما إذا كان القالب الذي قمت ببناءه يناسب الاستخدام العام للميزات الخاصة بك أو هو محدد لموضوعك المستخدم حاليا. وبعد إذا كانت هذه الحالة الأخيرة، يجب ألا تحزم ملف القالب الخاص بك بالميزة، لكن اتركها مع السمة بدلا من ذلك. فقط فكر في كيف المشاهدات الوحدة النمطية يعمل، للحصول على فكرة عما أقصده.

ربما كنت على دراية بالفعل بهذا وجعلت اعتباراتك لهذه التحيات، وفي هذه الحالة تتجاهل ما ورد أعلاه. فكرت في كتابة ذلك لأن الجملة الخاصة بك "أريد أن تكون TPL.PHP متاحة بالفعل للميزة لاستخدامها (كما لو كانت في مجلد السمة النشطة)" فاجأني كقوالب الاستخدام العام لا تعيش في مجلد السمة ولكن في الوحدة النمطية الخاصة بها One، وعلاوة على ذلك، توفر المشاهدات بالفعل قالب "الاستخدام العام".

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

شخص ما في الواقع فعلت بالفعل ذلك. وبعد إليك مقتطف التعليمات البرمجية من الصفحة المرتبطة:

function MYMODULE_theme_registry_alter(&$theme_registry) {
  $my_path = drupal_get_path('module', 'MYMODULE');
  $hooks = array('node');  // you can do this to any number of template theme hooks
  // insert our module
  foreach ($hooks as $h) {
    _MYMODULE_insert_after_first_element($theme_registry[$h]['theme paths'], $my_path);
  }
}

function _MYMODULE_insert_after_first_element(&$a, $element) {
  $first_element = array_shift($a);
  array_unshift($a, $first_element, $element);
}

بالطبع، سيتعين عليك تغيير سجل السمة لعرضك، بدلا من عقدة (المثال الأصلي يشير إلى نوع CCK).

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

أتمنى أن يساعدك هذا!

نصائح أخرى

محاولة لإضافة هذا إلى ميزة ملفك .Module

/**
 * Implementation of hook_theme_registry_alter().
 */
function MYMODULE_theme_registry_alter(&$theme_registry) {
  $theme_registry['theme paths']['views'] = drupal_get_path('module', 'MYMODULE');
}

في ملف .install استخدام هذا

/**
 * Implementation of hook_enable().
 */
function MYMODULE_enable() {
  drupal_rebuild_theme_registry();
}

هنا مقتفي لإعلان قوالب المشاهدات المخزنة في مجلد "القالب" المجلد الخاص بي "custom_module":

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

آمل أن يساعد شخص ما.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top