Skip to content

Commit b1ab837

Browse files
authored
Add an event for custom schema data rendering (#558)
In order to hook in a custom renderer for the schema data on the page we add a new event PLUGIN_STRUCT_RENDER_SCHEMA_DATA and use the current table representation as default implementation. Signed-off-by: Frieder Schrempf <dev@fris.de>
1 parent 78a3a27 commit b1ab837

File tree

1 file changed

+61
-32
lines changed

1 file changed

+61
-32
lines changed

syntax/output.php

Lines changed: 61 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use dokuwiki\plugin\struct\meta\AccessTable;
1111
use dokuwiki\plugin\struct\meta\Assignments;
1212
use dokuwiki\plugin\struct\meta\StructException;
13+
use dokuwiki\Extension\Event;
1314

1415
class syntax_plugin_struct_output extends DokuWiki_Syntax_Plugin
1516
{
@@ -122,39 +123,20 @@ public function render($format, Doku_Renderer $renderer, $data)
122123
} catch (StructException $ignored) {
123124
continue; // no such schema at this revision
124125
}
125-
$schemadata->optionSkipEmpty(true);
126-
$data = $schemadata->getData();
127-
if (!count($data)) continue;
128-
$hasdata = true;
129126

130-
$renderer->table_open();
131-
132-
$renderer->tablethead_open();
133-
$renderer->tablerow_open();
134-
$renderer->tableheader_open(2);
135-
$renderer->cdata($schemadata->getSchema()->getTranslatedLabel());
136-
$renderer->tableheader_close();
137-
$renderer->tablerow_close();
138-
$renderer->tablethead_close();
139-
140-
$renderer->tabletbody_open();
141-
foreach ($data as $field) {
142-
$renderer->tablerow_open();
143-
$renderer->tableheader_open();
144-
$renderer->cdata($field->getColumn()->getTranslatedLabel());
145-
$renderer->tableheader_close();
146-
$renderer->tablecell_open();
147-
if ($format == 'xhtml') {
148-
$renderer->doc = substr($renderer->doc, 0, -1) .
149-
' data-struct="' . hsc($field->getColumn()->getFullQualifiedLabel()) .
150-
'">';
151-
}
152-
$field->render($renderer, $format);
153-
$renderer->tablecell_close();
154-
$renderer->tablerow_close();
155-
}
156-
$renderer->tabletbody_close();
157-
$renderer->table_close();
127+
$rendercontext = array(
128+
'renderer' => $renderer,
129+
'format' => $format,
130+
'meta' => p_get_metadata($ID),
131+
'schemadata' => $schemadata,
132+
'hasdata' => &$hasdata
133+
);
134+
135+
Event::createAndTrigger(
136+
'PLUGIN_STRUCT_RENDER_SCHEMA_DATA',
137+
$rendercontext,
138+
array($this, 'renderSchemaData')
139+
);
158140
}
159141

160142
if ($format == 'xhtml') $renderer->doc .= self::XHTML_CLOSE;
@@ -166,6 +148,53 @@ public function render($format, Doku_Renderer $renderer, $data)
166148

167149
return true;
168150
}
151+
152+
/**
153+
* Default schema data rendering (simple table view)
154+
*
155+
* @param array The render context including renderer and data
156+
*/
157+
public function renderSchemaData($rendercontext)
158+
{
159+
$schemadata = $rendercontext['schemadata'];
160+
$renderer = $rendercontext['renderer'];
161+
$format = $rendercontext['format'];
162+
163+
$schemadata->optionSkipEmpty(true);
164+
$data = $schemadata->getData();
165+
if (!count($data))
166+
return;
167+
168+
$rendercontext['hasdata'] = true;
169+
170+
$renderer->table_open();
171+
$renderer->tablethead_open();
172+
$renderer->tablerow_open();
173+
$renderer->tableheader_open(2);
174+
$renderer->cdata($schemadata->getSchema()->getTranslatedLabel());
175+
$renderer->tableheader_close();
176+
$renderer->tablerow_close();
177+
$renderer->tablethead_close();
178+
179+
$renderer->tabletbody_open();
180+
foreach ($data as $field) {
181+
$renderer->tablerow_open();
182+
$renderer->tableheader_open();
183+
$renderer->cdata($field->getColumn()->getTranslatedLabel());
184+
$renderer->tableheader_close();
185+
$renderer->tablecell_open();
186+
if ($format == 'xhtml') {
187+
$renderer->doc = substr($renderer->doc, 0, -1) .
188+
' data-struct="' . hsc($field->getColumn()->getFullQualifiedLabel()) .
189+
'">';
190+
}
191+
$field->render($renderer, $format);
192+
$renderer->tablecell_close();
193+
$renderer->tablerow_close();
194+
}
195+
$renderer->tabletbody_close();
196+
$renderer->table_close();
197+
}
169198
}
170199

171200
// vim:ts=4:sw=4:et:

0 commit comments

Comments
 (0)