*/ // must be run within Dokuwiki if (!defined('DOKU_INC')) die(); if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); require_once(DOKU_PLUGIN.'syntax.php'); require_once(DOKU_INC.'inc/infoutils.php'); class syntax_plugin_dnsresolver extends DokuWiki_Syntax_Plugin { // возвращаем тип плагина public function getType() { return 'substition'; } // возвращаем уникальный номер плагина public function getSort() { return 66; } // регистрация шаблона в парсере public function connectTo($mode) { $this->Lexer->addEntryPattern('', $mode, 'plugin_dnsresolver'); } public function postConnect() { $this->Lexer->addExitPattern('','plugin_dnsresolver'); } // Метод handle() создаёт инструкции отображения для собственного синтаксического состояния public function handle($match, $state, $pos, Doku_Handler &$handler) { switch ( $state ) { case DOKU_LEXER_ENTER: $data = array(); return $data; break; case DOKU_LEXER_UNMATCHED: return array('dnsname' => $match); break; case DOKU_LEXER_EXIT: $data = array(); return $data; break; } $data = array(); return $data; } // функция отображения контента public function render($mode, Doku_Renderer &$renderer, $data) { if ( $mode != 'xhtml' ) return false; global $ID; // получаем переданный параметр $dnsname = $data['dnsname']; // получаем @PAGE@ и @NS@ $PAGE = noNS($ID); $NS = getNS($ID); if ( strpos($NS, ':') ) { $NS = substr( strrchr($NS, ':'), 1); } // делаем подстановки @NS@ и @PAGE@ $dnsname = str_replace("@NS@", $NS, $dnsname); $dnsname = str_replace("@PAGE@", $PAGE, $dnsname); // resolve dns $result = dns_get_record($dnsname); // вывод подготовленных данных $content = $result[0][ip]; $renderer->doc .= $content; return true; } // function render }