Not logged in. · Lost password · Register
Forum: Non-English Discussion German discussion RSS
[GELÖST] Vorlage für spezielle Seiten
Avatar
roga #1
Member since Sep 2018 · 35 posts · Location: Zürich, Switzerland
Group memberships: Members
Show profile · Link to this post
Subject: [GELÖST] Vorlage für spezielle Seiten
Hallo,

ich suche nach einer Möglichkeit, eine Vorlage (ähnlich wie _template.txt oder __template.txt) zu erstellen, die aber nur auf bestimmte Seiten (z.B. Seiten die mit dem Namen inc-cli-* beginnen) angewendet wird.

Die Vorlage _template.txt wird für alle neuen Seiten im aktuellen Namespace bzw. __template.txt für alle neuen Seiten im aktuellen Namespace und darunter (vererbt) angewendet. Diese beiden Vorlagen erfüllen nicht meine Anforderungen.

Ich nutze das Plugin Include um damit ein CLI-Fenster zu simulieren. z.B.

{{page>inc-cli-052}}

Wenn dieser Code in meine Seite eingefügt wird, dann habe ich nach dem speichern der Seite die Möglichkeit, auf eine Schaltfläche (ähnlich wie die Schaltflächen für Section-Edit) zu klicken, die mir automatisch die neue Include-Datei im aktuellen Namespace erstellt.

Nun wäre es natürlich super, wenn ich für diese neue Include-Datei eine Vorlage definieren könnte, damit ich gleich den Code für die Darstellung eines CLI-Fenster integriert hätte. Das würde mir viel Arbeit ersparen.

Die Include-Datei sollte dann durch das Template ein Grundgerüst das wie folgt aussieht, vorweisen (hier werden weitere Plugin's eingebettet):

~~MULTI_PLUGIN_OPEN~~

<WRAP level3>
<WRAP cli><wrap title>Command Line Interface CLI</wrap></WRAP>
<cli prompt='#'>
root@gentoo / #
</cli>
</WRAP>
~~MULTI_PLUGIN_CLOSE~~

Ich hoffe, es ist nicht zu verwirrend, was ich hier zu Beschreiben vesuche :-)

Für einen Tipp wäre ich sehr dankbar.

Freundliche Grüsse
Roland
This post was edited 2 times, last on 2019-01-03, 22:00 by roga.
Avatar
Michaelsy #2
Member since Jun 2015 · 922 posts · Location: Düsseldorf, Germany
Group memberships: Members
Show profile · Link to this post
Ok, das ist nun also die von mir vorgeschlagene Fortsetzung dieses Threads: https://forum.dokuwiki.org/post/64142

Dort haben wir fleißig aneinander vorbeigeschrieben, da du ohne nähere Details immer von "templates" geschrieben hast. Wenn aber bei DokuWiki über Templates diskutiert wird, dann sind fast immer die Templates gemeint, die die Benutzeroberfläche von DokuWiki gestalten und ausmachen und ähnlich wie Plugins hinzugeladen werden können. Nennen wir sie Skin-Templates. Die beiden in dem besagten Thread vorgeschlagenen Plugins beziehen ausschließlich auf solche Skin-Templates. [*1]

Dir geht es aber um Page-Templates (wie ich sie hier einmal nennen möchte), also Templates für die vorformatierte Neuerstellung von Wikiseiten.

Dort kenne ich mich aber fast gar nicht aus.

[*1] Edit: Sorry, da lag ich daneben. Das Regex_template Plugin bezieht sich tatsächlich auf Page-Templates. Es ist wirklich nicht glücklich, dass in der Dokumentation immer nur von "templates" die Rede ist, obwohl es mindestens zwei verschiedene Arten gibt, die nichts miteinander zu tun haben. Damit sind solche Missverständnisse ja vorprogrammiert.
By Patreon.com a few eurons can be fed into the code phasers of
the DokuWiki engine. Besides, Andi's posts are worth reading.
This post was edited on 2019-01-01, 19:48 by Michaelsy.
Avatar
roga #3
Member since Sep 2018 · 35 posts · Location: Zürich, Switzerland
Group memberships: Members
Show profile · Link to this post
Hallo Michaelsy,

Danke für deine Antwort. Ich bin froh, das du mich jetzt besser verstanden hast. Ja, in der Tat ist es unglücklich, dass bei DokuWiki unter Templates vorwiegend die Skins gemeint sind und nicht wirklich Vorlagen im eigentlichen Sinn.

Ich muss gestehen, ich komme eingentlich von MediaWiki und bin auf DokuWiki umgestiegen, weil sich meine Users dem Wiki-Syntax im Editor nicht annehmen wollten. DokuWiki bot an dieser Stelle einen WYSIWYG-Editor der dem MS-Word sehr nah kam und meine Users konnten sich damit recht schnell anfreunden.

Nun musste ich alles von MediaWiki auf DokuWiki umkrempeln, was weitestgehend klappte. Nur in Sachen Templates, da hat MediaWiki die Nase gegenüber DokuWiki weit, weit vorne. Templates für die Skins heissen bei MediaWiki übrigens definitiv Skins, deshalb hatte ich hier auch meine Schwierigkeiten, mich Ansatzweise verständlich auszudrücken.

