답변:
더 쉬운 방법이 있어야한다고 확신하지만 이것이 일반적으로하는 일입니다.
1.
등록 드루팔 테마 레지스트리과 무시 테마 구현입니다. 에에 mymod_theme()
새 항목을 추가하십시오. variables
키는 media_youtube_video
테마 의 키와 일치해야합니다. 즉
/**
* Implements hook_theme().
*/
function mymod_theme() {
return array(
'my_media_youtube_video' => array(
'variables' => array('uri' => NULL, ...), // see media_youtube_theme() for this
// bundle the template file with the module itself
// i.e. theme/my-media-youtube-video.tpl.php
'template' => 'my-media-youtube-video',
'path' => drupal_get_path('module', 'mymod') . '/theme
)
);
}
2. 원래 테마 구현을위한 전처리 후크를 추가 하고 여기에 새로운 구현을 제안 하십시오.
/*
* Implements hook_preprocess_media_youtube_video().
*
* Or more generally, hook_preprocess_THEME().
*/
function mymod_preprocess_media_youtube_video(&$variables) {
// If your overriding implementation is not a template but
// is implemented in a different file,
// then remember to include the file explicitly at this point..
$variables['theme_hook_suggestions'][] = 'my_media_youtube_video';
}
제안은 LIFO 방식으로 테마 시스템에 의해 평가됩니다 . 이에 대한 자세한 내용은 여기를 참조 하십시오 .
다른 모듈이이 모듈과 동일한 접근 방식을 따라 구현을 재정의하고 있다는 것을 알고 있다고 가정하면 (위 참조)를 마지막으로 호출 hook_module_implements_alter()
하고 구현할 수 있습니다 hook_preprocess_THEME()
. hook_module_implements_alter()
여기 에 대해 읽을 수 있습니다 .
이것은 Views에도 좋습니다. 요약하면, 재정의하려는 원래 테마 구현의 올바른 고유 이름 (일반적으로 소스 모듈에 정의 됨)을 찾고 사전 프로세스 후크를 추가하고 대체 제안을 추가하면됩니다.
다음과 같이 모듈에서 새 테마를 데칼 할 수도 있습니다.
/**
* Implements hook_theme().
*/
function yourmodule_theme($existing, $type, $theme, $path) {
$theme = array();
$theme['field__field_nameofyourfield'] = array(
'render element' => 'content',
'base hook' => 'field',
'template' => 'field--field-nameofyourfield',
'path' => drupal_get_path('module', 'yourmodule') . '/templates',
);
return $theme;
}
그런 다음 (표준)과 같은 필드 템플릿을 포함하는 / template 디렉토리 파일에 넣고 field-nameofyourfield.tpl.php로 이름을 지정하십시오.
<div class="<?php print $classes; ?>"<?php print $attributes; ?>>
<?php if (!$label_hidden): ?>
<div class="field-label"<?php print $title_attributes; ?>><?php print $label ?>: </div>
<?php endif; ?>
<div class="field-items"<?php print $content_attributes; ?>>
<?php foreach ($items as $delta => $item): ?>
<div class="field-item <?php print $delta % 2 ? 'odd' : 'even'; ?>"<?php print $item_attributes[$delta]; ?>><?php print render($item); ?></div>
<?php endforeach; ?>
</div>
</div>
캐시를 지운 후에는 테마 자체가 대체하지 않는 한 테마에서이 파일 템플리트를 사용하므로 테마에서이 템플리트를 계속 대체 할 수 있습니다.