it-swarm.dev

위치 모듈에서 국가 드롭 다운을 변경하는 방법은 무엇입니까?

기부 된 위치 모듈과 함께 제공되는 드롭 다운에서 사용 가능한 국가를 제한하는 방법을 연구하고 있습니다. hook_form_alter()은 특정 국가 만 보여주는 방법이라고 생각하지만 hook_form_alter() 스 니펫을 손으로 시작하는 것은 내가 달성 할 수있는 능력이 아닙니다. 많은 인터넷 검색을 한 후에도 시작하는 데 필요한 코드 스 니펫을 찾을 수 없었습니다.

현재 작업중인 프로젝트는 미국과 캐나다의 등록 만 허용하므로 드롭 다운을 해당 두 국가로 제한하고 싶습니다. 국가 목록을 호출하는 함수는 location_get_iso3166_list()이고 배열은 $countries입니다. 위치 모듈은 콘텐츠 프로필 모듈의 일부를 채우는 데 사용됩니다.

.inc 파일에서 필요하지 않은 국가를 주석으로 만 제안하는 몇 개의 게시물을 온라인에서 찾았습니다. 다중 사이트 설정에 있으므로이 프로젝트의 옵션이 아니므로 모듈에서 변경하면 다른 사이트에 영향을줍니다. hook_form_alter() 스 니펫을 template.php에 추가해야한다고 생각합니다.

2
jeff_shamley

맞습니다. hook_form_alter () 좋은 시작입니다. 콘텐츠 유형 양식 (및 CCK 위치 필드)을 변경하려는 경우 제가 사용한 한 가지 방법은 hook_form_alter () 를 구현하는 정말 작고 간단한 사용자 정의 모듈을 만드는 것입니다. 이 모듈 생성에 대한 세부 정보/지침은 아래에서 찾을 수 있습니다 (Drupal 6의 경우, 7의 경우 동일하지 않으면 비슷해야 함)).

예를 들어,이 모듈을 'custom_countries'라고 부르고 있습니다. 이름을 변경하려면 언제든지 파일의 이름을 바꾸고 나중에 검색하고 바꿀 수 있습니다.

먼저 모듈 폴더 (sites/all/modules 등)에 새 폴더를 만들어야합니다. (지금부터 생성 된 모든 파일은이 폴더에 있어야합니다.) 다음으로, custom_countries.info라는 새 파일을 만들고 다음을 안에 넣고 저장합니다.

name = "Custom Countries"
description = "Changes the list of countries available from Location module for certain content types"
core = 6.x

다음으로, custom_countries.module라는 다른 파일을 만들고 다음 코드를 내부에 넣고 파일을 저장합니다.

<?php
/**
 * @file custom_countries.module
 * Module to change the countries options of location module
 * for certain content type(s)
 */

/**
 * Implementation of hook_form_alter()
 */
function custom_countries_form_alter(&$form, $form_state, $form_id) {
  // Replace "YOUR_CONTENT_TYPE with the name of the content type desired
  if ($form_id == 'YOUR_CONTENT_TYPE_node_form') {
    $form['#after_build'][] = 'custom_countries_after_build';
  }
}

/**
 * Make changes to countries field after all fields are rendered
 */
function custom_countries_after_build($form_element, &$form_state) {
  // Replace FIELD_NAME with the machine name of the location field for your content type
  $form_element[FIELD_NAME][0]['country']['#options'] = array(
    'ca' => 'Canada',
    'us' => 'United States',
  );
  return $form_element;
}

중요 : 주석을 읽고 'YOUR_CONTENT_TYPE'을 위치 필드가있는 콘텐츠 유형의 컴퓨터 이름으로 변경하십시오 (아마도 '프로필' 기본 content_profile 설정을 사용하는 경우). 또한 'FIELD_NAME'을 위치 입력란의 컴퓨터 이름으로 변경합니다.

마지막으로 admin/build/modules에서 모듈을 활성화합니다.

이제 지정한 콘텐츠 유형을 생성/편집 할 때 국가 목록에 2 개의 옵션 만 표시됩니다. 이 방법을 사용하면 이제 다른 양식도 쉽게 변경할 수 있습니다.

이에 대한 아이디어는 hook_form_alter () 에서 사용할 수있는 위치 양식 필드 만들기에서 나왔습니다. 나중에 다른 국가를 추가하기로 결정한 경우 키/값 쌍의 전체 목록은 http://api.lullabot.com/location_get_iso3166_list/5 에서 찾을 수 있습니다.

3
Laxman13