DokuWiki - Как показать кнопки редактирования в заголовках разделов
Есть ли в DokuWiki какой-либо плагин, совместимый с последней стабильной версией (2009-02-14), который может отображать кнопки редактирования в заголовках разделов (например, Wikipedia или MediaWiki) вместо того, чтобы показывать их в конце текста раздела.
Способ по умолчанию сбивает с толку, поскольку, когда вы хотите отредактировать раздел, вы должны прокрутить до конца его содержание и нажать там кнопку редактирования.
2 ответа
Хорошо, я разобрался, как это сделать сам, и вот решение, чтобы вы могли иметь кнопки редактирования в заголовках разделов, как в Википедии.
Откройте следующий файл в текстовом редакторе.
"\ DokuWiki\ вкл \ парсер \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, чтобы иметь кнопки редактирования возле каждого заголовка, чтобы редактировать соответствующий раздел.
Надеюсь это поможет.
Это не представляется возможным сделать в PHP из-за того, как выполняется рендеринг, мы не будем знать конечный диапазон раздела, но мы можем перемещать кнопки после того, как страница будет отображена с помощью javascript.
Для выпуска 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, чтобы вызвать две новые функции и закомментировать старый sectionHighlight.
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');
}