SlideShare une entreprise Scribd logo
1  sur  89
Joomla 3 Component
programmeren
met RAD
Peter Martin, www.db8.nl. twitter: @pe7er
Joomladagen.nl/2014 – 22+23 maart 2014
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
Joomladagen 2014Joomladagen 2014
Overzicht Presentatie
>>> Sheets via: www.db8.nl <<<
a)Introductie
b)Rapid Application Development (RAD)
c)Joomla Component: db8locate
d)Fouten repareren
e)Vragen?
>>> Component via: https://github.com/pe7er/db8locate <<<
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
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
Joomladagen 2014Joomladagen 2014
a) Functionaliteit component front-end
● Toon lijst van categorieën
● Toon details één categorie
● Toon lijst van items
● Toom één item
Joomladagen 2014Joomladagen 2014
b) Rapid Application Development (RAD)
Joomladagen 2014Joomladagen 2014
● Veel voorkomende functionaliteit code abstraheren
● Conventies
● Don’t Repeat Yourself (DRY)
● Nooku Framework ('Koowa') – Johan Janssens
● Joomlatools extensies (DOCman), Anahita
● Framework on Framework – Nicholas Dionysopoulos
● Basis van Akeeba Backup, Admin Tools etc
b) Software Development Framework
Joomladagen 2014Joomladagen 2014
Rapid Application Development (RAD)
● RAD = Framework on Framework (sinds Joomla 3.2)
● Niet stand-alone maar uitbreiding van Joomla! Platform
Gebruikt Joomla's MVC classes (uitbreidingen) & lijkt op
Joomla's MVC API
● Backwards compatibile
● Minder code → sneller ontwikkelen & minder bugs
● Convention over configuration -> FOF conventies mbt
naamgeving van functies / veldnamen in tabellen ->
automatisch functionaliteit
● Bootstrap, jQuery, JSON
● Hierarchical MVC (HMCV) - toon component views op
andere plaatsen (andere views, componenten, modules)
Joomladagen 2014Joomladagen 2014
1. basis component (back-end)
1.Entry point
/administrator/components/com_db8locate/db8locate.php
2.Dispatcher
/administrator/components/com_db8locate/fof.xml
3.SQL definitie van database tabel(len)
/administrator/components/com_db8locate/sql/install/mysql/install.sql
4.XML installatie manifest
/administrator/components/com_db8locate/db8locate.xml
5.View: lijst
/administrator/components/com_db8locate/views/items/tmpl/form.default.xml
6.View: formulier
/administrator/components/com_db8locate/views/item/tmpl/form.form.xml
7.Taalbestanden
/administrator/components/com_db8locate/language/en-GB/
en-GB.com_db8locate.sys.ini + en-GB.com_db8locate.ini
Joomladagen 2014Joomladagen 2014
c) Joomla Component met RAD
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”)
Joomladagen 2014Joomladagen 2014
“db8 locate” component
Doel: Locaties beheren en op Google Map tonen
● Naam: “db8 Locate”
● Componentnaam: com_db8locate
● Database tabelnaam: #__db8locate_items
Joomladagen 2014Joomladagen 2014
1. basis component (back-end)
Joomladagen 2014Joomladagen 2014
1. basis component (back-end)
1.Entry point
/administrator/components/com_db8locate/db8locate.php
2.Dispatcher
/administrator/components/com_db8locate/fof.xml
3.SQL definitie van database tabel(len)
/administrator/components/com_db8locate/sql/install/mysql/install.sql
4.XML installatie manifest
/administrator/components/com_db8locate/db8locate.xml
5.View: lijst
/administrator/components/com_db8locate/views/items/tmpl/form.default.xml
6.View: formulier
/administrator/components/com_db8locate/views/item/tmpl/form.form.xml
Joomladagen 2014Joomladagen 2014
1.1 basis component – entry point
/administrator/components/com_db8locate/db8locate.php
<?php
defined('_JEXEC') or die();
// Load FOF
include_once JPATH_LIBRARIES.'/fof/include.php';
// Quit if FOF is not installed
if(!defined('FOF_INCLUDED')) {
JError::raiseError ('500', 'FOF is not installed');
}
FOFDispatcher::getTmpInstance('com_db8locate')->dispatch();
Joomladagen 2014Joomladagen 2014
1.2 basis component – fof
dispatcher/administrator/components/com_db8locate/fof.xml
●<?xml version="1.0" encoding="UTF-8"?>
●<fof>
● <backend>
● <dispatcher>
● <option name="default_view">items</option>
</dispatcher>
● </backend>
●</fof>
Joomladagen 2014Joomladagen 2014
1.3 basis component – SQL definitie
● Maak SQL installatie bestand:
/administrator/components/com_db8locate/
sql/install/mysql/install.sql
install.sql bevat:
● CREATE TABLE, tabelnaam in meervoud:
#__db8locate_items
● ID field, veldnaam in enkelvoud:
componentnaam_enkelvoud-view_id:
db8locate_item_id (in Joomla: “id”)
● title
● PRIMARY KEY (`db8locate_item_id`) = ID field
Joomladagen 2014Joomladagen 2014
1.3 basis component – SQL definitie
/
administrator/components/com_db8locate/sql/install/mysql/install.sql
CREATE TABLE IF NOT EXISTS `#__db8locate_items` (
● `db8locate_item_id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
● `title` varchar(255) NOT NULL,
● PRIMARY KEY (`db8locate_item_id`)
●) DEFAULT CHARSET=utf8;
Joomladagen 2014Joomladagen 2014
1.4 basis component – XML manifest
1/2
/administrator/components/com_db8locate/db8locate.xml
<?xml version="1.0" encoding="utf-8"?>
<extension version="3.2" type="component" method="upgrade">
<name>db8 locate</name>
<author>Peter Martin</author>
<creationDate>23 March 2014</creationDate>
<copyright>Copyright (C) 2014 Peter Martin / db8.nl</copyright>
<license>GNU General Public License version 2</license>
<authorEmail>joomla@db8.nl</authorEmail>
<version>1.0.1</version>
<description>Component to manage and display locations on a Google Map</description>
<!-- SQL query files to execute on installation -->
<install>
● <sql>
● <file driver="mysql" charset="utf8">sql/install/mysql/install.sql</file>
● <file driver="mysql">sql/install/mysql/install.sql</file>
●
● <file driver="mysqli" charset="utf8">sql/install/mysql/install.sql</file>
● <file driver="mysqli">sql/install/mysql/install.sql</file>
● </sql>
● </install>
Joomladagen 2014Joomladagen 2014
1.4 basis component – XML manifest
2/2
/administrator/components/com_db8locate/db8locate.xml
<!-- Administrator back-end section -->
<administration>
<!-- Administration menu -->
<menu view="cpanel">COM_DB8LOCATE</menu>
<!-- Back-end files -->
<files folder="backend">
<folder>sql</folder>
<filename>db8locate.php</filename>
<filename>fof.xml</filename>
</files>
</administration>
</extension>
Joomladagen 2014Joomladagen 2014
1.5 basis component – view lijst
/administrator/components/com_db8locate/views/items/tmpl/form.default.xml
<?xml version="1.0" encoding="UTF-8"?>
●
●<form type="browse"
● show_header="1"
● show_filters="1"
● show_pagination="1"
● norows_placeholder="COM_DB8LOCATE_COMMON_NORECORDS">
●
● <headerset>
● <header name="db8locate_item_id" type="rowselect" tdwidth="20" />
● <header name="title" type="fieldsearchable" sortable="true"
buttons="yes" buttonclass="btn" />
● </headerset>
●
● <fieldset name="items">
● <field name="db8locate_item_id" show_id="true" type="selectrow"/>
● <field name="title" type="text" show_link="true" url="index.php?option=com_db8locate
&amp;view=item&amp;id=[ITEM:ID]" empty_replacement="(no title)" />
● </fieldset>
●
●</form>
Joomladagen 2014Joomladagen 2014
1.6 basis component – view formulier
/administrator/components/com_db8locate/views/item/tmpl/form.form.xml
<?xml version="1.0" encoding="UTF-8"?>
●
●<form validate="true" serverside_validate="true">
●
● <fieldset name="basic_configuration"
● label="COM_DB8LOCATE_LOCATION_ITEM_EDIT"
●
description="COM_DB8LOCATE_LOCATION_ITEM_EDIT_BASIC_DESC"
● class="span4">
●
● <field name="title" type="text"
● class="inputbox"
● label="JGLOBAL_TITLE"
● required="true"
● Size="50" />
● </fieldset>
●</form>
Joomladagen 2014Joomladagen 2014
1. basis component – installatie
Via Extensions > Extension Manager > Discover
Joomladagen 2014Joomladagen 2014
1. basis component (back-end)
● Lijst weergave
Joomladagen 2014Joomladagen 2014
1. basis component (back-end)
● Formulier weergave
Joomladagen 2014Joomladagen 2014
1. basis component (back-end)
● Lijstweergave na paar keer new & save
Joomladagen 2014Joomladagen 2014
2. taalbestand
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"
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?"
Joomladagen 2014Joomladagen 2014
2. taalbestand
Joomladagen 2014Joomladagen 2014
3. aan/uitzetten
Joomladagen 2014Joomladagen 2014
3. aan/uitzetten – database veld
Veld “enabled” aan databasetabel toevoegen om
publicatiestatus op te slaan.
ALTER TABLE `#__db8locate_items` ADD `enabled`
TINYINT( 3 ) NOT NULL DEFAULT '1';
Joomladagen 2014Joomladagen 2014
3. aan/uitzetten – lijst
/administrator/components/com_db8locate/views/items/tmpl/form.default.xml
Aan <headerset> toevoegen:
●
<header name="enabled" type="published" sortable="true"
tdwidth="8%" />
●
●Aan <fieldset name="items"> toevoegen:
● <field name="enabled" type="published"/>
●
Joomladagen 2014Joomladagen 2014
3. aan/uitzetten
Joomladagen 2014Joomladagen 2014
3. aan/uitzetten – formulier
/administrator/components/com_db8locate/views/item/tmpl/form.form.xml
Aan <fieldset> toevoegen:
●
<field name="enabled" type="list" label="JSTATUS"
● labelclass="todo-label"
● class="inputbox"
● filter="intval" size="1" default="1" >
● <option value="1">JPUBLISHED</option>
● <option value="0">JUNPUBLISHED</option>
●</field>
●
Joomladagen 2014Joomladagen 2014
3. aan/uitzetten – formulier
Joomladagen 2014Joomladagen 2014
4. volgorde
Joomladagen 2014Joomladagen 2014
4. volgorde – database veld
Veld “ordering” aan databasetabel toevoegen om volgorde op te
slaan.
ALTER TABLE `#__db8locate_items` ADD `ordering`
INT( 11 ) NOT NULL DEFAULT '0';
Joomladagen 2014Joomladagen 2014
4. volgorde – lijst
/administrator/components/com_db8locate/views/items/tmpl/form.default.xml
Aan <headerset> toevoegen:
●
<header name="ordering" type="ordering"
sortable="true" tdwidth="10%" />
●
●Aan <fieldset name="items"> toevoegen:
●
<field name="ordering" type="ordering" labelclass="order"/>
●
●
Joomladagen 2014Joomladagen 2014
4. volgorde
Joomladagen 2014Joomladagen 2014
5. categorieën
Joomladagen 2014Joomladagen 2014
5. categorieën – database veld
Veld “catid” aan databasetabel toevoegen om category_id op te
slaan.
ALTER TABLE `#__db8locate_items` ADD `catid` INT( 10 )
UNSIGNED NOT NULL DEFAULT '0';
Joomladagen 2014Joomladagen 2014
5. categorieën – lijst
/administrator/components/com_db8locate/views/items/tmpl/form.default.xml
NB: xml bestand bevat hardcoded SQL voor MySQL → moet eigenlijk
model
Aan <headerset> toevoegen:
●
<header name="category" type="category"
sortable="true" tdwidth="10%" />
●
●Aan <fieldset name="items"> toevoegen:
<field name="catid" type="sql" translate="false"
query="SELECT * FROM #__categories"
key_field="id" value_field="title" />
●
Joomladagen 2014Joomladagen 2014
5. categorieën – lijst
Joomladagen 2014Joomladagen 2014
5. categorieën – formulier
/administrator/components/com_db8locate/views/item/tmpl/form.form.xml
Aan <fieldset> toevoegen:
●
<field name="catid" type="category"
● extension="com_db8locate"
● class="inputbox"
● label="JCATEGORY"
● required="true"
● size="1" />
●
Joomladagen 2014Joomladagen 2014
5. categorieën – formulier
Joomladagen 2014Joomladagen 2014
5. categorieën – toolbar
/administrator/components/com_db8locate/toolbar.php
●<?php
defined('_JEXEC') or die();
class Db8locateToolbar extends FOFToolbar {
public function Db8locateHelperRenderSubmenu($vName) {
return $this->renderSubmenu($vName);
}
public function renderSubmenu($vName = null) {
if (is_null($vName)) {
$vName = $this->input->getCmd('view', 'cpanel');
}
$this->input->set('view', $vName);
parent::renderSubmenu();
$toolbar = FOFToolbar::getAnInstance($this->input->getCmd('option',
'com_db8locate'), $this->config);
$toolbar->appendLink(Jtext::_('COM_DB8LOCATE_SUBMENU_CATEGORIES'),
'index.php?option=com_categories&extension=com_db8locate', $vName == 'categories');
}
}
Joomladagen 2014Joomladagen 2014
5. categorieën – toolbar
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');
● }
●}
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
Joomladagen 2014Joomladagen 2014
6. toegangsniveaus
1. Toegang tot applicatie
Joomladagen 2014Joomladagen 2014
6. toegangsniveaus applicatie 1/2
/administrator/components/com_db8locate/access.xml
●<?xml version="1.0" encoding="utf-8"?>
●<access component="com_db8locate">
●
●<section name="component">
● <action name="core.admin" title="JACTION_ADMIN"
description="JACTION_ADMIN_COMPONENT_DESC" />
<action name="core.manage" title="JACTION_MANAGE"
description="JACTION_MANAGE_COMPONENT_DESC" />
● <action name="core.create" title="JACTION_CREATE"
description="JACTION_CREATE_COMPONENT_DESC" />
● <action name="core.delete" title="JACTION_DELETE"
description="JACTION_DELETE_COMPONENT_DESC" />
● <action name="core.edit" title="JACTION_EDIT"
description="JACTION_EDIT_COMPONENT_DESC" />
● <action name="core.edit.state" title="JACTION_EDITSTATE"
description="JACTION_EDITSTATE_COMPONENT_DESC" />
● </section>
Joomladagen 2014Joomladagen 2014
6. toegangsniveaus applicatie 2/2
/administrator/components/com_db8locate/access.xml
● <section name="category">
● <action name="core.manage" title="JACTION_MANAGE"
description="JACTION_MANAGE_COMPONENT_DESC" />
● <action name="core.create" title="JACTION_CREATE"
description="COM_CATEGORIES_ACCESS_CREATE_DESC" />
● <action name="core.delete" title="JACTION_DELETE"
description="COM_CATEGORIES_ACCESS_DELETE_DESC" />
● <action name="core.edit" title="JACTION_EDIT"
description="COM_CATEGORIES_ACCESS_EDIT_DESC" />
● <action name="core.edit.state" title="JACTION_EDITSTATE"
description="COM_CATEGORIES_
ACCESS_EDITSTATE_DESC" />
● </section>
●
●</access>
Joomladagen 2014Joomladagen 2014
6. toegangsniveaus
2. (Front-end) toegang tot
database items
Joomladagen 2014Joomladagen 2014
6. toegangsniveaus – lijst
Joomladagen 2014Joomladagen 2014
7. parameters
Joomladagen 2014Joomladagen 2014
7. parameters
/administrator/components/com_db8locate/config.xml
via Components > db8 locate > categories > [options]
●<?xml version="1.0" encoding="UTF-8"?>
●<config>
●
● <fieldset name="permissions"
● label="JCONFIG_PERMISSIONS_LABEL"
● description="JCONFIG_PERMISSIONS_DESC" >
●
● <field name="rules"
● type="rules"
● label="JCONFIG_PERMISSIONS_LABEL"
● class="inputbox"
● filter="rules"
● component="com_db8locate"
● section="component" />
●
● </fieldset>
●
●</config>
Joomladagen 2014Joomladagen 2014
8. meertaligheid
Joomladagen 2014Joomladagen 2014
8. meertaligheid – database veld
Veld “language” aan databasetabel toevoegen om taalcode op
te slaan.
ALTER TABLE `#__db8locate_items` ADD `language`
CHAR( 7 ) NOT NULL DEFAULT '*';
Joomladagen 2014Joomladagen 2014
8. meertaligheid – lijst
/administrator/components/com_db8locate/views/items/tmpl/form.default.xml
Aan <headerset> toevoegen:
●
<header name="language" type="language"
sortable="true" tdwidth="10%" />
●
●
●Aan <fieldset name="items"> toevoegen:
<field name="language" type="text" tdwidth="10%" />
●
Joomladagen 2014Joomladagen 2014
8. meertaligheid – formulier
/administrator/components/com_db8locate/views/item/tmpl/form.form.xml
Aan <fieldset> toevoegen:
●
<field name="language" type="contentlanguage"
label="JFIELD_LANGUAGE_LABEL" >
● <option value="*">JALL</option>
● </field>
●
●
Joomladagen 2014Joomladagen 2014
8. meertaligheid – lijst
Joomladagen 2014Joomladagen 2014
9. “magic fields”
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
Joomladagen 2014Joomladagen 2014
10. tags
Joomladagen 2014Joomladagen 2014
10. tags
#__tags tabel:
opslag van tags, bijv:
id title
4 Joomla
5 Linux
#__contentitem_tag_map tabel:
koppeling van content items aan tags
type_alias core_content_id content_item_id tag_id type_id
com_content.article 1 1 2 1
com_content.article 1 1 3 1
com_content.article 3 2 4 1
com_content.article 3 2 5 1
com_weblinks.weblink 2 1 4 2
com_weblinks.weblink 2 1 5 2
Joomladagen 2014Joomladagen 2014
10. tags – formulier
/administrator/components/com_db8locate/views/item/tmpl/form.form.xml
Aan <fieldset> toevoegen:
●
<field name="tags"
type="tag"
label="JTAG"
description="JTAG_DESC"
class="inputbox span12"
multiple="true" >
</field>
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.
Joomladagen 2014Joomladagen 2014
11. eigen velden voor db8locate
Joomladagen 2014Joomladagen 2014
11. db8locate – database veld
Eigen voor deze applicatie specifieke velden aan databasetabel
toevoegen om op te slaan.
ALTER TABLE `jos_db8locate_items`
●ADD `location` VARCHAR( 60 ) NOT NULL ,
●ADD `address` VARCHAR( 50 ) NOT NULL ,
●ADD `postcode` VARCHAR( 12 ) NOT NULL ,
●ADD `city` VARCHAR( 50 ) NOT NULL ,
●ADD `region` VARCHAR( 50 ) NOT NULL ,
●ADD `country` VARCHAR( 50 ) NOT NULL ,
●ADD `latitude` VARCHAR( 10 ) NOT NULL ,
●ADD `longitude` VARCHAR( 10 ) NOT NULL ,
●ADD `website` VARCHAR( 100 ) NOT NULL
Joomladagen 2014Joomladagen 2014
11. db8locate – lijst
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
Joomladagen 2014Joomladagen 2014
12. front-end
Joomladagen 2014Joomladagen 2014
12. front-end – basis component
1.Entry point
/components/com_db8locate/db8locate.php
2.View: lijst
/components/com_db8locate/views/items/tmpl/form.default.xml
/components/com_db8locate/views/items/metadata.xml –> voor menu items
3.View: detailpagina
/components/com_db8locate/views/item/tmpl/form.item.xml
/components/com_db8locate/views/item/metadata.xml –> voor menu items
4.Language files
/components/com_db8locate/language/en-GB/en-GB.com_db8locate.ini
Joomladagen 2014Joomladagen 2014
12. front-end – view lijst
/components/com_db8locate/views/items/tmpl/form.default.xml
<?xml version="1.0" encoding="UTF-8"?>
<form
type="browse"
show_header="1"
show_filters="0"
show_pagination="1"
show_enabled="1"
norows_placeholder="COM_DB8LOCATE_COMMON_NORECORDS" >
<headerset>
<header name="title" type="fieldsearchable" sortable="true"buttons="true" />
<header name="city" type="fieldsearchable" sortable="true"buttons="false" />
<header name="region" sortable="true"buttons="false" />
<header name="country" sortable="true"buttons="false" tdwidth="20%" />
<header name="category" sortable="false"buttons="false" />
</headerset>
<fieldset name="items">
<field name="title" type="text" show_link="true"
url="index.php?option=com_db8locate&amp;view=item&amp;id=[ITEM:ID]"
class="todoitem" empty_replacement="(no title)" />
<field name="city" type="text" />
<field name="region" type="text" />
<field name="country" type="text" />
<field name="catid" type="sql" translate="false" query="SELECT * FROM #__categories"
key_field="id" value_field="title"/>
</fieldset>
</form>
Joomladagen 2014Joomladagen 2014
12. front-end – view lijst
Joomladagen 2014Joomladagen 2014
12. front-end – view details
/components/com_db8locate/views/item/tmpl/form.item.xml
<?xml version="1.0" encoding="utf-8"?>
●<form
● type="read">
●
● <fieldset name="a_single_item" class="item-container form-horizontal">
● <field name="title" type="text"
● label="COM_DB8LOCATE_TITLE"
● class="db8locate-title-field"
● size="50"/>
●
● <field name="city" type="text"
● label="COM_DB8LOCATE_CITY"
● labelclass="db8locate-field"
● size="20" />
●
● <field name="website" type="text"
● label="COM_DB8LOCATE_WEBSITE"
● labelclass="db8locate-field"
● size="40" />
●
● </fieldset>
●</form>
Joomladagen 2014Joomladagen 2014
12. front-end – view details
Joomladagen 2014Joomladagen 2014
13. meer views
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;
?>
Joomladagen 2014Joomladagen 2014
13. meer views – mixed php & xml
Joomladagen 2014Joomladagen 2014
13. meer views
● Extra (ingebouwde) uitvoermogelijkheden:
&format=csv
administrator/index.php?option=com_db8locate&format=csv
&format=json
administrator/index.php?option=com_db8locate&format=json
● Media files overrides
<form
lessfiles="media://com_db8locate/css/frontend.less||media://com_db8locate/
css/frontend.css
Joomladagen 2014Joomladagen 2014
d) hulpmiddelen
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?
Joomladagen 2014Joomladagen 2014
Bronnen
● Documentatie
https://www.akeebabackup.com/documentation/fof.html
● FOF Mailinglist:
https://groups.google.com/forum/#!
forum/frameworkonframework
● Source code Github:
https://github.com/akeeba/fof
● Voorbeelden:
https://github.com/akeeba/todo-fof-example/
https://github.com/akeeba/contactus
Akeeba Backup
Akeeba Ticket System
Joomladagen 2014Joomladagen 2014
i e
Joomladagen 2014Joomladagen 2014
Vragen?
Presentatie beschikbaar via:
http://www.db8.nl
Component db8locate beschikbaar via:
https://github.com/pe7er/db8locate
Peter Martin
e-mail: info at db8.nl
website: www.db8.nl
twitter: @pe7er
Joomladagen 2014Joomladagen 2014
Gebruikte foto's
● Speed Typing - Matthew Bowden http://www.sxc.hu/photo/275499
● Speedometer – Abdulhamid AlFadhly http://www.sxc.hu/photo/1390189
● Earth: Night Edition - Europe - Sigurd Decroos http://www.sxc.hu/photo/140879
● Forjados 1 - Albert Lazcano http://www.sxc.hu/photo/626785
● Bengali Keyborad - Mohammad Jobaed Adnan http://www.sxc.hu/photo/676844
● Old Light Switches - Paul Cross http://www.sxc.hu/photo/1259922
● madera en pila 1 - jean froidevaux http://www.sxc.hu/photo/313864
● Books books books... - Brandon Blinkenberg http://www.sxc.hu/photo/424027
● Sign 3: forbidden access - Davide Guglielmo http://www.sxc.hu/photo/200982
● Communications Receiver - John Munsch http://www.sxc.hu/photo/260775
● Flags of the Baltic Sea countries - Johannes Raitio http://www.sxc.hu/photo/471547
● Lock - Robert Linder http://www.sxc.hu/photo/1395379
● Basho Collage 5 - Billy Alexander http://www.sxc.hu/photo/1330749
● Retro/Vintage TV set - "meltingdog" http://www.sxc.hu/photo/1440150
● san sebastian views 1 - ibon san martin http://www.sxc.hu/photo/94018
● Fragile Parcel - Richard Dudley http://www.sxc.hu/photo/1279274
● Sparks - Hector Landaeta http://www.sxc.hu/photo/1184243
● Tools - J Boontje http://www.sxc.hu/photo/805571
● signs signs - Jason Antony http://www.sxc.hu/photo/751034