Das von dir vorgeschlagene Plugin Regex_Template war nach meinem Verständis her das, was ich suchte. Leider ist es nicht mehr aktuell und lässt sich offensichtlich nicht in das aktuellste DokuWiki integrieren.

Meine PHP-Kenntnisse sind leider noch zu bescheiden, als das ich mich diesem Plugin persönlich annehmen könnte. Daher wäre es ohne fremde Hilfe für mich nicht möglich, diese Plugin wieder zum fliegen zu bringen.

Falls sich hier jemand finden lässt, der sich jetzt angesprochen fühlt und gerne diese Herausforderung annehmen möchte, wäre ich darüber äusserst erfreut. :-)

Natürlich wäre ich auch über Tipps erfreut, die mir helfen würden, das Plugin Regex_Template selbst wieder zum laufen zu bringen. Ich habe keine berührungsängste mit PHP lediglich mit dem Einstieg in unbekanntes Terrain. :-)


Freundliche Grüsse
Roland
This post was edited 3 times, last on 2019-01-03, 07:30 by roga.
Avatar
roga #4
Member since Sep 2018 · 35 posts · Location: Zürich, Switzerland
Group memberships: Members
Show profile · Link to this post
PLUGIN REGEX_TEMPLATE läuft wieder !!!!

Nach ein wenig nachforschen und probieren habe ich das Plugin schliesslich wieder zum laufen gebracht. Es muss eigentlich nicht sehr viel korrigiert werden. Für den Fall, dass sich noch jemand für dieses Plugin interessiert, hier die komplette Datei action.php in angepasster Version:

<?php
/**
 * Regex Template plugin, Choose template from regex on $ID
 * @author     Cédric Villemain <cedric.villemain@dalibo.com>
 */

if(!defined('DOKU_INC')) die();

if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
require_once(DOKU_PLUGIN.'action.php');

class action_plugin_regextemplate extends DokuWiki_Action_Plugin {

  /**
   * return some info
   */
  function getInfo(){
          return confToHash(dirname(__FILE__).'/plugin.info.txt');
  }

  /**
   * register the eventhandlers
   */
  function register(Doku_Event_Handler $controller){

    $controller->register_hook('COMMON_PAGETPL_LOAD', 'BEFORE', $this, 'regex_template', array());
  }

  function regex_template(Doku_Event $event, $param) {
        global $ID;
        global $conf;
        global $INFO;
        $path = dirname(wikiFN($ID));

        if(@file_exists($path.'/_template.txt')){
          $tpl = io_readFile($path.'/_template.txt');
        }else{
          // search upper namespaces for templates
          $len = strlen(rtrim($conf['datadir'],'/'));
          while (strlen($path) >= $len){
                if(@file_exists($path.'/__template.txt')){
                  $tpl = io_readFile($path.'/__template.txt');
                  break;
                }
                $path = substr($path, 0, strrpos($path, '/'));
          }
        }

        $array_regex = (array)explode("\n",$conf['plugin']['regex_template']['reg_tpl_regex']);
        reset($array_regex);
        foreach ($array_regex as $regex) {
          list($pattern, $replacement) = explode(',', $regex);
          $my_new_ID = @preg_replace($pattern, $replacement, $event->data['id']);
          $my_new_file = wikiFN($my_new_ID);
          if(@file_exists($my_new_file)){
                $tpl = io_readFile($my_new_file);
                break;
          }
        }

        //if(!$tpl) return '';
        if($tpl) $event->data['tpl'] = $tpl;

        // replace placeholders
        $tpl = str_replace('@ID@',$ID,$tpl);
        $tpl = str_replace('@NS@',getNS($ID),$tpl);
        $tpl = str_replace('@PAGE@',strtr(noNS($ID),'_',' '),$tpl);
        $tpl = str_replace('@USER@',$_SERVER['REMOTE_USER'],$tpl);
        $tpl = str_replace('@NAME@',$INFO['userinfo']['name'],$tpl);
        $tpl = str_replace('@MAIL@',$INFO['userinfo']['mail'],$tpl);
        $tpl = str_replace('@DATE@',$conf['dformat'],$tpl);
        // we need the callback to work around strftime's char limit
        $tpl = preg_replace_callback('/%./',create_function('$m','return strftime($m[0]);'),$tpl);

        $event->result=$tpl;
        $event->preventDefault();
  }
}

An dieser Stelle noch ein Dankeschön an Michaelsy für den Tipp mit dem Plugin Regex_Template :-)

Freundliche Grüsse
Roland
This post was edited 2 times, last on 2019-01-04, 09:52 by roga.
Close Smaller – Larger + Reply to this post:
Verification code: VeriCode Please enter the word from the image into the text field below. (Type the letters only, lower case is okay.)
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Special characters:
Go to forum
Imprint
This board is powered by the Unclassified NewsBoard software, 20150713-dev, © 2003-2015 by Yves Goergen
Current time: 2019-06-17, 02:54:15 (UTC +02:00)