あちあち情報局

趣味や日曜プログラムなどを書いています

ユーザ用ツール

サイト用ツール


サイドバー

メニュー

現在リニューアル中

トップページ

ブログ
コンテンツ
その他
連絡方法
関係者用
旧コンテンツは下部

旧コンテンツ

* ここは旧トップページ

タグ一覧

dokuwiki:tpl-edit

📝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

使用上の注意

  • 同時に複数のユーザー(プロセス)からの編集には対応していません。同時に保存するとテンプレートファイル破損する可能性があります。
  • 外部ユーザーがアクセスできるページに張り付けると誰でもテンプレートを書き換えれてしまいセキュリティー上危険ですので管理者専用のページにてご利用ください。
  • テンプレート記述を間違えるとDokuWikiが正しく表示されなくなるので事前にバックアップを行って下さい。
  • Google Chromeを使用してると、保存ボタンを押した後「このページは動作していません」と表示されますがデータは保存されています。ブラウザの戻るで戻り再表示して下さい。
  • ご利用は自己責任で。無保証。

ソースコード

~~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>
dokuwiki/tpl-edit.txt · 最終更新: 2018/12/20 07:54 by 管理者