Contenu connexe

Tendances

Develop Basic joomla! MVC component for version 3
Develop Basic joomla! MVC component for version 3Develop Basic joomla! MVC component for version 3
Develop Basic joomla! MVC component for version 3Gunjan Patel
 
A Successful Magento Project From Design to Deployment
A Successful Magento Project From Design to DeploymentA Successful Magento Project From Design to Deployment
A Successful Magento Project From Design to DeploymentJoshua Warren
 
Webinar: 5 Tricks for WordPress web administrators
Webinar: 5 Tricks for WordPress web administratorsWebinar: 5 Tricks for WordPress web administrators
Webinar: 5 Tricks for WordPress web administratorsTomasz Dziuda
 
Joomla Tomorrow and Beyond
Joomla Tomorrow and BeyondJoomla Tomorrow and Beyond
Joomla Tomorrow and BeyondJessica Dunbar
 
State of play for Joomla - Nov 2014
State of play for Joomla - Nov 2014State of play for Joomla - Nov 2014
State of play for Joomla - Nov 2014Tim Plummer
 
Passo a Passo para criar uma aplicação Móvel Híbrida
Passo a Passo para criar uma aplicação Móvel HíbridaPasso a Passo para criar uma aplicação Móvel Híbrida
Passo a Passo para criar uma aplicação Móvel HíbridaJuliano Martins
 
