summaryrefslogtreecommitdiff
path: root/platform/www/lib/plugins/tag/syntax/tagpage.php
diff options
context:
space:
mode:
Diffstat (limited to 'platform/www/lib/plugins/tag/syntax/tagpage.php')
-rw-r--r--platform/www/lib/plugins/tag/syntax/tagpage.php90
1 files changed, 90 insertions, 0 deletions
diff --git a/platform/www/lib/plugins/tag/syntax/tagpage.php b/platform/www/lib/plugins/tag/syntax/tagpage.php
new file mode 100644
index 0000000..bec2e70
--- /dev/null
+++ b/platform/www/lib/plugins/tag/syntax/tagpage.php
@@ -0,0 +1,90 @@
+<?php
+/**
+ * Tag Plugin: Display a link to the listing of all pages with a certain tag.
+ *
+ * Usage: {{tagpage>mytag[&dynamic][|title]}}
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Matthias Schulte <dokuwiki@lupo49.de>
+ */
+
+/** Tagpage syntax, allows to link to a given tag */
+class syntax_plugin_tag_tagpage extends DokuWiki_Syntax_Plugin {
+
+ /**
+ * @return string Syntax type
+ */
+ function getType() {
+ return 'substition';
+ }
+
+ /**
+ * @return int Sort order
+ */
+ function getSort() {
+ return 305;
+ }
+
+ /**
+ * @return string Paragraph type
+ */
+ function getPType() {
+ return 'normal';
+ }
+
+ /**
+ * @param string $mode Parser mode
+ */
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('\{\{tagpage>.*?\}\}', $mode, 'plugin_tag_tagpage');
+ }
+
+ /**
+ * Handle matches of the count syntax
+ *
+ * @param string $match The match of the syntax
+ * @param int $state The state of the handler
+ * @param int $pos The position in the document
+ * @param Doku_Handler $handler The handler
+ * @return array Data for the renderer
+ */
+ function handle($match, $state, $pos, Doku_Handler $handler) {
+ $params = array();
+ $dump = trim(substr($match, 10, -2)); // get given tag
+ $dump = explode('|', $dump, 2); // split to tags, link name and options
+ $params['title'] = $dump[1];
+ $dump = explode('&', $dump[0]);
+ $params['dynamic'] = ($dump[1] == 'dynamic');
+ $params['tag'] = trim($dump[0]);
+
+ return $params;
+ }
+
+ /**
+ * Render xhtml output
+ *
+ * @param string $mode Renderer mode (supported modes: xhtml)
+ * @param Doku_Renderer $renderer The renderer
+ * @param array $data The data from the handler function
+ * @return bool If rendering was successful.
+ */
+ function render($mode, Doku_Renderer $renderer, $data) {
+ if($data == false) return false;
+
+ if($mode == "xhtml") {
+ if($data['dynamic']) {
+ // deactivate (renderer) cache as long as there is no proper cache handling
+ // implemented for the count syntax
+ $renderer->nocache();
+ }
+
+ /** @var helper_plugin_tag $my */
+ if(!($my = $this->loadHelper('tag'))) return false;
+
+ $renderer->doc .= $my->tagLink($data['tag'], $data['title'], $data['dynamic']);
+ return true;
+ }
+ return false;
+ }
+}
+// vim:ts=4:sw=4:et: