DokuWiki-섹션 헤더에 편집 버튼을 표시하는 방법


3

DokuWiki 에는 최신 안정 릴리스 (2009-02-14)와 호환되는 플러그인 이 있습니다.이 플러그인 은 섹션 텍스트의 끝에 표시하는 대신 섹션 헤더 (예 : Wikipedia 또는 MediaWiki)에 편집 버튼을 표시 할 수 있습니다.

섹션을 편집하려는 경우 내용의 끝으로 스크롤하여 편집 버튼을 클릭해야하므로 기본 방법은 혼동됩니다.

답변:


4

좋아, 나는 그것을 스스로하는 방법을 알아 냈고, 여기 해결책이있어서 Wikipedia와 같은 섹션 헤더 편집 버튼 가질 수 있습니다 .

텍스트 편집기에서 다음 파일을여십시오.

"\ dokuwiki \ inc \ parser \ handler.php"

110 행 근처에서 다음을 발견 할 수 있습니다.

    if ($level<=$conf['maxseclevel']) {
        $this->_addCall('section_edit',array($this->status['section_edit_start'], $pos-1, $this->status['section_edit_level'], $this->status['section_edit_title']), $pos);
        $this->status['section_edit_start'] = $pos;
        $this->status['section_edit_level'] = $level;
        $this->status['section_edit_title'] = $title;
    }

위의 내용을 다음과 같이 바꾸십시오 :

    if ($level<=$conf['maxseclevel']) {
        $this->status['section_edit_start'] = $pos;
        $this->status['section_edit_level'] = $level;
        $this->status['section_edit_title'] = $title;
        $this->_addCall('section_edit',array($this->status['section_edit_start'], $pos-1, $this->status['section_edit_level'], $this->status['section_edit_title']), $pos);
    }

PHP 파일을 저장하고 닫은 다음 위키에서 기사를 다시로드하십시오. 해당 섹션을 편집하기 위해 모든 헤더 근처에 편집 단추가 있도록 DokuWiki를 "수정"했습니다.

이것이 도움이되기를 바랍니다.


유일한 단점은 다음과 같습니다. (1) 기사 끝에 추가 편집 버튼이 하나 있습니다. (2) 섹션을 편집하면 해당 섹션의 기사에있는 모든 위키 텍스트가 계속 표시됩니다.
Robinicks

아, 그러나 다른 문제가 있습니다 (3) 섹션을 편집하면 변경 사항을 저장할 때 해당 섹션을 복제하는 것 같습니다
Robinicks

1

렌더링이 수행되는 방식으로 인해 PHP 에서이 작업을 수행 할 수없는 것 같습니다. 섹션의 끝 범위를 알지 못하지만 페이지가 자바 스크립트로 렌더링되면 버튼을 이동할 수 있습니다.

릴리스 2016-06-26a "Elenor of Tsort"의 경우 lib / scripts / page.js를 편집하고 다음을 삽입하십시오.

/**
 * Moves the edit buttons beside the headings once it has the edit end range since we dont know it when rendering the heading in PHP.
 */
moveEditButtonsToHeadings: function(){
    jQuery('form.btn_secedit').each(function(){
    var $tgt = jQuery(this).parent(),
        $editButton = jQuery(this).parent(),
            nr = $tgt.attr('class').match(/(\s+|^)editbutton_(\d+)(\s+|$)/)[2];

        // Walk the dom tree in reverse to find the sibling which is or contains the section edit marker
        while($tgt.length > 0 && !($tgt.hasClass('sectionedit' + nr) || $tgt.find('.sectionedit' + nr).length)) {
            $tgt = $tgt.prev();
        }

        // move the edit button and adjust the styles
        $tgt.css('display', 'inline-block');
        $editButton.detach().insertAfter($tgt);
        if ($tgt.prop("tagName") == 'H1') {
            $editButton.css('marginTop', '0.4em');
        } else if ($tgt.prop("tagName") == 'H2') {
            $editButton.css('marginTop', '0.2em');
        } else {
            $editButton.css('marginTop', '0.0em');
        }
        $editButton.css('marginRight', '10px');
        $editButton.css('float', 'left');
    });
},

sectionHighlight2: function() {
    jQuery('div.secedit')
        .mouseover(function(){
            var $tgt = jQuery(this),
                $level = $tgt.next();
            $level.addClass('section_highlight');
        })
        .mouseout(function(){
            var $tgt = jQuery(this),
                $level = $tgt.next();
            $level.removeClass('section_highlight');
        });
}

init 함수를 변경하여 두 개의 새로운 함수를 호출하고 이전 섹션을 강조 표시하십시오.

init: function(){
    //dw_page.sectionHighlight();
    dw_page.moveEditButtonsToHeadings();
    dw_page.sectionHighlight2();
    jQuery('a.fn_top').mouseover(dw_page.footnoteDisplay);
    dw_page.makeToggle('#dw__toc h3','#dw__toc > div');
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.