Developing new feature in Joomla - Joomladay UK 2016
Developing new feature in Joomla - Joomladay UK 2016Developing new feature in Joomla - Joomladay UK 2016
Developing new feature in Joomla - Joomladay UK 2016Peter Martin
 
Magento Fireside Chat: "Wiring Mageno Projects"
Magento Fireside Chat: "Wiring Mageno Projects"Magento Fireside Chat: "Wiring Mageno Projects"
Magento Fireside Chat: "Wiring Mageno Projects"AOE
 
Madison PHP - Getting Started with Magento 2
Madison PHP - Getting Started with Magento 2Madison PHP - Getting Started with Magento 2
Madison PHP - Getting Started with Magento 2Mathew Beane
 
Magento 2 Development
Magento 2 DevelopmentMagento 2 Development
Magento 2 DevelopmentDuke Dao
 
WordPress Theming
WordPress ThemingWordPress Theming
WordPress Themingcodebangla
 
How to become a Joomla! Tester
How to become a Joomla! TesterHow to become a Joomla! Tester
How to become a Joomla! TesterMarc DECHEVRE
 
Plugins at WordCamp Phoenix
Plugins at WordCamp PhoenixPlugins at WordCamp Phoenix
Plugins at WordCamp PhoenixAndrew Ryno
 
Prebrowsing - Velocity NY 2013
Prebrowsing - Velocity NY 2013Prebrowsing - Velocity NY 2013
Prebrowsing - Velocity NY 2013Steve Souders
 
Plone for python programmers
Plone for python programmersPlone for python programmers
Plone for python programmersDylan Jay
 
Building a resposive slider plugin for WordPress theme
Building a resposive slider plugin for WordPress themeBuilding a resposive slider plugin for WordPress theme
Building a resposive slider plugin for WordPress themecodebangla
 
Joomla 15 Quickstart
Joomla 15 QuickstartJoomla 15 Quickstart
Joomla 15 QuickstartAmyStephen
 
Tips and tricks for using wordpress as application platform.
Tips and tricks for using wordpress as application platform.Tips and tricks for using wordpress as application platform.
Tips and tricks for using wordpress as application platform.danwestall
 
Preconnect, prefetch, prerender...
Preconnect, prefetch, prerender...Preconnect, prefetch, prerender...
Preconnect, prefetch, prerender...MilanAryal
 

Tendances (20)

Develop Basic joomla! MVC component for version 3
Develop Basic joomla! MVC component for version 3Develop Basic joomla! MVC component for version 3
Develop Basic joomla! MVC component for version 3
 
A Successful Magento Project From Design to Deployment
A Successful Magento Project From Design to DeploymentA Successful Magento Project From Design to Deployment
A Successful Magento Project From Design to Deployment
 
