65

Joomla Extensions Kung Fu

Embed Size (px)

DESCRIPTION

My presentation at Joomla and Beyond 2010 Conference about popular mistakes made by Joomla extension developers.

Citation preview

Page 1: Joomla Extensions Kung Fu
Page 2: Joomla Extensions Kung Fu

Why you can believe me

4 years of experience

Page 3: Joomla Extensions Kung Fu

Agenda

DevelopmentDevelopment DesignDesign

MVCMVC

Other important questions

Other important questions

Code optimizationCode optimization

The most popular mistakes!

Page 4: Joomla Extensions Kung Fu

Joomla Components development

Page 5: Joomla Extensions Kung Fu

Model-View-Controller

Page 6: Joomla Extensions Kung Fu

How many timesdid you see this?

ModelModel

ViewView Controller

Controller

UserUser

updates manipulates

sees uses

Page 7: Joomla Extensions Kung Fu

An application is split by 3 departments which collaborate with each other to bring you the best results, but they don’t “disturb each other” at the same time!

Page 8: Joomla Extensions Kung Fu
Page 9: Joomla Extensions Kung Fu

MVC Controller

Page 10: Joomla Extensions Kung Fu

The controller isthe boss!

Page 11: Joomla Extensions Kung Fu

You should use a controller for

Getting request data;

Getting model & view

instances;

Updating model states;

Calling model action

methods (e.g. delete, save,

remove);

Calling view methods to

render a template.

Page 12: Joomla Extensions Kung Fu

You should not use a controller for

Database task;

Manipulating model data;

Rendering templates.

model & view tasks

Page 13: Joomla Extensions Kung Fu

A Controller in Joomla

Page 14: Joomla Extensions Kung Fu

JController

Page 15: Joomla Extensions Kung Fu

display() method revealed

/libraries/joomla/application/component/controller.php

Gets view instance

Gets view instance

Gets model

instance

Gets model

instance

Injects model

into view

Injects model

into view

Calls view’s

display() method

Calls view’s

display() method

Page 16: Joomla Extensions Kung Fu

Bad approaches for usingcontrollers in Joomla

Page 17: Joomla Extensions Kung Fu

Good approaches for usingcontrollers in Joomla

Page 18: Joomla Extensions Kung Fu

Bad approaches for usingcontrollers in Joomla

Page 19: Joomla Extensions Kung Fu

Good approaches for usingcontrollers in Joomla

Page 20: Joomla Extensions Kung Fu

MVC Model

Page 21: Joomla Extensions Kung Fu

A model is a hard worker!

Page 22: Joomla Extensions Kung Fu

You should use a model for

Storing a state;

Performing database tasks;

Formatting data;

All other data task.

Page 23: Joomla Extensions Kung Fu

You should not use a model for

Getting request data;

Rendering templates.

controller & view tasks

Page 24: Joomla Extensions Kung Fu

A Model in Joomla

Page 25: Joomla Extensions Kung Fu

JModel

The most unused model methods & properties.Why?

$this->_db

$this->_state

$this->getDBO();

$this->setState($property,

$value);

$this-

>getState($property);

Page 26: Joomla Extensions Kung Fu

Bad approaches for usingmodels in Joomla

Page 27: Joomla Extensions Kung Fu

Good approaches for usingmodels in Joomla

Page 29: Joomla Extensions Kung Fu

MVC View

Page 30: Joomla Extensions Kung Fu

A view is a stylist!

Page 31: Joomla Extensions Kung Fu

You should use a view for

Rendering templates;

Rendering templates;

Rendering templates.

Page 32: Joomla Extensions Kung Fu

You should not use a view for

Database tasks;

Database tasks;

Database tasks.

model tasks

Page 33: Joomla Extensions Kung Fu

A view in Joomla

Page 34: Joomla Extensions Kung Fu

JView

lies between a model and a template

ViewViewDataData TemplateTemplate

Page 35: Joomla Extensions Kung Fu

You should use a Joomla view class for

Getting data from models;

Rearranging data (if needed);

