michaelsy Ich hatte tatsächlich versucht relativ kleinschrittig vorzugehen, aber Dein Punkt stimmt natürlich. Ich kann leider nicht mehr genau sagen, ab wann mir das Verhalten meines Plugins aufgefallen ist.
saggi Das hatte ich auch versucht, hat aber leider nicht geholfen 😕
Allerdings habe ich es jetzt geschafft, einen Workaround zu finden. Scheinbar ist nicht mein Plugin das Problem, sondern ein Mechanismus im Hintergrund, den ich wohl noch nicht richtig verstanden habe.
Ich habe ein kleines Beispiel dafür erstellt. Mit folgenden Schritten kann ich das Problem bei mir reproduzieren:
- Ich habe mir einen Plugin-Ordner namens "graphcalc" in lib/plugins angelegt. Der Ordner enthält vier Dateien, die vom Wizard für ein Syntax-Plugin erzeugt werden: README, LICENSE, plugin.info.txt sowie syntax.php (siehe Ende dieses Posts)
- Im Playground habe ich folgenden Inhalt für die Seite:
~~NOTOC~~
====== PlayGround ======
Test your stuff here:
<graphcalc>
Test
</graphcalc>
- Wenn ich auf Vorschau drücke erhalte ich "Some text", das stimmt soweit. Wenn ich auf Speichern drücke kommt ebenfalls "Some text", also alles richtig.
- Jetzt ändere ich in der syntax.php die render()-Funktion, indem ich die erste Zeile der Funktion ein- und die zweite Zeile auskommentiere. Statt des festen Strings '<p>Some text</p>' nutzt das Plugin jetzt also den Inhalt von $data.
- Ich klicke im Playground auf "Diese Seite bearbeiten" und dann auf "Vorschau": Als Ergebnis meines Plugins erscheint "Test", wie erwartet.
- Jetzt klicke ich auf Speichern - und plötzlich steht wieder "Some text" dort 🤔 Auch wenn ich Strg+F5 drücke oder alle Browser-Fenster schließe und mich neu im Wiki anmelde. Erst wenn ich die Seite nochmal bearbeite (und dabei tatsächlich etwas ändere) und dann speichere erhalte ich das richtige Ergebnis.
syntax.php: (Sorry für die grauenhafte Formatierung, ich bekomms mit der "Insert Code"-Funktion aber leider nicht anders zur Anzeige)
<?php
use \dokuwiki\plugin;
class syntax_plugin_graphcalc extends \dokuwiki\Extension\SyntaxPlugin
{
public function getType() { return 'substition'; }
public function getPType() { return 'normal'; }
public function getAllowedTypes() { return array('formatting', 'substition', 'disabled'); }
public function getSort() { return 157; }
public function connectTo($mode) { $this->Lexer->addSpecialPattern('<graphcalc>.*?</graphcalc>', $mode, 'plugin_graphcalc'); }
public function handle($match, $state, $pos, Doku_Handler $handler)
{
$lines = explode("\n", $match);
// Remove the graphcalc start and end tags
array_shift($lines);
array_pop($lines);
return $lines[0];
}
public function render($mode, Doku_Renderer $renderer, $data)
{
//$renderer->doc .= '<p>' . $data . '</p>';
$renderer->doc .= '<p>Some text</p>';
return true;
}
}
Weiß jemand was dieses Verhalten erzeugt?