Webinar: 5 Tricks for WordPress web administrators
Webinar: 5 Tricks for WordPress web administratorsWebinar: 5 Tricks for WordPress web administrators
Webinar: 5 Tricks for WordPress web administrators
 
Joomla Presentations
Joomla PresentationsJoomla Presentations
Joomla Presentations
 
Joomla Tomorrow and Beyond
Joomla Tomorrow and BeyondJoomla Tomorrow and Beyond
Joomla Tomorrow and Beyond
 
State of play for Joomla - Nov 2014
State of play for Joomla - Nov 2014State of play for Joomla - Nov 2014
State of play for Joomla - Nov 2014
 
Passo a Passo para criar uma aplicação Móvel Híbrida
Passo a Passo para criar uma aplicação Móvel HíbridaPasso a Passo para criar uma aplicação Móvel Híbrida
Passo a Passo para criar uma aplicação Móvel Híbrida
 
Developing new feature in Joomla - Joomladay UK 2016
Developing new feature in Joomla - Joomladay UK 2016Developing new feature in Joomla - Joomladay UK 2016
Developing new feature in Joomla - Joomladay UK 2016
 
Magento Fireside Chat: "Wiring Mageno Projects"
Magento Fireside Chat: "Wiring Mageno Projects"Magento Fireside Chat: "Wiring Mageno Projects"
Magento Fireside Chat: "Wiring Mageno Projects"
 
Madison PHP - Getting Started with Magento 2
Madison PHP - Getting Started with Magento 2Madison PHP - Getting Started with Magento 2
Madison PHP - Getting Started with Magento 2
 
Magento 2 Development
Magento 2 DevelopmentMagento 2 Development
Magento 2 Development
 
WordPress Theming
WordPress ThemingWordPress Theming
WordPress Theming
 
How to become a Joomla! Tester
How to become a Joomla! TesterHow to become a Joomla! Tester
How to become a Joomla! Tester
 
Plugins at WordCamp Phoenix
Plugins at WordCamp PhoenixPlugins at WordCamp Phoenix
Plugins at WordCamp Phoenix
 
Prebrowsing - Velocity NY 2013
Prebrowsing - Velocity NY 2013Prebrowsing - Velocity NY 2013
Prebrowsing - Velocity NY 2013
 
Plone for python programmers
Plone for python programmersPlone for python programmers
Plone for python programmers
 
Building a resposive slider plugin for WordPress theme
Building a resposive slider plugin for WordPress themeBuilding a resposive slider plugin for WordPress theme
Building a resposive slider plugin for WordPress theme
 
Joomla 15 Quickstart
Joomla 15 QuickstartJoomla 15 Quickstart
Joomla 15 Quickstart
 
Tips and tricks for using wordpress as application platform.
Tips and tricks for using wordpress as application platform.Tips and tricks for using wordpress as application platform.
Tips and tricks for using wordpress as application platform.
 
Preconnect, prefetch, prerender...
Preconnect, prefetch, prerender...Preconnect, prefetch, prerender...
Preconnect, prefetch, prerender...
 

En vedette

How IT works - Joomladay Germany 2014
How IT works - Joomladay Germany 2014How IT works - Joomladay Germany 2014
How IT works - Joomladay Germany 2014Peter Martin
 
JUG Utrecht 2013 - Optimaliseren van Joomla Content Editor (JCE) voor admins
JUG Utrecht 2013 - Optimaliseren van Joomla Content Editor (JCE) voor adminsJUG Utrecht 2013 - Optimaliseren van Joomla Content Editor (JCE) voor admins
JUG Utrecht 2013 - Optimaliseren van Joomla Content Editor (JCE) voor adminsPeter Martin
 
Developing a Joomla 3.x Component using RAD FOF- Part 2: Front-end + demo - J...
Developing a Joomla 3.x Component using RAD FOF- Part 2: Front-end + demo - J...Developing a Joomla 3.x Component using RAD FOF- Part 2: Front-end + demo - J...
Developing a Joomla 3.x Component using RAD FOF- Part 2: Front-end + demo - J...Peter Martin
 
Developing a Joomla 3.x Component using RAD FOF- Part 1: Back-end - Joomladay...
Developing a Joomla 3.x Component using RAD FOF- Part 1: Back-end - Joomladay...Developing a Joomla 3.x Component using RAD FOF- Part 1: Back-end - Joomladay...
Developing a Joomla 3.x Component using RAD FOF- Part 1: Back-end - Joomladay...Peter Martin
 
Troubleshooting Joomla! problems - Joomladay Germany 2014
Troubleshooting Joomla! problems - Joomladay Germany 2014Troubleshooting Joomla! problems - Joomladay Germany 2014
Troubleshooting Joomla! problems - Joomladay Germany 2014Peter Martin
 
Basis Linux (aan de hand van LPIC-1)
Basis Linux (aan de hand van LPIC-1)Basis Linux (aan de hand van LPIC-1)
Basis Linux (aan de hand van LPIC-1)Peter Martin
 
Linux Nijmegen - Webserver (LAMP stack) opzetten met VirtualbBox & Vagrant
Linux Nijmegen - Webserver (LAMP stack) opzetten met VirtualbBox & VagrantLinux Nijmegen - Webserver (LAMP stack) opzetten met VirtualbBox & Vagrant
Linux Nijmegen - Webserver (LAMP stack) opzetten met VirtualbBox & VagrantPeter Martin
 
Digital Coupons
Digital CouponsDigital Coupons
Digital CouponsSj -
 
Channel Concept
Channel ConceptChannel Concept
Channel ConceptSj -
 
Media Planning Explained
Media Planning ExplainedMedia Planning Explained
Media Planning ExplainedSj -
 
Fairy Launch Plan Pakistan
Fairy Launch Plan   PakistanFairy Launch Plan   Pakistan
Fairy Launch Plan PakistanSj -
 
Brand Identity
Brand IdentityBrand Identity
Brand IdentitySj -
 
The Brand Gap
The Brand GapThe Brand Gap
The Brand GapSj -
 
Brand Positioning
Brand PositioningBrand Positioning
Brand PositioningSj -
 
Brand Personality
Brand PersonalityBrand Personality
Brand PersonalitySj -
 
Dynamics of Brand Personality
Dynamics of Brand PersonalityDynamics of Brand Personality
Dynamics of Brand PersonalitySj -
 
22 Immutable Laws of Branding
22 Immutable Laws of Branding22 Immutable Laws of Branding
22 Immutable Laws of BrandingSj -
 

En vedette (17)

How IT works - Joomladay Germany 2014
How IT works - Joomladay Germany 2014How IT works - Joomladay Germany 2014
How IT works - Joomladay Germany 2014
 
JUG Utrecht 2013 - Optimaliseren van Joomla Content Editor (JCE) voor admins
JUG Utrecht 2013 - Optimaliseren van Joomla Content Editor (JCE) voor adminsJUG Utrecht 2013 - Optimaliseren van Joomla Content Editor (JCE) voor admins
JUG Utrecht 2013 - Optimaliseren van Joomla Content Editor (JCE) voor admins
 
Developing a Joomla 3.x Component using RAD FOF- Part 2: Front-end + demo - J...
Developing a Joomla 3.x Component using RAD FOF- Part 2: Front-end + demo - J...Developing a Joomla 3.x Component using RAD FOF- Part 2: Front-end + demo - J...
Developing a Joomla 3.x Component using RAD FOF- Part 2: Front-end + demo - J...
 
Developing a Joomla 3.x Component using RAD FOF- Part 1: Back-end - Joomladay...
Developing a Joomla 3.x Component using RAD FOF- Part 1: Back-end - Joomladay...Developing a Joomla 3.x Component using RAD FOF- Part 1: Back-end - Joomladay...
Developing a Joomla 3.x Component using RAD FOF- Part 1: Back-end - Joomladay...
 
Troubleshooting Joomla! problems - Joomladay Germany 2014
Troubleshooting Joomla! problems - Joomladay Germany 2014Troubleshooting Joomla! problems - Joomladay Germany 2014
Troubleshooting Joomla! problems - Joomladay Germany 2014
 
Basis Linux (aan de hand van LPIC-1)
Basis Linux (aan de hand van LPIC-1)Basis Linux (aan de hand van LPIC-1)
Basis Linux (aan de hand van LPIC-1)
 
Linux Nijmegen - Webserver (LAMP stack) opzetten met VirtualbBox & Vagrant
Linux Nijmegen - Webserver (LAMP stack) opzetten met VirtualbBox & VagrantLinux Nijmegen - Webserver (LAMP stack) opzetten met VirtualbBox & Vagrant
Linux Nijmegen - Webserver (LAMP stack) opzetten met VirtualbBox & Vagrant
 
Digital Coupons
Digital CouponsDigital Coupons
Digital Coupons
 
Channel Concept
Channel ConceptChannel Concept
Channel Concept
 
Media Planning Explained
Media Planning ExplainedMedia Planning Explained
Media Planning Explained
 
Fairy Launch Plan Pakistan
Fairy Launch Plan   PakistanFairy Launch Plan   Pakistan
Fairy Launch Plan Pakistan
 
Brand Identity
Brand IdentityBrand Identity
Brand Identity
 
The Brand Gap
The Brand GapThe Brand Gap
The Brand Gap
 
Brand Positioning
Brand PositioningBrand Positioning
Brand Positioning
 
Brand Personality
Brand PersonalityBrand Personality
Brand Personality
 
Dynamics of Brand Personality
Dynamics of Brand PersonalityDynamics of Brand Personality
Dynamics of Brand Personality
 
22 Immutable Laws of Branding
22 Immutable Laws of Branding22 Immutable Laws of Branding
22 Immutable Laws of Branding
 

Similaire à Joomla 3 Component programmeren met RAD