Assigning variables to

templates;

Rendering templates.

Page 36: Joomla Extensions Kung Fu

Don’t put everything you have into a view!

Page 37: Joomla Extensions Kung Fu

Keep your view methods small!

Page 38: Joomla Extensions Kung Fu

You shouldn’t use PHP in template files like this

Page 39: Joomla Extensions Kung Fu

You should use it like this

Page 40: Joomla Extensions Kung Fu

Don’t use variables in view templates other than the ones you assigned to

Page 41: Joomla Extensions Kung Fu

Keep your templates clear, assign all variables in view classes!

Page 42: Joomla Extensions Kung Fu

Add CSS and JS in the view template file

… in this case they can be overwritten in a Joomla template

Page 43: Joomla Extensions Kung Fu

Joomla MVC revealed

Page 44: Joomla Extensions Kung Fu

Joomla MVC default task as it is

Main component’s file

Main component’s file

request

data

calls

Controller

Controller

defaulttask

calls

JController’s display()

JController’s display()

Model & view objects

Model & view objects

gets

inserts

Model into view

Model into view

callsJView’s display()

JView’s display()

getsModel data

Model data

rendersTemplate

Template

Page 45: Joomla Extensions Kung Fu

The best way to figure out the Joomla framework is to dig into the code!

Page 46: Joomla Extensions Kung Fu

No, seriously

Just diginto the code

Page 47: Joomla Extensions Kung Fu

After digging JController methods you can find out

/libraries/joomla/application/component/controller.php

How to insert other than the default model into

your view class

How to add another location for your model & view

filesHow to set a default model state

…and many more

Page 48: Joomla Extensions Kung Fu

Joomla MVC structures possible variants

Page 49: Joomla Extensions Kung Fu
Page 50: Joomla Extensions Kung Fu
Page 51: Joomla Extensions Kung Fu
Page 52: Joomla Extensions Kung Fu

Base controller approach

Page 53: Joomla Extensions Kung Fu

Base controller approach:main component file

Page 54: Joomla Extensions Kung Fu

Code Optimization

Page 55: Joomla Extensions Kung Fu

Code Optimization

Write code

Write code Go!Go!

Write a bit more code

Write a bit more code

Think over

Think over

Page 56: Joomla Extensions Kung Fu

A simple optimization

Edit, publish, unpublish, save order, order up, order down, cancel, save, remove

Edit, publish, unpublish, save order, order up, order down, cancel, save, remove

Base admin modelBase admin model

Base admin controllerBase admin controller

Base admin viewBase admin view

Helper classesHelper classes

Get ordering, save order, move, check out, check in, publish, remove

Get ordering, save order, move, check out, check in, publish, remove

The most used variables: option, document, view, controller, layout, etc.

The most used variables: option, document, view, controller, layout, etc.

Everything that can be reused in templates

Everything that can be reused in templates

Page 57: Joomla Extensions Kung Fu

Code Documentation

Page 58: Joomla Extensions Kung Fu

Document your code

http://www.phpdoc.org/ http://code.google.com/p/jsdoc-toolkit/

Every file, class, class property and method

Page 59: Joomla Extensions Kung Fu
Page 60: Joomla Extensions Kung Fu

Filter input, escape output!http://shiflett.org/blog/2005/feb/my-top-two-php-security-practices

http://developer.joomla.org/security.html

http://developer.joomla.org/security/articles-tutorials/258-preventing-sql-injections.html

Page 61: Joomla Extensions Kung Fu

Joomla Components design

Page 62: Joomla Extensions Kung Fu

We are developers,we don’t do design!

Page 63: Joomla Extensions Kung Fu

!!!!!We are developers, we don’t do design !!!!

Page 64: Joomla Extensions Kung Fu

Design principlesfor developers

Set proper CSS classes &

IDs, but leave design for

template designers

That’s all!

Page 65: Joomla Extensions Kung Fu

Thanks for coming!

http://twitter.com/

onesterov

http://onesterov.com

http://jookungfu.org

http://mindk-lab.com

[email protected]