2011-08-25 3 views
1

/sites/all/modules/< myfolder>에 내 자신의 PHP 파일을 배치하고 /site/all의 정적 HTML 페이지 (javascript 함수)에서 $.post(<myphppage>)을 통해 호출합니다./modules/< myfolder>.drupal 정의되지 않은 함수 PHP로 게시 된 정적 HTML

그러나 PHP는 예상대로 실행되지는 않지만 호출되는 중입니다 (Apache HTTPD에서 액세스 로그는 게시 된 것으로 표시됨). 내가 수동으로 같은 PHP 페이지를 요청하려고하면

, 나는이 오류가 :

는 PHP 페이지에서 내가 가진 echo 문이 오류 이상 제대로 출력, 단순히 $_GET['paramname']을 사용합니다

Fatal error: Call to undefined function db_insert() in /full/path/to/sites/modules/<myfolder>/<myphppage> on line x.

. (그리고 _POST, 직접 요청 테스트 용으로 변경) 디버깅을 위해 몇 가지 쿼리 문자열 매개 변수를 인쇄합니다. 내가 watchdog에 전화를 추가 할 때

또한, 나는 나타납니다

Fatal error: Call to undefined function watchdog() in /full/path/to/sites/modules/<myfolder>/<myphppage> on line x.

가 직접 PHP 페이지에 액세스 할 수 없습니다? 아니면 내가 가져올 필요가있는 Drupal 라이브러리가 있습니까? 아니면 드루팔 (Drupal이 어떻게 작동하는지 다른 무엇인가 놓치고 있습니까?

답변

1

PHP 파일이 드루팔 (Drupal과 독립적이며 부트 스트랩되지 않기 때문에 정의되지 않은 함수에 관한 오류가 발생합니다.

당신이하려는 일을하는 Drupal 방법은 hook_menu()으로 처리하는 URL을 정의하는 모듈 (Creating Drupal 7.x modulesCreating Drupal 6.x modules 참조)을 만드는 것입니다. 그 URL은 $.post()과 함께 사용됩니다.

Drupal을 부트 스트랩하는 방법의 예는 모든 Drupal 설치와 함께 제공되는 index.php 파일의 내용을 참조하십시오. 드루팔 6 내지 7 드루팔

/** 
* Root directory of Drupal installation. 
*/ 
define('DRUPAL_ROOT', getcwd()); 

require_once DRUPAL_ROOT . '/includes/bootstrap.inc'; 
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); 

코드 변경 (다음 코드 드루팔 7에서 사용한 임)하지만 drupal_bootstrap() 모두 드루팔 버전에서 정의된다.

올바른 방법은 어쨌든 모듈을 만드는 것입니다. 모듈이 Drupal을 부트 스트랩하는 PHP 파일을 사용해야하는 이유 목록은 Are there cases where a third-party module would need to use its own file similar to xmlrp.php, cron.php, or authenticate.php?

+0

감사합니다. 부트 스트랩이 초기 테스트를 위해 작동했습니다. 드루팔 (drupal) 방법을 수행하는 방법에 대한 추가 참고 사항에 대한 추가 감사 (장기적인 의도, 먼저 정적으로 일부 항목을 먼저 테스트하려는 경우). – CrackerJack9

관련 문제