Developing a Joomla 3.x Component using RAD/FOF - Joomladay UK 2014
Developing a Joomla 3.x Component using RAD/FOF - Joomladay UK 2014Developing a Joomla 3.x Component using RAD/FOF - Joomladay UK 2014
Developing a Joomla 3.x Component using RAD/FOF - Joomladay UK 2014Peter Martin
 
php[world] Magento101
php[world] Magento101php[world] Magento101
php[world] Magento101Mathew Beane
 
Drupal 8 - Core and API Changes
Drupal 8 - Core and API ChangesDrupal 8 - Core and API Changes
Drupal 8 - Core and API ChangesShabir Ahmad
 
CISOA Conference 2020 Banner 9 Development
CISOA Conference 2020 Banner 9 DevelopmentCISOA Conference 2020 Banner 9 Development
CISOA Conference 2020 Banner 9 DevelopmentBrad Rippe
 
Mageguru - magento custom module development
Mageguru -  magento custom module development Mageguru -  magento custom module development
Mageguru - magento custom module development Mage Guru
 
Easy Drupal Project Deployment With Features Module & Drush
Easy Drupal Project Deployment With Features Module & DrushEasy Drupal Project Deployment With Features Module & Drush
Easy Drupal Project Deployment With Features Module & DrushQArea
 
Rapid application development using Akeeba FOF and Joomla 3.2
Rapid application development using Akeeba FOF and Joomla 3.2Rapid application development using Akeeba FOF and Joomla 3.2
Rapid application development using Akeeba FOF and Joomla 3.2Tim Plummer
 
Rapid application development using Akeeba FOF and Joomla 3.2
Rapid application development using Akeeba FOF and Joomla 3.2Rapid application development using Akeeba FOF and Joomla 3.2
Rapid application development using Akeeba FOF and Joomla 3.2JoomlaDay Australia
 
Joomla 2019 Roadmap, Joomla 4 & Beyond by Robert Fairhead
Joomla 2019 Roadmap, Joomla 4 & Beyond by Robert FairheadJoomla 2019 Roadmap, Joomla 4 & Beyond by Robert Fairhead
Joomla 2019 Roadmap, Joomla 4 & Beyond by Robert FairheadRobert Fairhead
 
Fundamentals of Extending Magento 2 - php[world] 2015
Fundamentals of Extending Magento 2 - php[world] 2015Fundamentals of Extending Magento 2 - php[world] 2015
Fundamentals of Extending Magento 2 - php[world] 2015David Alger
 
Architecture and Analytical Study of Magento
Architecture and Analytical Study of MagentoArchitecture and Analytical Study of Magento
Architecture and Analytical Study of MagentoIRJET Journal
 
Drupal 8 Spinathon
Drupal 8 SpinathonDrupal 8 Spinathon
Drupal 8 SpinathonlittleMAS
 
Voiture tech talk
Voiture tech talkVoiture tech talk
Voiture tech talkHoppinger
 
DrupalCon LA 2015 Review
DrupalCon LA 2015 ReviewDrupalCon LA 2015 Review
DrupalCon LA 2015 ReviewlittleMAS
 
Vinicorp: Information management with redmine
Vinicorp: Information management with redmine Vinicorp: Information management with redmine
Vinicorp: Information management with redmine vinicorp
 
Meet Magento Spain 2019 - Our Experience with Magento Cloud
Meet Magento Spain 2019 - Our Experience with Magento CloudMeet Magento Spain 2019 - Our Experience with Magento Cloud
Meet Magento Spain 2019 - Our Experience with Magento CloudLyzun Oleksandr
 
Spring_Boot_Microservices-5_Day_Session.pptx
Spring_Boot_Microservices-5_Day_Session.pptxSpring_Boot_Microservices-5_Day_Session.pptx
Spring_Boot_Microservices-5_Day_Session.pptxPrabhakaran Ravichandran
 
Max Voloshin - "Organization of frontend development for products with micros...
Max Voloshin - "Organization of frontend development for products with micros...Max Voloshin - "Organization of frontend development for products with micros...
Max Voloshin - "Organization of frontend development for products with micros...IT Event
 

Similaire à Joomla 3 Component programmeren met RAD (20)

Developing a Joomla 3.x Component using RAD/FOF - Joomladay UK 2014
Developing a Joomla 3.x Component using RAD/FOF - Joomladay UK 2014Developing a Joomla 3.x Component using RAD/FOF - Joomladay UK 2014
Developing a Joomla 3.x Component using RAD/FOF - Joomladay UK 2014
 
php[world] Magento101
php[world] Magento101php[world] Magento101
php[world] Magento101
 
Drupal 8 - Core and API Changes
Drupal 8 - Core and API ChangesDrupal 8 - Core and API Changes
Drupal 8 - Core and API Changes
 
CISOA Conference 2020 Banner 9 Development
CISOA Conference 2020 Banner 9 DevelopmentCISOA Conference 2020 Banner 9 Development
CISOA Conference 2020 Banner 9 Development
 
Mageguru - magento custom module development
Mageguru -  magento custom module development Mageguru -  magento custom module development
Mageguru - magento custom module development
 
Easy Drupal Project Deployment With Features Module & Drush
Easy Drupal Project Deployment With Features Module & DrushEasy Drupal Project Deployment With Features Module & Drush
Easy Drupal Project Deployment With Features Module & Drush
 
Rapid application development using Akeeba FOF and Joomla 3.2
Rapid application development using Akeeba FOF and Joomla 3.2Rapid application development using Akeeba FOF and Joomla 3.2
Rapid application development using Akeeba FOF and Joomla 3.2
 
Rapid application development using Akeeba FOF and Joomla 3.2
Rapid application development using Akeeba FOF and Joomla 3.2Rapid application development using Akeeba FOF and Joomla 3.2
Rapid application development using Akeeba FOF and Joomla 3.2
 
Joomla 2019 Roadmap, Joomla 4 & Beyond by Robert Fairhead
Joomla 2019 Roadmap, Joomla 4 & Beyond by Robert FairheadJoomla 2019 Roadmap, Joomla 4 & Beyond by Robert Fairhead
Joomla 2019 Roadmap, Joomla 4 & Beyond by Robert Fairhead
 
Fundamentals of Extending Magento 2 - php[world] 2015
Fundamentals of Extending Magento 2 - php[world] 2015Fundamentals of Extending Magento 2 - php[world] 2015
Fundamentals of Extending Magento 2 - php[world] 2015
 
Architecture and Analytical Study of Magento
Architecture and Analytical Study of MagentoArchitecture and Analytical Study of Magento
Architecture and Analytical Study of Magento
 
Magento
MagentoMagento
Magento
 
Drupal 8 Spinathon
Drupal 8 SpinathonDrupal 8 Spinathon
Drupal 8 Spinathon
 
Voiture tech talk
Voiture tech talkVoiture tech talk
Voiture tech talk
 
DrupalCon LA 2015 Review
DrupalCon LA 2015 ReviewDrupalCon LA 2015 Review
DrupalCon LA 2015 Review
 
Vinicorp: Information management with redmine
Vinicorp: Information management with redmine Vinicorp: Information management with redmine
Vinicorp: Information management with redmine
 
Meet Magento Spain 2019 - Our Experience with Magento Cloud
Meet Magento Spain 2019 - Our Experience with Magento CloudMeet Magento Spain 2019 - Our Experience with Magento Cloud
Meet Magento Spain 2019 - Our Experience with Magento Cloud
 
Spring_Boot_Microservices-5_Day_Session.pptx
Spring_Boot_Microservices-5_Day_Session.pptxSpring_Boot_Microservices-5_Day_Session.pptx
Spring_Boot_Microservices-5_Day_Session.pptx
 
Max Voloshin - "Organization of frontend development for products with micros...
Max Voloshin - "Organization of frontend development for products with micros...Max Voloshin - "Organization of frontend development for products with micros...
Max Voloshin - "Organization of frontend development for products with micros...
 
Migrating from Magento 1 to Magento 2
Migrating from Magento 1 to Magento 2Migrating from Magento 1 to Magento 2
Migrating from Magento 1 to Magento 2
 

Plus de Peter Martin

JCE editor optimaliseren (Joomla Den Bosc­h 2016)
JCE editor optimaliseren (Joomla Den Bosc­h 2016)JCE editor optimaliseren (Joomla Den Bosc­h 2016)
JCE editor optimaliseren (Joomla Den Bosc­h 2016)Peter Martin
 
Internet of Things - Linux Usergroup Nijmegen
Internet of Things - Linux Usergroup NijmegenInternet of Things - Linux Usergroup Nijmegen
Internet of Things - Linux Usergroup NijmegenPeter Martin
 
Joomla: 10 years of progress (jd15fr)
Joomla: 10 years of progress (jd15fr)Joomla: 10 years of progress (jd15fr)
Joomla: 10 years of progress (jd15fr)Peter Martin
 
Linux command-line-magic-jdnl15
Linux command-line-magic-jdnl15Linux command-line-magic-jdnl15
Linux command-line-magic-jdnl15Peter Martin
 
GNU Radio & digitaal vliegtuig spotten
GNU Radio & digitaal vliegtuig spottenGNU Radio & digitaal vliegtuig spotten
GNU Radio & digitaal vliegtuig spottenPeter Martin
 
Help mijn website is gehackt - Joomla User Group Den Bosch 2014
Help mijn website is gehackt - Joomla User Group Den Bosch 2014Help mijn website is gehackt - Joomla User Group Den Bosch 2014
Help mijn website is gehackt - Joomla User Group Den Bosch 2014Peter Martin
 
Music Trackers - Linux Usergroup Nijmegen 2014
Music Trackers - Linux Usergroup Nijmegen 2014Music Trackers - Linux Usergroup Nijmegen 2014
Music Trackers - Linux Usergroup Nijmegen 2014Peter Martin
 
