2010-01-02 4 views
1

WP widget (즉, 위젯을 만들고 편집하는 동안 widgets.php 페이지)의 텍스트 영역에 markItUp을 사용하고 있습니다.WordIt 위젯을위한 markItUp

텍스트 영역은 처음 위젯을 열 때 markItUp되었습니다.하지만 저장을 클릭하면 기능이 손실되고 다시 일반 텍스트 영역으로 돌아갑니다.

페이지 저장 전 및 저장 후 버전의 소스 코드를 비교했을 때 페이지가 다시로드되지 않았으므로 차이는 없습니다. jQuery가 모든 Ajax 호출에 대해 호출되어야 하는가?

나는 위젯의 형태로 처리 함수 내에서

jQuery(".markitup").markItUp(mySettings); 

를 추가하려하지만 도움이되지 않았다. 이 이벤트를 저장 버튼에 바인딩하는 변경을 시도했지만 차이가없는 것으로 보입니다 (모든 잘못을 저지른 좋은 기회가 있습니다).

+0

나는 내일 부탁합니다. 그 2:30 AM 여기 ... 짧은 대답은 WP가 저장 후 위젯 내용을 업데이트함에 따라 각 위젯 AJAX 요청 후에 'markItUp' 함수를 다시 호출해야한다는 것입니다. 나는 내일 너를 보여줄 수있어 ... –

+0

고마워. 나는 그것을 고대한다. 그러나 지금은 해결 방법을 찾을 수있었습니다. admin_head에 활성화 된 jit 파일을로드하는 데 사용되었습니다. 대신 jQuery 코드를 위젯 형태로 옮겼다. 위젯 페이지는 여러 개의 markItUp 영역을 사용하여 조금 느리게로드되는 것 같습니다. – Necati

답변

3

JQuery와

그래서, 당신이해야 할 첫번째 일은 위젯이 저장 한 때 통지되도록 AJAX 호출에 후크입니다. 이를 위해 jQuery ajaxSuccess 함수를 사용합니다. 마지막으로

// Use a self executing function so we can safely use 
// $ inside and know it = jQuery 
(function($){ 

    // Tie into all jQuery AJAX requests 
    $(document).ajaxSuccess(function(e, x, o){ 

     // Make sure our widget is the one being saved 
     // id_base will equal whatever is set in the PHP for the widget 
     // In this example, we target the text widget 
     if(o.data && o.data.indexOf('id_base=text') > -1){ 

      // Now, lets quickly find all the right elements 
      // and filter out the ones already set up, and finally 
      // apply the `markItUp` call, but we will delay just to give 
      // WP a chance to update the widget 
      window.setTimeout(function(){ 
       $("textareas.markItUp:not(.markItUpEditor)").markItUp(mySettings); 
      }, 200); 
     } 
    }); 

})(jQuery); 

PHP의/워드 프레스

을 새 JS는 위젯 페이지에서 파일 포함 WP 알려주기 : 자신의 js 파일이 넣습니다. 당신은 위젯 PHP 파일로, 당신이 위젯을 구축하고있다 functions.php으로 또는 경우에 하나이 통합해야합니다 내가 게시 할 때

function register_markitup(){ 
    wp_enqueue_script('markitup-widgets', WP_PLUGIN_URL . '/your-plugin/js/markitup-ajax.js'); 
} 

add_action("admin_print_scripts-widgets.php", 'register_markitup'); 

편집 나는 잘못된 add_action 후크를했다. 방금 추가 한 .php이 필요했습니다. 코드가 정확합니다.

+0

감사합니다. 내가 이것을 구현했을 때, 내가 작업 한 위젯이 성공적으로 마킹을 되찾았던 것 (마키 씬 티티?), 같은 유형의 다른 위젯 (활성화되었거나 안되는)이 마티 업 영역을 추가로 얻게되는 문제를 발견했다. 계단식 창과 같은 원래 마킹 된 창. 따라서 위의 AJAX 함수를 변경해야했습니다. [여기에 코드를 붙여 넣을 수없는 것 같습니다 ...] – Necati

+0

@Necati http://pastie.org/에 작업 코드를 붙여넣고 코멘트를 링크하여 붙여 넣으면 업데이트 할 수 있습니다. 그에 따라 대답하십시오. –

+0

아래의 답변 노드에 입력했습니다. 거기에서 가져갈 수 있습니다.제발 향상시킬 수 있다고 생각한다면 jQuery 코드도 변경하십시오. 다시 한번 감사드립니다. – Necati

1

덕 솔루션이 잘 작동했습니다. window.setTimeout 함수를 다음과 같이 변경하면됩니다.

window.setTimeout(function(){ 
    $("textarea.markItUp").each(function() { 
     if (!($(this).hasClass('markItUpEditor'))) { 
      $(this).markItUp(mySettings); 
     } 
    });          
}, 200); 
+1

'setTimeout' 함수의 내부를 다음과 같이 바꿀 수 있어야합니다 :'$ ("textarea.markItUp : not (.markItUpEditor)") .markItUp (mySettings);'그 이후로 당신이하고있는 일입니다. '.markItUp'이 너무 모호하고'textarea.markItUp'이 필요했기 때문에 원래의 코드가 실패했을 수도 있습니다. –

+0

흠, 나는 원래의 코드를 작동 시키려고 노력한 첫 번째 시도라고 맹세했습니다. 대체 솔루션을 찾았던 이유는 제가 이미 가지고있는 위젯 인스턴스 중 하나 또는 그 이상이었습니다. 위젯 페이지는 이전 코드로 인한 변경으로 인해 이미 엉망입니다. 아니면 클래스 이름을 'markitup'에서 'markItUp'으로 변경하는 것을 잊었습니다. (이 언어에 대한 적절한 지식이 없으면 나 자신이 미친 듯이 변화를 만들고 뭔가 작동 할 때까지 적용합니다.) 순서대로입니다. 시간 내 주셔서 감사합니다. 더그. – Necati

+0

@Necati 도와 드리겠습니다. 작업 코드를 반영하기 위해 다른 대답을 업데이트했습니다. 내 답변을 수정하는 데 도움이되는 시간을내어 주셔서 감사 드리며 다른 검색 사용자에게 유용 할 것입니다. 스택 오버플로에 오신 것을 환영합니다. 사이트를 볼 수 있기를 바랍니다. –

관련 문제