目次

📝DokuWikiテンプレート編集用PHP

DokuwikiにはWeb側からテンプレートを編集できる機能が無いので、編集機能をPHPで作って見ました。


使い方

DokuWikiのサイト設定の「PHP埋め込み」と「HTML埋め込み」を有効にして、下記のソースコードをDokuWikiのページに張り付けるだけです。(編集するテンプレートにより一部が書き換えが必要:下記参照)

貼り付けたページを表示するとテンプレートの内容がフォームに表示されるので編集して保存ボタンを押すとテンプレートが更新されます。

更新してもキャッシュが有効になっていると即座に反映されません、管理のサイト設定を保存するとキャッシュがクリアされます。(それが面倒なら文中の「touch ('./conf/local.php');」のファイルパスを確認してコメント化を解除してください。キャッシュのタイムスタンプを更新してキャッシュをクリアします)

DokuWikiのテンプレートは複数に分かれているためソースコード中の「編集するファイル名」の部分を編集したいテンプレートのファイル名に書き直して下さい。

標準テンプレートメイン
./lib/tpl/dokuwiki/main.php
標準テンプレートメディア
./lib/tpl/dokuwiki/mediamanager.php
標準テンプレート画像詳細
./lib/tpl/dokuwiki/detail.php
標準テンプレートヘッダ部
./lib/tpl/dokuwiki/tpl_header.php
標準テンプレートフッター部
./lib/tpl/dokuwiki/tpl_footer.php

使用上の注意

ソースコード

~~NOCACHE~~
<html>
<style>
.textareaset{width:100%;height:300px}
</style>
</html>
<php>
//編集するファイル名
$fileName="./lib/tpl/dokuwiki/main.php";
 
//ファイルを開く
$fileText=file_get_contents($fileName);
 
//保存分岐
if($_POST['save']){
  if (md5($fileText)===$_POST['save']){
    //保存処理
    $fileText=$_POST['data'];
    file_put_contents($fileName,$fileText);
    //※キャッシュファイルのタイムスタンプを更新
    //touch ('./conf/local.php');
    echo '<p>保存成功</p>';
  }else{
    //保存失敗
    echo '<p>保存失敗</p>';
  }
}
 
//PHPのURL
$url= (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
//無害化
$url=urlencode($url);
$fileText=htmlspecialchars($fileText, ENT_QUOTES);
 
//編集フォームの表示
echo '<form action="'.$url.'" method="post">';
echo '<input type="hidden" name="save" value="'.md5($fileText).'">';
echo '<textarea class="textareaset" name="data">'.$fileText.'</textarea>';
echo '<input type="submit" value="保存">';
echo '</form>';
</php>