linux-commandline-magic-Joomla-World-Conference-2014
linux-commandline-magic-Joomla-World-Conference-2014linux-commandline-magic-Joomla-World-Conference-2014
linux-commandline-magic-Joomla-World-Conference-2014Peter Martin
 
How IT works - Joomladay UK 2014
How IT works - Joomladay UK 2014How IT works - Joomladay UK 2014
How IT works - Joomladay UK 2014Peter Martin
 
Joomla multilingual website without 3rd party extensions - Joomladay UK 2014
Joomla multilingual website without 3rd party extensions - Joomladay UK 2014Joomla multilingual website without 3rd party extensions - Joomladay UK 2014
Joomla multilingual website without 3rd party extensions - Joomladay UK 2014Peter Martin
 
Joomla Bugs, Patches & Fun - Joomladagen 2014
Joomla Bugs, Patches & Fun - Joomladagen 2014Joomla Bugs, Patches & Fun - Joomladagen 2014
Joomla Bugs, Patches & Fun - Joomladagen 2014Peter Martin
 
Joomla on Raspberry Pi using Nginx - Nederlandse Linux Gebruikers Group novem...
Joomla on Raspberry Pi using Nginx - Nederlandse Linux Gebruikers Group novem...Joomla on Raspberry Pi using Nginx - Nederlandse Linux Gebruikers Group novem...
Joomla on Raspberry Pi using Nginx - Nederlandse Linux Gebruikers Group novem...Peter Martin
 
Configuring Joomla JCE editor from usability point of view
Configuring Joomla JCE editor from usability point of viewConfiguring Joomla JCE editor from usability point of view
Configuring Joomla JCE editor from usability point of viewPeter Martin
 
Programmeren van Plugins voor Joomla 1.5
Programmeren van Plugins voor Joomla 1.5Programmeren van Plugins voor Joomla 1.5
Programmeren van Plugins voor Joomla 1.5Peter Martin
 
Powertools for Joomla!
Powertools for Joomla!Powertools for Joomla!
Powertools for Joomla!Peter Martin
 

Plus de Peter Martin (16)

JCE editor optimaliseren (Joomla Den Bosc­h 2016)
JCE editor optimaliseren (Joomla Den Bosc­h 2016)JCE editor optimaliseren (Joomla Den Bosc­h 2016)
JCE editor optimaliseren (Joomla Den Bosc­h 2016)
 
Internet of Things - Linux Usergroup Nijmegen
Internet of Things - Linux Usergroup NijmegenInternet of Things - Linux Usergroup Nijmegen
Internet of Things - Linux Usergroup Nijmegen
 
Joomla: 10 years of progress (jd15fr)
Joomla: 10 years of progress (jd15fr)Joomla: 10 years of progress (jd15fr)
Joomla: 10 years of progress (jd15fr)
 
Linux command-line-magic-jdnl15
Linux command-line-magic-jdnl15Linux command-line-magic-jdnl15
Linux command-line-magic-jdnl15
 
GNU Radio & digitaal vliegtuig spotten
GNU Radio & digitaal vliegtuig spottenGNU Radio & digitaal vliegtuig spotten
GNU Radio & digitaal vliegtuig spotten
 
Help mijn website is gehackt - Joomla User Group Den Bosch 2014
Help mijn website is gehackt - Joomla User Group Den Bosch 2014Help mijn website is gehackt - Joomla User Group Den Bosch 2014
Help mijn website is gehackt - Joomla User Group Den Bosch 2014
 
Music Trackers - Linux Usergroup Nijmegen 2014
Music Trackers - Linux Usergroup Nijmegen 2014Music Trackers - Linux Usergroup Nijmegen 2014
Music Trackers - Linux Usergroup Nijmegen 2014
 
linux-commandline-magic-Joomla-World-Conference-2014
linux-commandline-magic-Joomla-World-Conference-2014linux-commandline-magic-Joomla-World-Conference-2014
linux-commandline-magic-Joomla-World-Conference-2014
 
How IT works - Joomladay UK 2014
How IT works - Joomladay UK 2014How IT works - Joomladay UK 2014
How IT works - Joomladay UK 2014
 
Joomla multilingual website without 3rd party extensions - Joomladay UK 2014
Joomla multilingual website without 3rd party extensions - Joomladay UK 2014Joomla multilingual website without 3rd party extensions - Joomladay UK 2014
Joomla multilingual website without 3rd party extensions - Joomladay UK 2014
 
Joomla Bugs, Patches & Fun - Joomladagen 2014
Joomla Bugs, Patches & Fun - Joomladagen 2014Joomla Bugs, Patches & Fun - Joomladagen 2014
Joomla Bugs, Patches & Fun - Joomladagen 2014
 
Joomla on Raspberry Pi using Nginx - Nederlandse Linux Gebruikers Group novem...
Joomla on Raspberry Pi using Nginx - Nederlandse Linux Gebruikers Group novem...Joomla on Raspberry Pi using Nginx - Nederlandse Linux Gebruikers Group novem...
Joomla on Raspberry Pi using Nginx - Nederlandse Linux Gebruikers Group novem...
 
Configuring Joomla JCE editor from usability point of view
Configuring Joomla JCE editor from usability point of viewConfiguring Joomla JCE editor from usability point of view
Configuring Joomla JCE editor from usability point of view
 
Joomla Community
Joomla Community Joomla Community
Joomla Community
 
Programmeren van Plugins voor Joomla 1.5
Programmeren van Plugins voor Joomla 1.5Programmeren van Plugins voor Joomla 1.5
Programmeren van Plugins voor Joomla 1.5
 
Powertools for Joomla!
Powertools for Joomla!Powertools for Joomla!
Powertools for Joomla!
 

Dernier

Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 

Dernier (20)

Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 

