1010use dokuwiki \plugin \struct \meta \AccessTable ;
1111use dokuwiki \plugin \struct \meta \Assignments ;
1212use dokuwiki \plugin \struct \meta \StructException ;
13+ use dokuwiki \Extension \Event ;
1314
1415class 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