The document discusses developing a Joomla component using Rapid Application Development (RAD). It describes creating a basic component backend with entries, views, SQL definitions and other files. It then covers adding features like language files, publishing status, ordering and categories. The overall goal is to demonstrate how to quickly develop a Joomla component to manage locations and display them on a map.
2. Joomladagen 2014Joomladagen 2014
Peter Martin
● Joomla website specialist
Marketing + Communicatie
achtergrond & technische
affiniteit
● Vrijwilliger Joomla:
● Global Moderator
● Community Leadership
Team
● Open Coffee Nijmegen
● Linux User Group Nijmegen
Interesses:
● Open Source Software
● Linux sinds 2007
(Ubuntu → Debian → Arch
Linux → Debian)
● Raspberry Pi
● Muziek (Vinyl)
● Filmhuisfilms
Website: www.db8.nl – e-mail: peter@db8.nl
LinkedIn: http://www.linkedin.com/in/pe7er – Twitter: @pe7er
4. Joomladagen 2014Joomladagen 2014
a) Introductie
● Eigen webapplicatie: alles zelf programmeren
● PHP/MySQL/HTML/CSS/JavaScript
● Joomla component: Joomla = Framework
● Gegevens in/uit database – Database object
● Layout – Template
● Rechtenbeheer – Access Control List (ACL)
● MVC → template overrides mogelijk
● Plugins laten ingrijpen op eigen component
5. Joomladagen 2014Joomladagen 2014
a) Functionaliteit component back-end
● Lijst van categorieën
● Toon lijst van categorieën
● New / Edit één categorie
● Delete categorie(ën)
● Publish/unpublish
categorie(ën)
● Formulier van één categorie
● Toon formulier van één
categorie
● Save één categorie
● Lijst van items
● Toon lijst van items
● New / Edit één item
● Delete item(s)
● Publish/unpublish item(s)
● Formulier van één item
● Toon formulier van één item
● Save één item
6. Joomladagen 2014Joomladagen 2014
a) Functionaliteit component front-end
● Toon lijst van categorieën
● Toon details één categorie
● Toon lijst van items
● Toom één item
12. Joomladagen 2014Joomladagen 2014
c) Joomla Component met RAD
● Werkomgeving
● Lokale webomgeving (LAMP/XAMP/MAMP) +
phpMyAdmin
● Joomla 3.2.x installatie
● Git (software versie beheer) + github.com
● IDE voor PHP (Netbeans/Eclipse/”weapon of choice”)
13. Joomladagen 2014Joomladagen 2014
“db8 locate” component
Doel: Locaties beheren en op Google Map tonen
● Naam: “db8 Locate”
● Componentnaam: com_db8locate
● Database tabelnaam: #__db8locate_items
29. Joomladagen 2014Joomladagen 2014
2. taalbestand
sys.ini → kort systeem taalbestand voor gebruik door Joomla
Plaats in /language/ map van db8locate component!
/administrator/components/com_db8locate/
language/en-GB/en-GB.com_db8locate.sys.ini
●
COM_DB8LOCATE="db8 Locate"
COM_DB8LOCATE_XML_DESCRIPTION="Component to
manage and display locations on a Google Map"
30. Joomladagen 2014Joomladagen 2014
2. taalbestand
.ini → taalbestand voor gebruik in com_db8locate
Plaats in /language/ map in component!
/administrator/components/com_db8locate/
language/en-GB/en-GB.com_db8locate.ini
TIP: “Debug Language” & verzamel “vertaal labels”
COM_DB8LOCATE="db8 Locate"
COM_DB8LOCATE_TITLE_ITEMS="Location Items"
COM_DB8LOCATE_COMMON_NORECORDS="No Location Items"
COM_DB8LOCATE_TITLE_ITEMS_EDIT="Edit Location Items"
COM_DB8LOCATE_LOCATION_ITEM_EDIT="Location Items"
COM_DB8LOCATE_LBL_ITEM_SAVED="Location Item saved"
COM_DB8LOCATE_CONFIRM_DELETE="Delete Location Item?"
50. Joomladagen 2014Joomladagen 2014
5. categorieën – toolbar in Category
ManagerIn Category Manager voor jouw component, knoppen om terug naar
Items van component te gaan:
/administrator/components/com_db8locate/helpers/db8locate.php
●<?php
●defined('_JEXEC') or die();
●
●/**
● * Helper to display db8 locate component submenus in com_categories
● */
●abstract class Db8locateHelper {
●
● public static function addSubmenu($submenu) {
JsubMenuHelper::addEntry(JText::_(
'COM_DB8LOCATE_TITLE_ITEMS'),
'index.php?option=com_db8locate', $submenu == 'locations');
JsubMenuHelper::addEntry(JText::_(
'COM_DB8LOCATE_SUBMENU_CATEGORIES'),
'index.php?option=com_categories&view=categories
&extension=com_db8locate', $submenu == 'categories');
● }
●}
51. Joomladagen 2014Joomladagen 2014
5. categorieën – Category Manager
Klik op “Location Categories”, Resultaat:
Warning: Invalid argument supplied for foreach() in
/var/www/rad/libraries/cms/helper/content.php on line
121
65. Joomladagen 2014Joomladagen 2014
9. “magic fields”
● Nu in component:
enabled (“state”), ordering,
● Ook nog toevoegen aan database:
created_by, created_on(“created”),
modified_by, modified_on(“modified”),
locked_by(“checked_out”),
locked_on(“checked_out_time”),
hits
● In lijstweergave: created_by & created_on
● In formulierweergave: alle velden
69. Joomladagen 2014Joomladagen 2014
10. tags
Helaas... werkt niet... bug in Joomla t/m versie 3.2.3:
Gebruik van com_tags alleen mogelijk
indien het component JTable gebruikt.
73. Joomladagen 2014Joomladagen 2014
11. db8locate – verdere verbeteringen
● Nieuw SQL installatie script:
/administrator/components/com_db8locate/sql/install/mysql/install.sql
● Indien “verplichte velden” niet ingevuld zijn, resulteert “save” in
wissen van nog niet opgeslagen velden...
● Edit formulier wordt te lang → in kolommen indelen
/administrator/components/com_db8locate/views/item/tmpl/form.form.xml
81. Joomladagen 2014Joomladagen 2014
13. meer views
Combineren van XML & PHP
/components/com_db8locate/views/items/tmpl/default.php
en dan form.default.xml ophalen
Bijv om te mixen met Google Maps
<?php
$viewTemplate = $this->getRenderedForm();
echo $viewTemplate;
?>
85. Joomladagen 2014Joomladagen 2014
Fouten
● Lastiger op te sporen dan bij “gewoon” component!
● Cache!!
● Debuggen
● Bijv back-end error:
“An error has occurred. 1064 You have an error in your SQL syntax; check the manual that corresponds to
your MySQL server version for the right syntax to use near 'ORDER BY node.lft' at line 4 SQL=SELECT
node.id FROM jos_categories AS node, jos_categories AS parent WHERE node.lft BETWEEN parent.lft
AND parent.rgt AND parent.id = ORDER BY node.lft”
kan worden veroorzaakt door fout in front-end!
Test: Front-end com_db8locate tijdelijk even hernoemen
● Front-end error:
Notice: Undefined variable: form_class in /var/www/rad/libraries/fof/render/strapper.php on line 676
Test: .xml files stapsgewijs geheel opnieuw opbouwen
● print_r($object) / echo $query / die(“stop hier”)
● XDebug?