Joomla 3 Component programmeren met RAD

  • 1. Joomla 3 Component programmeren met RAD Peter Martin, www.db8.nl. twitter: @pe7er Joomladagen.nl/2014 – 22+23 maart 2014
  • 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
  • 3. Joomladagen 2014Joomladagen 2014 Overzicht Presentatie >>> Sheets via: www.db8.nl <<< a)Introductie b)Rapid Application Development (RAD) c)Joomla Component: db8locate d)Fouten repareren e)Vragen? >>> Component via: https://github.com/pe7er/db8locate <<<
  • 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
  • 7. Joomladagen 2014Joomladagen 2014 b) Rapid Application Development (RAD)
  • 8. Joomladagen 2014Joomladagen 2014 ● Veel voorkomende functionaliteit code abstraheren ● Conventies ● Don’t Repeat Yourself (DRY) ● Nooku Framework ('Koowa') – Johan Janssens ● Joomlatools extensies (DOCman), Anahita ● Framework on Framework – Nicholas Dionysopoulos ● Basis van Akeeba Backup, Admin Tools etc b) Software Development Framework
  • 9. Joomladagen 2014Joomladagen 2014 Rapid Application Development (RAD) ● RAD = Framework on Framework (sinds Joomla 3.2) ● Niet stand-alone maar uitbreiding van Joomla! Platform Gebruikt Joomla's MVC classes (uitbreidingen) & lijkt op Joomla's MVC API ● Backwards compatibile ● Minder code → sneller ontwikkelen & minder bugs ● Convention over configuration -> FOF conventies mbt naamgeving van functies / veldnamen in tabellen -> automatisch functionaliteit ● Bootstrap, jQuery, JSON ● Hierarchical MVC (HMCV) - toon component views op andere plaatsen (andere views, componenten, modules)
  • 10. Joomladagen 2014Joomladagen 2014 1. basis component (back-end) 1.Entry point /administrator/components/com_db8locate/db8locate.php 2.Dispatcher /administrator/components/com_db8locate/fof.xml 3.SQL definitie van database tabel(len) /administrator/components/com_db8locate/sql/install/mysql/install.sql 4.XML installatie manifest /administrator/components/com_db8locate/db8locate.xml 5.View: lijst /administrator/components/com_db8locate/views/items/tmpl/form.default.xml 6.View: formulier /administrator/components/com_db8locate/views/item/tmpl/form.form.xml 7.Taalbestanden /administrator/components/com_db8locate/language/en-GB/ en-GB.com_db8locate.sys.ini + en-GB.com_db8locate.ini
  • 11. Joomladagen 2014Joomladagen 2014 c) Joomla Component met RAD
  • 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
  • 14. Joomladagen 2014Joomladagen 2014 1. basis component (back-end)
  • 15. Joomladagen 2014Joomladagen 2014 1. basis component (back-end) 1.Entry point /administrator/components/com_db8locate/db8locate.php 2.Dispatcher /administrator/components/com_db8locate/fof.xml 3.SQL definitie van database tabel(len) /administrator/components/com_db8locate/sql/install/mysql/install.sql 4.XML installatie manifest /administrator/components/com_db8locate/db8locate.xml 5.View: lijst /administrator/components/com_db8locate/views/items/tmpl/form.default.xml 6.View: formulier /administrator/components/com_db8locate/views/item/tmpl/form.form.xml
  • 16. Joomladagen 2014Joomladagen 2014 1.1 basis component – entry point /administrator/components/com_db8locate/db8locate.php <?php defined('_JEXEC') or die(); // Load FOF include_once JPATH_LIBRARIES.'/fof/include.php'; // Quit if FOF is not installed if(!defined('FOF_INCLUDED')) { JError::raiseError ('500', 'FOF is not installed'); } FOFDispatcher::getTmpInstance('com_db8locate')->dispatch();
  • 17. Joomladagen 2014Joomladagen 2014 1.2 basis component – fof dispatcher/administrator/components/com_db8locate/fof.xml ●<?xml version="1.0" encoding="UTF-8"?> ●<fof> ● <backend> ● <dispatcher> ● <option name="default_view">items</option> </dispatcher> ● </backend> ●</fof>
  • 18. Joomladagen 2014Joomladagen 2014 1.3 basis component – SQL definitie ● Maak SQL installatie bestand: /administrator/components/com_db8locate/ sql/install/mysql/install.sql install.sql bevat: ● CREATE TABLE, tabelnaam in meervoud: #__db8locate_items ● ID field, veldnaam in enkelvoud: componentnaam_enkelvoud-view_id: db8locate_item_id (in Joomla: “id”) ● title ● PRIMARY KEY (`db8locate_item_id`) = ID field
  • 19. Joomladagen 2014Joomladagen 2014 1.3 basis component – SQL definitie / administrator/components/com_db8locate/sql/install/mysql/install.sql CREATE TABLE IF NOT EXISTS `#__db8locate_items` ( ● `db8locate_item_id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, ● `title` varchar(255) NOT NULL, ● PRIMARY KEY (`db8locate_item_id`) ●) DEFAULT CHARSET=utf8;
  • 20. Joomladagen 2014Joomladagen 2014 1.4 basis component – XML manifest 1/2 /administrator/components/com_db8locate/db8locate.xml <?xml version="1.0" encoding="utf-8"?> <extension version="3.2" type="component" method="upgrade"> <name>db8 locate</name> <author>Peter Martin</author> <creationDate>23 March 2014</creationDate> <copyright>Copyright (C) 2014 Peter Martin / db8.nl</copyright> <license>GNU General Public License version 2</license> <authorEmail>joomla@db8.nl</authorEmail> <version>1.0.1</version> <description>Component to manage and display locations on a Google Map</description> <!-- SQL query files to execute on installation --> <install> ● <sql> ● <file driver="mysql" charset="utf8">sql/install/mysql/install.sql</file> ● <file driver="mysql">sql/install/mysql/install.sql</file> ● ● <file driver="mysqli" charset="utf8">sql/install/mysql/install.sql</file> ● <file driver="mysqli">sql/install/mysql/install.sql</file> ● </sql> ● </install>
  • 21. Joomladagen 2014Joomladagen 2014 1.4 basis component – XML manifest 2/2 /administrator/components/com_db8locate/db8locate.xml <!-- Administrator back-end section --> <administration> <!-- Administration menu --> <menu view="cpanel">COM_DB8LOCATE</menu> <!-- Back-end files --> <files folder="backend"> <folder>sql</folder> <filename>db8locate.php</filename> <filename>fof.xml</filename> </files> </administration> </extension>
  • 22. Joomladagen 2014Joomladagen 2014 1.5 basis component – view lijst /administrator/components/com_db8locate/views/items/tmpl/form.default.xml <?xml version="1.0" encoding="UTF-8"?> ● ●<form type="browse" ● show_header="1" ● show_filters="1" ● show_pagination="1" ● norows_placeholder="COM_DB8LOCATE_COMMON_NORECORDS"> ● ● <headerset> ● <header name="db8locate_item_id" type="rowselect" tdwidth="20" /> ● <header name="title" type="fieldsearchable" sortable="true" buttons="yes" buttonclass="btn" /> ● </headerset> ● ● <fieldset name="items"> ● <field name="db8locate_item_id" show_id="true" type="selectrow"/> ● <field name="title" type="text" show_link="true" url="index.php?option=com_db8locate &amp;view=item&amp;id=[ITEM:ID]" empty_replacement="(no title)" /> ● </fieldset> ● ●</form>
  • 23. Joomladagen 2014Joomladagen 2014 1.6 basis component – view formulier /administrator/components/com_db8locate/views/item/tmpl/form.form.xml <?xml version="1.0" encoding="UTF-8"?> ● ●<form validate="true" serverside_validate="true"> ● ● <fieldset name="basic_configuration" ● label="COM_DB8LOCATE_LOCATION_ITEM_EDIT" ● description="COM_DB8LOCATE_LOCATION_ITEM_EDIT_BASIC_DESC" ● class="span4"> ● ● <field name="title" type="text" ● class="inputbox" ● label="JGLOBAL_TITLE" ● required="true" ● Size="50" /> ● </fieldset> ●</form>
  • 24. Joomladagen 2014Joomladagen 2014 1. basis component – installatie Via Extensions > Extension Manager > Discover
  • 25. Joomladagen 2014Joomladagen 2014 1. basis component (back-end) ● Lijst weergave
  • 26. Joomladagen 2014Joomladagen 2014 1. basis component (back-end) ● Formulier weergave
  • 27. Joomladagen 2014Joomladagen 2014 1. basis component (back-end) ● Lijstweergave na paar keer new & save
  • 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?"
  • 33. Joomladagen 2014Joomladagen 2014 3. aan/uitzetten – database veld Veld “enabled” aan databasetabel toevoegen om publicatiestatus op te slaan. ALTER TABLE `#__db8locate_items` ADD `enabled` TINYINT( 3 ) NOT NULL DEFAULT '1';
  • 34. Joomladagen 2014Joomladagen 2014 3. aan/uitzetten – lijst /administrator/components/com_db8locate/views/items/tmpl/form.default.xml Aan <headerset> toevoegen: ● <header name="enabled" type="published" sortable="true" tdwidth="8%" /> ● ●Aan <fieldset name="items"> toevoegen: ● <field name="enabled" type="published"/> ●
  • 36. Joomladagen 2014Joomladagen 2014 3. aan/uitzetten – formulier /administrator/components/com_db8locate/views/item/tmpl/form.form.xml Aan <fieldset> toevoegen: ● <field name="enabled" type="list" label="JSTATUS" ● labelclass="todo-label" ● class="inputbox" ● filter="intval" size="1" default="1" > ● <option value="1">JPUBLISHED</option> ● <option value="0">JUNPUBLISHED</option> ●</field> ●
  • 37. Joomladagen 2014Joomladagen 2014 3. aan/uitzetten – formulier
  • 39. Joomladagen 2014Joomladagen 2014 4. volgorde – database veld Veld “ordering” aan databasetabel toevoegen om volgorde op te slaan. ALTER TABLE `#__db8locate_items` ADD `ordering` INT( 11 ) NOT NULL DEFAULT '0';
  • 40. Joomladagen 2014Joomladagen 2014 4. volgorde – lijst /administrator/components/com_db8locate/views/items/tmpl/form.default.xml Aan <headerset> toevoegen: ● <header name="ordering" type="ordering" sortable="true" tdwidth="10%" /> ● ●Aan <fieldset name="items"> toevoegen: ● <field name="ordering" type="ordering" labelclass="order"/> ● ●
  • 43. Joomladagen 2014Joomladagen 2014 5. categorieën – database veld Veld “catid” aan databasetabel toevoegen om category_id op te slaan. ALTER TABLE `#__db8locate_items` ADD `catid` INT( 10 ) UNSIGNED NOT NULL DEFAULT '0';
  • 44. Joomladagen 2014Joomladagen 2014 5. categorieën – lijst /administrator/components/com_db8locate/views/items/tmpl/form.default.xml NB: xml bestand bevat hardcoded SQL voor MySQL → moet eigenlijk model Aan <headerset> toevoegen: ● <header name="category" type="category" sortable="true" tdwidth="10%" /> ● ●Aan <fieldset name="items"> toevoegen: <field name="catid" type="sql" translate="false" query="SELECT * FROM #__categories" key_field="id" value_field="title" /> ●
  • 45. Joomladagen 2014Joomladagen 2014 5. categorieën – lijst
  • 46. Joomladagen 2014Joomladagen 2014 5. categorieën – formulier /administrator/components/com_db8locate/views/item/tmpl/form.form.xml Aan <fieldset> toevoegen: ● <field name="catid" type="category" ● extension="com_db8locate" ● class="inputbox" ● label="JCATEGORY" ● required="true" ● size="1" /> ●
  • 47. Joomladagen 2014Joomladagen 2014 5. categorieën – formulier
  • 48. Joomladagen 2014Joomladagen 2014 5. categorieën – toolbar /administrator/components/com_db8locate/toolbar.php ●<?php defined('_JEXEC') or die(); class Db8locateToolbar extends FOFToolbar { public function Db8locateHelperRenderSubmenu($vName) { return $this->renderSubmenu($vName); } public function renderSubmenu($vName = null) { if (is_null($vName)) { $vName = $this->input->getCmd('view', 'cpanel'); } $this->input->set('view', $vName); parent::renderSubmenu(); $toolbar = FOFToolbar::getAnInstance($this->input->getCmd('option', 'com_db8locate'), $this->config); $toolbar->appendLink(Jtext::_('COM_DB8LOCATE_SUBMENU_CATEGORIES'), 'index.php?option=com_categories&extension=com_db8locate', $vName == 'categories'); } }
  • 49. Joomladagen 2014Joomladagen 2014 5. categorieën – toolbar
  • 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
  • 52. Joomladagen 2014Joomladagen 2014 6. toegangsniveaus 1. Toegang tot applicatie
  • 53. Joomladagen 2014Joomladagen 2014 6. toegangsniveaus applicatie 1/2 /administrator/components/com_db8locate/access.xml ●<?xml version="1.0" encoding="utf-8"?> ●<access component="com_db8locate"> ● ●<section name="component"> ● <action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_COMPONENT_DESC" /> <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_COMPONENT_DESC" /> ● <action name="core.create" title="JACTION_CREATE" description="JACTION_CREATE_COMPONENT_DESC" /> ● <action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_COMPONENT_DESC" /> ● <action name="core.edit" title="JACTION_EDIT" description="JACTION_EDIT_COMPONENT_DESC" /> ● <action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_COMPONENT_DESC" /> ● </section>
  • 54. Joomladagen 2014Joomladagen 2014 6. toegangsniveaus applicatie 2/2 /administrator/components/com_db8locate/access.xml ● <section name="category"> ● <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_COMPONENT_DESC" /> ● <action name="core.create" title="JACTION_CREATE" description="COM_CATEGORIES_ACCESS_CREATE_DESC" /> ● <action name="core.delete" title="JACTION_DELETE" description="COM_CATEGORIES_ACCESS_DELETE_DESC" /> ● <action name="core.edit" title="JACTION_EDIT" description="COM_CATEGORIES_ACCESS_EDIT_DESC" /> ● <action name="core.edit.state" title="JACTION_EDITSTATE" description="COM_CATEGORIES_ ACCESS_EDITSTATE_DESC" /> ● </section> ● ●</access>
  • 55. Joomladagen 2014Joomladagen 2014 6. toegangsniveaus 2. (Front-end) toegang tot database items
  • 56. Joomladagen 2014Joomladagen 2014 6. toegangsniveaus – lijst
  • 58. Joomladagen 2014Joomladagen 2014 7. parameters /administrator/components/com_db8locate/config.xml via Components > db8 locate > categories > [options] ●<?xml version="1.0" encoding="UTF-8"?> ●<config> ● ● <fieldset name="permissions" ● label="JCONFIG_PERMISSIONS_LABEL" ● description="JCONFIG_PERMISSIONS_DESC" > ● ● <field name="rules" ● type="rules" ● label="JCONFIG_PERMISSIONS_LABEL" ● class="inputbox" ● filter="rules" ● component="com_db8locate" ● section="component" /> ● ● </fieldset> ● ●</config>
  • 60. Joomladagen 2014Joomladagen 2014 8. meertaligheid – database veld Veld “language” aan databasetabel toevoegen om taalcode op te slaan. ALTER TABLE `#__db8locate_items` ADD `language` CHAR( 7 ) NOT NULL DEFAULT '*';
  • 61. Joomladagen 2014Joomladagen 2014 8. meertaligheid – lijst /administrator/components/com_db8locate/views/items/tmpl/form.default.xml Aan <headerset> toevoegen: ● <header name="language" type="language" sortable="true" tdwidth="10%" /> ● ● ●Aan <fieldset name="items"> toevoegen: <field name="language" type="text" tdwidth="10%" /> ●
  • 62. Joomladagen 2014Joomladagen 2014 8. meertaligheid – formulier /administrator/components/com_db8locate/views/item/tmpl/form.form.xml Aan <fieldset> toevoegen: ● <field name="language" type="contentlanguage" label="JFIELD_LANGUAGE_LABEL" > ● <option value="*">JALL</option> ● </field> ● ●
  • 63. Joomladagen 2014Joomladagen 2014 8. meertaligheid – lijst
  • 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
  • 67. Joomladagen 2014Joomladagen 2014 10. tags #__tags tabel: opslag van tags, bijv: id title 4 Joomla 5 Linux #__contentitem_tag_map tabel: koppeling van content items aan tags type_alias core_content_id content_item_id tag_id type_id com_content.article 1 1 2 1 com_content.article 1 1 3 1 com_content.article 3 2 4 1 com_content.article 3 2 5 1 com_weblinks.weblink 2 1 4 2 com_weblinks.weblink 2 1 5 2
  • 68. Joomladagen 2014Joomladagen 2014 10. tags – formulier /administrator/components/com_db8locate/views/item/tmpl/form.form.xml Aan <fieldset> toevoegen: ● <field name="tags" type="tag" label="JTAG" description="JTAG_DESC" class="inputbox span12" multiple="true" > </field>
  • 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.
  • 70. Joomladagen 2014Joomladagen 2014 11. eigen velden voor db8locate
  • 71. Joomladagen 2014Joomladagen 2014 11. db8locate – database veld Eigen voor deze applicatie specifieke velden aan databasetabel toevoegen om op te slaan. ALTER TABLE `jos_db8locate_items` ●ADD `location` VARCHAR( 60 ) NOT NULL , ●ADD `address` VARCHAR( 50 ) NOT NULL , ●ADD `postcode` VARCHAR( 12 ) NOT NULL , ●ADD `city` VARCHAR( 50 ) NOT NULL , ●ADD `region` VARCHAR( 50 ) NOT NULL , ●ADD `country` VARCHAR( 50 ) NOT NULL , ●ADD `latitude` VARCHAR( 10 ) NOT NULL , ●ADD `longitude` VARCHAR( 10 ) NOT NULL , ●ADD `website` VARCHAR( 100 ) NOT NULL
  • 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
  • 75. Joomladagen 2014Joomladagen 2014 12. front-end – basis component 1.Entry point /components/com_db8locate/db8locate.php 2.View: lijst /components/com_db8locate/views/items/tmpl/form.default.xml /components/com_db8locate/views/items/metadata.xml –> voor menu items 3.View: detailpagina /components/com_db8locate/views/item/tmpl/form.item.xml /components/com_db8locate/views/item/metadata.xml –> voor menu items 4.Language files /components/com_db8locate/language/en-GB/en-GB.com_db8locate.ini
  • 76. Joomladagen 2014Joomladagen 2014 12. front-end – view lijst /components/com_db8locate/views/items/tmpl/form.default.xml <?xml version="1.0" encoding="UTF-8"?> <form type="browse" show_header="1" show_filters="0" show_pagination="1" show_enabled="1" norows_placeholder="COM_DB8LOCATE_COMMON_NORECORDS" > <headerset> <header name="title" type="fieldsearchable" sortable="true"buttons="true" /> <header name="city" type="fieldsearchable" sortable="true"buttons="false" /> <header name="region" sortable="true"buttons="false" /> <header name="country" sortable="true"buttons="false" tdwidth="20%" /> <header name="category" sortable="false"buttons="false" /> </headerset> <fieldset name="items"> <field name="title" type="text" show_link="true" url="index.php?option=com_db8locate&amp;view=item&amp;id=[ITEM:ID]" class="todoitem" empty_replacement="(no title)" /> <field name="city" type="text" /> <field name="region" type="text" /> <field name="country" type="text" /> <field name="catid" type="sql" translate="false" query="SELECT * FROM #__categories" key_field="id" value_field="title"/> </fieldset> </form>
  • 77. Joomladagen 2014Joomladagen 2014 12. front-end – view lijst
  • 78. Joomladagen 2014Joomladagen 2014 12. front-end – view details /components/com_db8locate/views/item/tmpl/form.item.xml <?xml version="1.0" encoding="utf-8"?> ●<form ● type="read"> ● ● <fieldset name="a_single_item" class="item-container form-horizontal"> ● <field name="title" type="text" ● label="COM_DB8LOCATE_TITLE" ● class="db8locate-title-field" ● size="50"/> ● ● <field name="city" type="text" ● label="COM_DB8LOCATE_CITY" ● labelclass="db8locate-field" ● size="20" /> ● ● <field name="website" type="text" ● label="COM_DB8LOCATE_WEBSITE" ● labelclass="db8locate-field" ● size="40" /> ● ● </fieldset> ●</form>
  • 79. Joomladagen 2014Joomladagen 2014 12. front-end – view details
  • 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; ?>
  • 82. Joomladagen 2014Joomladagen 2014 13. meer views – mixed php & xml
  • 83. Joomladagen 2014Joomladagen 2014 13. meer views ● Extra (ingebouwde) uitvoermogelijkheden: &format=csv administrator/index.php?option=com_db8locate&format=csv &format=json administrator/index.php?option=com_db8locate&format=json ● Media files overrides <form lessfiles="media://com_db8locate/css/frontend.less||media://com_db8locate/ css/frontend.css
  • 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?
  • 86. Joomladagen 2014Joomladagen 2014 Bronnen ● Documentatie https://www.akeebabackup.com/documentation/fof.html ● FOF Mailinglist: https://groups.google.com/forum/#! forum/frameworkonframework ● Source code Github: https://github.com/akeeba/fof ● Voorbeelden: https://github.com/akeeba/todo-fof-example/ https://github.com/akeeba/contactus Akeeba Backup Akeeba Ticket System
  • 88. Joomladagen 2014Joomladagen 2014 Vragen? Presentatie beschikbaar via: http://www.db8.nl Component db8locate beschikbaar via: https://github.com/pe7er/db8locate Peter Martin e-mail: info at db8.nl website: www.db8.nl twitter: @pe7er
  • 89. Joomladagen 2014Joomladagen 2014 Gebruikte foto's ● Speed Typing - Matthew Bowden http://www.sxc.hu/photo/275499 ● Speedometer – Abdulhamid AlFadhly http://www.sxc.hu/photo/1390189 ● Earth: Night Edition - Europe - Sigurd Decroos http://www.sxc.hu/photo/140879 ● Forjados 1 - Albert Lazcano http://www.sxc.hu/photo/626785 ● Bengali Keyborad - Mohammad Jobaed Adnan http://www.sxc.hu/photo/676844 ● Old Light Switches - Paul Cross http://www.sxc.hu/photo/1259922 ● madera en pila 1 - jean froidevaux http://www.sxc.hu/photo/313864 ● Books books books... - Brandon Blinkenberg http://www.sxc.hu/photo/424027 ● Sign 3: forbidden access - Davide Guglielmo http://www.sxc.hu/photo/200982 ● Communications Receiver - John Munsch http://www.sxc.hu/photo/260775 ● Flags of the Baltic Sea countries - Johannes Raitio http://www.sxc.hu/photo/471547 ● Lock - Robert Linder http://www.sxc.hu/photo/1395379 ● Basho Collage 5 - Billy Alexander http://www.sxc.hu/photo/1330749 ● Retro/Vintage TV set - "meltingdog" http://www.sxc.hu/photo/1440150 ● san sebastian views 1 - ibon san martin http://www.sxc.hu/photo/94018 ● Fragile Parcel - Richard Dudley http://www.sxc.hu/photo/1279274 ● Sparks - Hector Landaeta http://www.sxc.hu/photo/1184243 ● Tools - J Boontje http://www.sxc.hu/photo/805571 ● signs signs - Jason Antony http://www.sxc.hu/photo/751034