Navigation erweitern
Das Menü auf der Linken Seite des Administrationsbereiches wird aus der Tabelle _acl_nav generiert.
Der Parameter Wert des Feldes "url_i" und "text" bestimmt hierbei was anzeigt werden soll: "&plugin=my_plugin" würde im Plugin "my_plugin" (text) die Datei "class.my_plugin.php" (text) einbinden und die Klasse "my_plugin" ($_GET['plugin']) laden.
Per default wird ein Grid angezeigt, d.h. eine Tabelle mit Werten, die aus einer Tabelle gebildet werden:
Beispiel:
Installations XML-Datei in /plugins/xt_testplugin/installer/
<?xml version="1.0" encoding="utf8"?> <xtcommerceplugin> <title>xt_testplugin</title> <version>1.0.0</version> <code>xt_testplugin</code> <url>http://www.xt-commerce.com</url> <description></description> <type>marketing</type> <icon>xt-commerce_logo.jpg</icon> <db_install><![CDATA[ include _SRV_WEBROOT . _SRV_WEB_PLUGINS . 'xt_testplugin/hooks/db_install.php'; ]]></db_install> <db_uninstall> <![CDATA[ include _SRV_WEBROOT . _SRV_WEB_PLUGINS . 'xt_testplugin/hooks/db_uninstall.php'; ]]> </db_uninstall> <plugin_code> <code> <hook>page_registry.php:bottom</hook> <phpcode><![CDATA[ require_once _SRV_WEBROOT.'plugins/xt_testplugin/hooks/page_registry_php_bottom.php'; ]]></phpcode> <order>1</order> <active>1</active> </code> </plugin_code> <configuration/> </xtcommerceplugin>
PHP-Script, welches zur Installation ausgeführt wird. ( /plugins/xt_testplugin/hooks/db_install.php - Siehe Installationsdatei "db_install")
<?php defined('_VALID_CALL') or die('Direct Access is not allowed.'); // Menü Eintrag anlegen $db->Execute("INSERT INTO ".TABLE_ADMIN_NAVIGATION." (`pid` ,`text` ,`icon` ,`url_i` ,`url_d` ,`sortorder` ,`parent` ,`type` ,`navtype`) VALUES (NULL , 'xt_testplugin', 'images/icons/user_comment.png', '&plugin=xt_testplugin', 'adminHandler.php', '4000', 'shop', 'I', 'W');"); // Tabelle anlegen $db->Execute("CREATE TABLE IF NOT EXISTS `".DB_PREFIX."_testplugin` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(32) DEFAULT NULL, `value` varchar(32) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;"); // Test Datensätze: $db->Execute("INSERT INTO `".DB_PREFIX."_testplugin` (`id`, `name`, `value`) VALUES (1, 'test123', 'value 123'), (2, 'test 345', 'value 345');");
Der Ordnung halber definieren wir eine Konstante für den Tabellennamen in page_registry.php:bottom ( /plugins/xt_testplugin/hooks/page_registry_php_bottom.php - Siehe Installationsdatei "page_registry.php:bottom")
<?php defined('_VALID_CALL') or die('Direct Access is not allowed.'); // Tabellenname per Konstante verfügbar machen define('TABLE_TEST_PLUGIN', DB_PREFIX.'_testplugin');
Diese Klasse wird automatisch im Backend inkludiert und beim Klick auf den Menüpunkt ausgeführt:
( /plugins/xt_testplugin/classes/class.xt_testplugin.php )
<?php defined('_VALID_CALL') or die('Direct Access is not allowed.'); class xt_testplugin extends default_table { public $_table = TABLE_TEST_PLUGIN; public $_master_key = 'id'; function _getParams() { $params = array(); $params['header'] = $header; $params['master_key'] = $this->_master_key; $params['default_sort'] = $this->_master_key; // Sortierung der Adminliste nach Feld tag_id $params['SortField'] = 'id'; // Absteigende Sortierung (neuester Eintrag zuerst) $params['SortDir'] = 'DESC'; return $params; } }
Warum "extends default_table"?
Damit eine Seite als Grid im Backend angezeigt werden kann, müssen die Funktionen _getParams(), _get(), _set(), _setStatus(), _unset() und setPosition() in der Klasse, die automatisch geladen wird, definiert sein. Für dieses Beispiel war dies natürlich nicht unbedingt notwendig, da für eine einfache Liste das extenden ausreichend ist. Sollten Sie komplexere Listen (z.B. Daten aus mehreren Tabellen) erstellen wollen, müssen die Funktionen ggf. editiert werden.
Die Datei \plugins\xt_reviews\classes\class.xt_reviews.php bzw. das Plugin xt_reviews liefert Ihnen hier ein ideales Beispiel, das Sie sich genauer anschauen sollten.