Joomla erweitern
Upcoming SlideShare
Loading in...5
×
 

Joomla erweitern

on

  • 786 views

Joomla! erweitern - Eigene Plugins, Module und Komponenten erstellen" (Achim Fischer)

Joomla! erweitern - Eigene Plugins, Module und Komponenten erstellen" (Achim Fischer)

Statistics

Views

Total Views
786
Views on SlideShare
785
Embed Views
1

Actions

Likes
0
Downloads
1
Comments
0

1 Embed 1

http://elearning.tadelformacion.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial LicenseCC Attribution-NonCommercial License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Joomla erweitern Joomla erweitern Presentation Transcript

  • Joomla! User Group FuldaJoomla! erweitern Plugins, Module und Komponenten erstellen Achim Fischer #jugfulda
  • Web-Entwicklung (PHP, RoR, JSP)Software-Entwicklung (Java, C)Mobile Geräte (Android, WP7, iOS)Community Management (italobikes.com)Joomla! Komponenten: Discussions,Marketplace, Primezilla & Vernissage www.codingfish.com
  • Joomla!PluginsModuleKomponenten
  • Worin unterscheiden sich die 3 Typen?
  • Was sind die jeweiligen Einsatzgebiete?
  • Plugins Ereignisgesteuert wie z.B. Datenbank Trigger Beispiel:Ein Plugin das beim Anlegen eines neuen Benutzers eine Aktion ausführt
  • ModuleWerden an Modulpositionen des Templates angezeigt. Unterstützen häufig Komponenten Beispiel: Letzte 10 Einträge im Marktplatz
  • KomponentenWerden im Hauptbereich des Templates angezeigt Entsprechen Applikationen Beispiele: Diskussionsforum Kleinanzeigenmarkt
  • Plugins
  • PluginsEinklinken in SystemeventsÄndern von Systemfunktionalität ohne ändernvon Systemcode
  • Pluginsbestehen (mindestens) aus 1 XML Datei 1 PHP Datei
  • Plugins: marketplace.xml<?xml version="1.0" encoding="utf-8"?><extension version="1.6" type="plugin" group="system" method="upgrade"> <name>System - Marketplace</name> <creationDate>June 2011</creationDate> <author>Codingfish (Achim Fischer)</author> <authorEmail>info@codingfish.com</authorEmail> <authorUrl>http://www.codingfish.com</authorUrl> <copyright>All rights reserved.</copyright> <license>GPL 2</license> <version>1.5</version> <description>System Plugin for Codingfish Marketplace</description> <files> <filename plugin="marketplace">marketplace.php</filename> <filename>index.html</filename> </files> <params/> </extension>
  • Plugins: marketplace.xml<?xml version="1.0" encoding="utf-8"?><extension version="1.6" type="plugin" group="system" method="upgrade"> <name>System - Marketplace</name> <creationDate>June 2011</creationDate> <author>Codingfish (Achim Fischer)</author> <authorEmail>info@codingfish.com</authorEmail> <authorUrl>http://www.codingfish.com</authorUrl> <copyright>All rights reserved.</copyright> <license>GPL 2</license> <version>1.5</version> <description>System Plugin for Codingfish Marketplace</description> <files> <filename plugin="marketplace">marketplace.php</filename> <filename>index.html</filename> </files> <params/> </extension>
  • Plugins: GruppenEs gibt 8 Core Groups: authentication content editors editors-xtd extension search system user
  • Plugins: GruppenZu beachten:Nur jeweils 1 Plugin mit demselben Namen proGruppeEs gibt reservierte Namen in den einzelnenGruppen z.B. cache, debug, legacy, log undremember in system
  • Plugins: marketplace.php ... function onUserAfterSave( $user, $isnew, $success, $msg) { if ( $success) { if ( $isnew) { // insert // add a record to #__marketplace_users $db = JFactory::getDBO(); $sql = "INSERT INTO " . $db->nameQuote(#__marketplace_users) . " SET " . $db->nameQuote(id) . " = " . $user[id] . ", " . "username="" . $user[username] . """; $db->setQuery( $sql); $db->query(); } else { // update // update the user record in #__marketplace_users $db = JFactory::getDBO(); $sql = "UPDATE " . $db->nameQuote(#__marketplace_users) . " SET " . "username="" . $user[username] . "" " . "WHERE " . $db->nameQuote(id) . " = " . $user[id]; $db->setQuery( $sql); $db->query(); } } } ...
  • Plugins: plg_marketplace.zip marketplace.xml + marketplace.php = plg_marketplace.zip
  • Module
  • Modulebestehen (mindestens) aus 1 XML Datei 1 PHP Datei
  • Module: mod_marketplace_recentx.xml<?xml version="1.0" encoding="utf-8"?><extension version="1.6" type="module" client="site" method="upgrade"> <name>Marketplace RecentX</name> <creationDate>June 2011</creationDate> <author>Codingfish (Achim Fischer)</author> <authorEmail>info@codingfish.com</authorEmail> <authorUrl>http://www.codingfish.com</authorUrl> <copyright>All rights reserved.</copyright> <license>GPL 2</license> <version>1.2</version> <description>Module for Codingfish Marketplace. Displays recent X marketplace entries</description> <files> <filename module="mod_marketplace_recentx">mod_marketplace_recentx.php</filename> <filename>index.html</filename> </files> <config> <fields name="params"> <fieldset name="basic"> ... <field name="number" type="text" default="5" label="# of entries to show" description="How many entries do you want toshow in the recent x box?" /> ... </fieldset> </fields> </config> </extension>
  • Module: mod_marketplace_recentx.php<?php$_number = $params->get( number, 5 );$_length = $params->get( length, 25 );$_show_poweredby = $params->get( show_poweredby, 1 );$_more = $params->get( more, > );$_label = $params->get( label, 0 );$db =& JFactory::getDBO();$posts = null;if ( $_label == 0) { $query = SELECT e.id AS entryid, e.alias, e.category_id, e.image1 AS image, c.id, c.alias, c.name AS categoryname,e.headline, . CASE WHEN CHAR_LENGTH(e.alias) THEN CONCAT_WS(:, e.id, e.alias) ELSE e.id END aseslug, . CASE WHEN CHAR_LENGTH(c.alias) THEN CONCAT_WS(:, c.id, c.alias) ELSE c.id END ascslug, . DATE_FORMAT( e.date_created, "%d.%m.%Y %k:%i") AS createdate . FROM #__marketplace_entries e, #__marketplace_categories c . WHERE e.category_id=c.id AND e.published=1 AND c.published=1 . ORDER BY e.date_created DESC LIMIT . $_number;}...
  • Module: mod_marketplace_recentx.zip mod_marketplace_recentx.xml + mod_ marketplace_recentx.php = mod_ marketplace_recentx.zip
  • Module: Positionen auf der Website 1. 3. 2.
  • Komponenten
  • Komponenten: Werden im Hauptbereich des Templates angezeigt Entsprechen Applikationen/Programmen
  • Komponenten: 2 Bereiche Frontend Backend
  • Komponenten bestehen aus1 XML Datei (mindestens)Jeder Menge PHP, SQL, CSS,Javascript, Bilder, ...
  • Komponenten: marketplace.xml (Auszug) <?xml version="1.0" encoding="utf-8"?> <extension method="upgrade" type="component" version="1.6"> <name>Marketplace</name> <creationDate>October 2011</creationDate> <author>Codingfish (Achim Fischer)</author> <authorEmail>info@codingfish.com</authorEmail> <authorUrl>http://www.codingfish.com</authorUrl> <copyright>All rights reserved</copyright> <license>GPL 2</license> <version>2.2.1</version> <description>Codingfish Marketplace</description> <install> <sql> <file driver="mysql" charset="utf8">install.mysql.utf8.sql</file> <file driver="mysql">install.mysql.sql</file> </sql> </install> <uninstall> <sql> <file driver="mysql" charset="utf8">uninstall.mysql.sql</file> <file driver="mysql">uninstall.mysql.sql</file> </sql> </uninstall> <files folder="site"> <folder>assets</folder> <folder>classes</folder> <folder>includes</folder> <folder>language</folder> <folder>models</folder> <folder>views</folder> <filename>index.html</filename> <filename>marketplace.php</filename> <filename>controller.php</filename> <filename>router.php</filename> </files> ...
  • Komponenten: install.mysql.utf8.sql (Auszug) CREATE TABLE IF NOT EXISTS `#__marketplace_users` ( `id` int(11) NOT NULL, `username` varchar(150) DEFAULT , `status` tinyint(1) NOT NULL DEFAULT 0, `ads` int(11) NOT NULL DEFAULT 0, `moderator` tinyint(1) NOT NULL DEFAULT 0, `blocked` tinyint(1) NOT NULL DEFAULT 0, `firstname` varchar(255) DEFAULT NULL, `lastname` varchar(255) DEFAULT NULL, `company` varchar(255) DEFAULT NULL, `street` varchar(255) DEFAULT NULL, `zipcode` varchar(50) DEFAULT NULL, `city` varchar(255) DEFAULT NULL, `state` varchar(255) DEFAULT NULL, `country` varchar(255) DEFAULT NULL, `phone` varchar(255) DEFAULT NULL, `mobile` varchar(255) DEFAULT NULL, `email` varchar(255) DEFAULT NULL, `website` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_moderator` (`moderator`) ) DEFAULT CHARSET=utf8; ...
  • Komponenten: marketplace.php <?php // Check to ensure this file is included in Joomla! defined(_JEXEC) or die(Restricted Access); // get the controller require_once(JPATH_COMPONENT.DS.controller.php); // instantiate and execute the controller $controller = new MarketplaceController(); $controller->execute(JRequest::getCmd(task, display)); // redirect $controller->redirect();
  • Komponenten: controller.php <?php // Check to ensure this file is included in Joomla! defined(_JEXEC) or die(Restricted Access); jimport(joomla.application.component.controller); class MarketplaceController extends JController { function display() { // Set a default view if none exists if ( ! JRequest::getCmd( view ) ) { JRequest::setVar(view, index ); } // display index parent::display(); } }
  • Komponenten: index.php (Index Model, Auszug) class MarketplaceModelIndex extends JModel { ... function getCategories() { static $items; if (isset($items)) { return $items; } $db =& $this->getDBO(); $query = "SELECT c.id, c.parent_id, c.name, c.alias, c.description, c.image, c.show_image, c.published, (select count(*) from ".$db->nameQuote(#__marketplace_entries)." e WHERE e.category_id = c.id AND e.published = 1) AS counter_entries, (select DATE_FORMAT( max(date_created), %d.%m.%Y) from ".$db- >nameQuote(#__marketplace_entries)." e WHERE e.category_id = c.id AND e.published = 1) AS last_entry_date, (select user_id from ".$db->nameQuote(#__marketplace_entries)." e WHERE e.category_id = c.id AND e.published = 1 ORDER BY DATE_CREATED DESC LIMIT 1) AS last_entry_user_id, CASE WHEN CHAR_LENGTH(c.alias) THEN CONCAT_WS(:, c.id, c.alias) ELSE c.id END as slug FROM ".$db->nameQuote(#__marketplace_categories)." c WHERE c.published=1 ORDER by c.ordering ASC"; $db->setQuery( $query ); $rows = $db->loadObjectList(); $children = array (); if( count( $rows)){ foreach ( $rows as $row) { ... } // class
  • Komponenten: index.php (Index View) class MarketplaceViewIndex extends JView { function display() { $document =& JFactory::getDocument(); $categories =& $this->get(Categories); $params =& JComponentHelper::getParams(com_marketplace); $menus = &JSite::getMenu(); $menu = $menus->getActive(); if (is_object( $menu )) { $menu_params = new JParameter( $menu->params ); $pageTitle = $menu_params->get( page_title); if (!$menu_params->get( page_title)) { $params->set( page_title, JText::_( Categories ) ); } else { $params->set( page_title, $pageTitle ); } } else { $params->set( page_title, JText::_( Categories ) ); } $document->setTitle( $params->get( page_title ) ); $this->assignRef(categories, $categories); $this->assignRef(params, $params); parent::display(); } ... }
  • Komponenten: tmpl/default.php (Index Template, Auszug) foreach ( $this->categories as $category ) : ?> <tr> <?php if ( $category->show_image == 0) { // dont show category image if ( $category->parent_id == 0) { // container ?> <td align="center" class="cofiContainer"> <?php } else { ?> <td align="center"> <?php } echo "&nbsp;"; ?> </td> <?php } else { ...
  • Komponenten: Marketplace
  • Showtime
  • JED
  • Joomla! Extensions Directory extensions.joomla.org
  • ***************************
  • Kontakt achim@codingfish.com www.codingfish.comwww.facebook.com/codingfish twitter.com/codingfish
  • Vielen Dank