Chování Admineru a především Editoru lze přizpůsobit pomocí vlastního objektu, který může obsahovat celou řadu metod, které se volají na mnoha různých místech. Výchozí chování těchto metod je definované a vlastní objekt je může přepsat nebo rozšířit. Ukázkové rozšíření Editoru vypadá takto:
<?php function adminer_object() { class AdminerCds extends Adminer { function name() { return 'CDs'; } function credentials() { return array('localhost', 'ODBC', ''); } function database() { return 'adminer_test'; } function login($login, $password) { return ($login == 'admin'); } function tableName($tableStatus) { return h($tableStatus["Comment"]); } function fieldName($field, $order = 0) { return ($order <= 5 ? h($field["comment"]) : ""); } } return new AdminerCds; } include "./editor.php"; ?>
Přestože obsahuje jenom několik jednořádkových metod, mění chování poměrně zásadním způsobem:
Z dokumentačních komentářů metod je vygenerovaná dokumentace. Nepoužil jsem phpDocumentor, ale vlastní jednoduchý skript:
<?php $path = "http://github.com/vrana/adminer/blob/v3.0.0/adminer/"; $filename = "include/adminer.inc.php"; $tokens = array(); $line = 1; $lines = array(); foreach (token_get_all(file_get_contents($filename)) as $token) { if ($token[0] !== T_WHITESPACE) { $tokens[] = $token; $lines[] = $line; } if (is_array($token)) { $line += substr_count($token[1], "\n"); } } echo "<ul lang='en'>\n"; for ($i=0; $i < count($tokens); $i++) { $token = $tokens[$i]; if ($token[0] === T_DOC_COMMENT && $tokens[$i+1][0] === T_FUNCTION) { $comment = $token[1]; echo "<li>"; if (preg_match('~^\\s*\\*\\s*@return\\s+(\\S+)(.*)~m', $comment, $match)) { $returns = htmlspecialchars($match[1]); echo (trim($match[2]) ? '<abbr title="' . htmlspecialchars(trim($match[2])) . '">' . $returns . '</abbr>' : $returns); } echo " <a href='$path$filename#L$lines[$i]'>" . htmlspecialchars($tokens[$i+2][1]) . "</a>("; preg_match_all('~^\\s*\\*\\s*@param\\s+(\\S+)(.*)~m', $comment, $params, PREG_SET_ORDER); $param = 0; for ($i += 4; $tokens[$i] !== ')'; $i++) { if ($tokens[$i][0] === T_VARIABLE) { if ($tokens[$i+1] === '=') { $params[$param][2] .= " [" . $tokens[$i+2][1] . "]"; //! can be array() } echo ($param ? ", " : "") . htmlspecialchars($params[$param][1]) . ' ' . (strlen(trim($params[$param][2])) ? '<abbr title="' . htmlspecialchars(trim($params[$param][2])) . '">' . htmlspecialchars($tokens[$i][1]) . '</abbr>' : htmlspecialchars($tokens[$i][1])); //! reference $param++; } } echo ")" . (preg_match('~^/\\*\\* *(.+)~', $comment, $match) ? " - " . htmlspecialchars($match[1]) : "") . "</li>\n"; } } echo "</ul>\n"; ?>
Diskuse je zrušena z důvodu spamu.