2009-08-19 5 views
1
이것은가 후속이다

: 세션에서 Core javascript functions to make error, warning or notice messages appear?호출하기 드루팔

기본적으로, drupal_set_message() 저장 오류 메시지. Drupal VIA JAVSCRIPT에 이러한 메시지를 표시하지 말라고하는 방법이 필요합니다. 페이지가 새로 고쳐지면이 메시지가 표시되지만 강제로 표시 할 수있는 방법이 필요합니다.

+0

메시지를 만들어 효과와 함께 표시하거나 세션에 저장된 메시지를 표시하겠습니까? 후자를 원한다면, drupal_set_message를 통해 메시지가 생성되었는지 어떻게 추적 할 것인가? – googletorp

+0

효과가있는 메시지를 표시하려고합니다. drupal_set_message를 사용하여 메시지를 트리거 한 다음 drupal을 호출하기 위해 호출해야하는 모든 것을 호출하여 세션의 모든 메시지를 즉시 화면에 표시하려고합니다. 말이 돼? – coderama

답변

0

이 메시지는 세션 및/또는 db에 있기 때문에 ajax를 사용해야합니다. 매우 일반적인 접근 방식이 아닙니다.

내 사이트에서이 drupal_set_message() 함수는 한 페이지가 너무 늦게 메시지를 표시하므로 사용자의 고통을 느낍니다.

+0

정확히. 그래서 직접 호출하는 방법이 있어야합니까? – coderama

2

당신이 맞는지 잘 모르겠지만 자바 스크립트에서 뭔가 반응하고 효과가있는 드루팔 (drupal) 스타일로 메시지를 표시하고 싶습니다.

먼저 JavaScript와 Drupal (PHP)은 서로 잘 이야기 할 수 없습니다. 유일한 해결책은 AJAX를 통해 이루어 지므로, 자바 스크립트에서 drupal_set_message()를 사용하는 것이 바람직하지 않습니다. 그 이유는 매우 어려울 것이고 페이지에 추가해야 할 html로 끝날 것입니다. 그래서 당신의 다른 질문에 대한 답변에서 제안한 것처럼 자바 스크립트에서 html을 직접 작성하는 것이 훨씬 쉬울 것입니다. 그래서 남겨진 것은 효과를 추가하는 것입니다. 이것은 실제로 당신의 효과에 따라,하기가 어렵지 않습니다. 유일한 까다로운 부분은 스크립트 변수의 설정을 저장하지 않기 때문에 현재 cant 인 것처럼 보이는 messagefx 모듈에서 설정을 가져 오는 것입니다. 당신이 messagefx 그것에서 무엇을보고, 다른 함수를 호출하기 위해, 당신은 것 만들려는 효과에 따라

$("#something").a_trigger(function() { 
    $("#messages").append('your html with message').find('the html you inserted').effect(some effect here); 
}); 

라인 주변 모듈 파일입니다 :

그래서 코드에서이 솔루션은 다음과 같이 될 것이다 55.

다른 가능성은 임의의 drupal_set_message()에 대해 반응하고 싶다는 것입니다. 그 어려운 부분은 자바 스크립트에서 실제로 알 수있는 방법이 없기 때문에 언제 메시지가 있는지 파악하는 것입니다. 또한 대부분의 메시지는 페이지를 다시로드하는 양식을 제출 한 결과로 간주되며 이는 불필요한 것입니다. 따라서 데이터를 가져 오는 간단한 AJAX 함수를 작성하여이를 수행 할 간단한 모듈을 작성하십시오. 기본적으로 hook_menu로 url을 정의하고 콜백에서 ajax를 처리하기 위해 필요한 모든 것. $ _SESSION super global에서 메시지를 가져올 수 있습니다.

그래서 콜백 만 대신 아약스에서 HTML을 얻을 것이다, 나머지는 최초의 솔루션 모양을이

function mymodule_ajax_callback() { 
    if (isset($_SESSION['messages'] && !empty($_SESSION['messages'])) { 
     $result = array(); 
     foreach($_SESSION['messages'] as $message) { 
      $result[] = 'Generate html based on $message'; 
     } 
     unset($_SESSION['messages']) // Remove the messages so they wont appear twice. 
    } 
    return drupal_json($result); 
} 

처럼 보일 것입니다.

+2

당신은 $ _SESSION 배열을 직접 조작해서는 안된다. 렌더링 된 html을 원하는 것처럼'drupal_get_messages()'를 사용하거나, 더 간단하다. 테마 ('status_messages')를 호출하여 그 자체를 가져온다.(참고 : 메시지를 지우려면 $ clear_queue 매개 변수를 true로 설정하여'drupal_get_messages()'를 호출해야합니다. 그렇지 않으면 다음에 다시 표시됩니다) –

+0

그래, 그게 낫군. drupal_get_message에 대해 몰랐습니다. 좋은 지적 – googletorp