드루팔 7 / 메모

MEMO FACTORY
둘러보기로 가기 검색하러 가기

info 파일 이름 규칙

The name should start with an alphabetic character, can contain numbers and underscores, but not hyphens, spaces or punctuation.

https://www.drupal.org/docs/7/theming/writing-theme-info-files

모듈의 CSS 제거하기

모듈에서 사용하는 CSS때문에 디자인이 어려울 때가 있다. 그럴 땐 그 CSS를 불러오지 않도록 설정한다. 방법은 테마의 template.php에 코드를 추가하는 것.

예를 들어 menu 모듈의 css를 제외시키고 싶다면 다음과 같이 한다.

function themename_css_alter( &$css ) {
  unset( $css[ drupal_get_path( 'module', 'system' ) . '/system.menus.css' ] );
}

테마에 검색폼 넣기

<form action="/search/node" method="post" id="search-form" class="jb-search-form">
  <div class="form-item">
    <input type="text" class="input-text" value="" size="25" name="keys" />
    <input type="submit" value="Search" name="op" title="Search" alt="Search" />
    <input type="hidden" value="<?php print drupal_get_token( "search_form" ); ?>" name="form_token" />
    <input type="hidden" value="search_form" id="edit-search-form" name="form_id" /> 
  </div>
</form>

TOC 모듈 비교

jQuery Table Of Contents

  • jQuery 버전이 낮으면 작동하지 않으므로 jQuery 모듈을 설치해서 버전을 올려야 한다.
  • 한글 제목에서 문제가 발생한다. 목차는 만들어주는데 링크가 작동하지 않는다.

Simple TOC

  • 다단계로 TOC를 만든다.
  • Block에 TOC를 출력할 수 있다. Block에 TOC가 나와도 글에 TOC가 나온다.
  • TOC가 글에 포함된다. 즉, RSS에 TOC가 포함된다.
  • 글에는 TOC가 나오지 않고 Block에만 나오게 할 수 있다.

TOC Node

  • 다단계로 TOC를 만들어준다.
  • Block에 TOC를 출력할 수 있다. Block에 TOC가 나오는 경우 글에는 TOC가 나오지 않는다.
  • 다단계에서 목록 번호가 이상하게 나온다.

TOC filter

  • 한단계의 TOC를 만든다.

조건부 Block 작동하지 않으면...

특정 조건을 충족할 때만 Block이 나오도록 또는 나오지 않도록 할 수 있다. 만약 그게 잘 작동하지 않으면 Block을 삭제하고 다시 만들면 해결될 수 있다. 만약 Views로 만든 것이라면 view를 삭제하고 다시 만든다.

Metatag 모듈

<?php print render( $page[ 'content' ]); ?>

또는

<?php render( $page[ 'content' ][ 'metatags' ] ); ?>

가 있어야 작동한다.

테마 제작과 관련된 정보들

테마 폴더 이름과 info 파일 이름은 달라도 된다.

보통 테마 폴더 이름과 info 파일 이름은 같다. 하지만 꼭 같아야 하는 것은 아니다. 폴더 이름은 abc, info 파일 이름은 xyz여도 상관없다.

info 파일 이름은 고유해야 한다.

드루팔이 인식하는 테마 이름은 info 파일 이름이다. 예를 들어 abc.info라면 abc가 테마 이름이다. 이 이름은 고유해야 한다. 다른 테마에서 abc.info를 사용한다면 이상한 일이 발생한다.

info 파일 이름에 '-'를 사용하면 안된다.

'-'를 사용하면 테마를 인식하지 못한다. 대신 '_'는 사용해도 된다.

원인을 알 수 없는 오류가 생긴다면 info 파일의 이름을 바꿔보자.

테마를 만들고 나니 특정 조건에 따라 Block을 출력하는 기능이 제대로 작동하지 않았다. 그런데 info 파일의 이름을 변경하니 해결되었다.

region을 만들 때 공백이 없어야 한다. =

region의 이름은 대괄호 안에 넣는다. 이 때 공백이 있으면 인식하지 못한다. 예를 들어

regions[ jb-menu ] = Menu

는 인식하지 못하고

regions[jb-menu] = Menu

는 인식한다.

CSS 제거하는 방법

드루팔 시스템이나 모듈에서 사용하는 CSS를 제거하려면 template.php 파일에 코드를 추가하면 됩니다. 예를 들어 메뉴와 관련된 CSS를 제거하려면 다음과 같은 코드를 추가합니다.

function themename_css_alter( &$css ) {
  unset( $css[ drupal_get_path('module', 'system') . '/system.menus.css' ] );
}

테마 옵션 만드는 방법

테마 옵션은 theme-settings.php로 만든다. 다음은 간단한 예제.

<?php
  function themename_form_system_theme_settings_alter( &$form, $form_state ) {
    $form[ 'jb_settings' ] = array(
      '#type'           => 'fieldset',
      '#title'          => t( 'SNS Settings' ),
      '#collapsible'    => false,
      '#collapsed'      => false,
    );
    $form[ 'jb_settings' ][ 'jb_facebook_url' ] = array(
      '#type'           => 'textfield',
      '#title'          => t( 'Facebook URL' ),
      '#default_value'  => theme_get_setting( 'jb_facebook_url' ),
    );
    $form[ 'jb_settings' ][ 'jb_google_plus_url' ] = array(
      '#type'           => 'textfield',
      '#title'          => t( 'Google Plus URL' ),
      '#default_value'  => theme_get_setting( 'jb_google_plus_url' ),
    );
    $form[ 'jb_settings' ][ 'jb_color' ] = array(
      '#type'           => 'select',
      '#title'          => t( 'Choose Color' ),
      '#options'        => array( 0 => t( 'Black' ), 1 => t( 'Blue' ), 2 => t( 'Red' ) ),
      '#default_value'  => theme_get_setting( 'jb_color' ),
    );
  }
?>

기본값은 info 파일에 만든다. 예를 들어 jb_color의 기본값을 0으로 하려면

settings[jb_color] = 0

를 추가한다.

개발 중단된 모듈 알림 제거하는 방법

모듈의 info 파일에서 project를 주석처리한다. 예를 들어 DHTML Menu라면

; project = "dhtml_menu"

jQuery 사용하는 방법

https://drupal.org/node/171213

jQuery(document).ready(function($) {
  // Code that uses jQuery's $ can follow here.
});