How to create a stand-alone application using the Joomla! Platform
(→Example 2: Drawing cool things in the Terminal Screen) |
(→Building a Web Application on the Platform) |
||
| (7 intermediate revisions by 3 users not shown) | |||
| Line 37: | Line 37: | ||
<source lang="php"> | <source lang="php"> | ||
<?php | <?php | ||
| − | define( '_JEXEC', 1 ); | + | define('_JEXEC', 1); |
define('JPATH_BASE', dirname(__FILE__)); | define('JPATH_BASE', dirname(__FILE__)); | ||
| − | + | require '../libraries/import.php'; | |
| − | + | ||
| − | class HelloWorld extends | + | class HelloWorld extends JApplicationCli |
{ | { | ||
| − | + | public function execute() | |
| − | public function execute( ) | + | |
{ | { | ||
| − | + | $this->out('Hello World'); | |
} | } | ||
} | } | ||
| − | + | JApplicationCli::getInstance('HelloWorld')->execute(); | |
| − | + | ||
</source> | </source> | ||
| Line 60: | Line 57: | ||
<source lang="php"> | <source lang="php"> | ||
<?php | <?php | ||
| − | define( '_JEXEC', 1 ); | + | define('_JEXEC', 1); |
| − | + | require '../libraries/import.php'; | |
| − | + | ||
| − | class JoomlaRocks extends | + | class JoomlaRocks extends JApplicationCli |
{ | { | ||
| − | + | public function execute() | |
| − | public function execute( ) | + | |
{ | { | ||
| − | $this->out( ' . . .__ | | ' ); | + | $this->out(' . . .__ | | '); |
| − | $this->out( ' | _ _ ._ _ | _. [__) _ _.|_/ __ | ' ); | + | $this->out(' | _ _ ._ _ | _. [__) _ _.|_/ __ | '); |
| − | $this->out( '\__|(_)(_)[ | )|(_] | \(_)(_.| \_) * ' ); | + | $this->out('\__|(_)(_)[ | )|(_] | \(_)(_.| \_) * '); |
} | } | ||
} | } | ||
| − | + | JApplicationCli::getInstance('JoomlaRocks')->execute(); | |
| − | + | ||
</source> | </source> | ||
| Line 86: | Line 80: | ||
define('_JEXEC', 1); | define('_JEXEC', 1); | ||
| − | + | require '../libraries/import.php'; | |
| − | + | class HelloYou extends JApplicationCli | |
| − | + | ||
| − | class HelloYou extends | + | |
{ | { | ||
public function execute() | public function execute() | ||
| Line 114: | Line 106: | ||
} | } | ||
| − | + | JApplicationCli::getInstance('HelloYou')->execute(); | |
</source> | </source> | ||
| Line 121: | Line 113: | ||
<source lang="php"> | <source lang="php"> | ||
<?php | <?php | ||
| − | |||
define('_JEXEC', 1); | define('_JEXEC', 1); | ||
| − | + | require '../libraries/import.php'; | |
| − | + | class TwitterFeed extends JApplicationCli | |
| − | + | ||
| − | class TwitterFeed extends | + | |
{ | { | ||
| + | public function execute() | ||
| + | { | ||
| + | $this->out('What is your twitter handle?'); | ||
| + | $username = $this->in(); | ||
| − | + | $this->out('How many tweets to view?'); | |
| − | + | $count = $this->in(); | |
| − | + | ||
| − | + | ||
| − | + | $tweets = $this->latest_tweet($username, $count); | |
| − | + | $this->out($tweets); | |
| − | + | } | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | // Get Latest Tweet | |
| − | + | private function latest_tweet($username, $count = 5) | |
| − | + | { | |
| + | $url = 'http://twitter.com/statuses/user_timeline/'.$username.'.xml?count='.$count; | ||
| − | + | $xml = simplexml_load_file($url) or die('could not connect'); | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | $text = ''; | |
| − | + | ||
| − | + | foreach($xml->status as $status) | |
| − | + | { | |
| + | $text .= $status->text."\n"; | ||
| + | } | ||
| + | |||
| + | return $text; | ||
| + | } | ||
} | } | ||
| − | + | JApplicationCli::getInstance('TwitterFeed')->execute(); | |
</source> | </source> | ||
== Building a Web Application on the Platform == | == Building a Web Application on the Platform == | ||
| − | |||
| − | |||
These instructions will allow you to create a minimal web application that does not use a database. | These instructions will allow you to create a minimal web application that does not use a database. | ||
| Line 184: | Line 162: | ||
Create an <tt>index.php</tt> file in the root with the following starting code: | Create an <tt>index.php</tt> file in the root with the following starting code: | ||
| − | <source | + | <source> |
| − | + | ||
| + | define('_JEXEC', 1); | ||
| + | |||
| + | // Fix magic quotes. | ||
| + | @ini_set('magic_quotes_runtime', 0); | ||
| + | |||
| + | // Maximise error reporting. | ||
| + | @ini_set('zend.ze1_compatibility_mode', '0'); | ||
| + | error_reporting(E_ALL); | ||
| + | ini_set('display_errors', 1); | ||
| + | |||
| + | /* | ||
| + | * Ensure that required path constants are defined. | ||
| + | */ | ||
| + | if (!defined('JPATH_BASE')) | ||
{ | { | ||
| − | + | define('JPATH_BASE', realpath(__DIR__)); | |
} | } | ||
| − | + | define('JPATH_LIBRARIES', JPATH_BASE . '/libraries'); | |
| − | + | ||
| − | define(' | + | |
| − | + | ||
| − | + | ||
| − | / | + | /** |
| − | / | + | * Import the platform. This file is usually in JPATH_LIBRARIES |
| − | require_once | + | */ |
| + | require_once JPATH_LIBRARIES . '/import.legacy.php'; | ||
| − | / | + | /** |
| − | + | * Import the application. | |
| − | + | */ | |
| + | require_once JPATH_BASE.'/includes/application.php'; | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
// Instantiate the application. | // Instantiate the application. | ||
| − | + | $web = MyWebApp::getInstance('MyWebApp'); | |
| − | + | ||
| − | $ | + | |
| − | + | ||
| − | + | ||
| − | // | + | // Run the application |
| − | + | $web->execute(); | |
| − | $ | + | |
</source> | </source> | ||
| − | Now create | + | Now create a folder <tt>includes</tt> in the root and inside it a file <tt>application.php</tt> with the following code: |
| − | + | <source> | |
| − | <source | + | |
/** | /** | ||
| − | * | + | * Override the doExecute method from JApplicationWeb. Here you define what your application does. |
| − | + | ||
*/ | */ | ||
| − | + | class MyWebApp extends JApplicationWeb | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
{ | { | ||
| − | + | /** | |
| − | + | * Display the application. | |
| − | + | */ | |
| − | + | protected function doExecute(){ | |
| − | + | ||
| − | + | $this->setBody( | |
| − | + | '<h1>My Web Application</h1>'. | |
| − | + | 'The current URL is '.JUri::current().'<br/>'. | |
| − | + | 'The date is '. JFactory::getDate('now') | |
| − | + | ); | |
| − | + | } | |
| − | + | ||
} | } | ||
| − | |||
</source> | </source> | ||
| − | |||
If you browse to the web page you should see the heading followed by the two sentences, including the url and the date. | If you browse to the web page you should see the heading followed by the two sentences, including the url and the date. | ||
[[Category:Platform]][[Category:Development]][[Category:Tutorials]] | [[Category:Platform]][[Category:Development]][[Category:Tutorials]] | ||
Latest revision as of 05:04, 5 April 2012
Contents |
[edit] How to Build Your First Joomla Platform Application
This article will allow you to create your first Joomla Platform application, following a step-by-step process outlined below. We’ll assume you’re in an environment that has access to PHP (Mac OS X has this by default), and that you’ve got a connection to the Internet to download the platform project.
Step 1: Download the latest Joomla Platform
Simply point your Web browser to http://github.com/joomla/joomla-platform and then click on the “Downloads” button. In the pop-up window that appears, click on either the “Download .tar.gz” button or the “Download .zip” button, depending on your preference.
Step 2: Extract the Joomla Platform in your own environment
After you’ve downloaded the file, extract it in the location of your choosing.
Step 3: Create a new file
Create a folder named ‘examples’ within the root directory where you extracted the Joomla Platform. Using your favorite text/code editor, copy/paste code from the following examples (one at a time) into a new file. (Name the file as: ‘helloworld.php‘ or other name that you prefer).
Step 4: Execute your application from the command line interface (CLI)
Using your favorite CLI (maybe Terminal on the Mac, or PuTTy on Windows), navigate to the ‘examples’ folder where you saved your file. Type “php helloword.php” (or whatever you named your file) and click the enter key on your keyboard.
Step 5: Read the result on your screen, savor the moment
Step 6: Tweet your success
Tell the world that you just made your first successful Joomla Platform app by tweeting the following: “OMG, I just wrote a #jplatform app! #joomla”
Step 7: Add to the collection
Add your application to the example collection at Platform Examples
Problems? Check Platform Tips and Tricks
[edit] Examples
[edit] Example 1: Hello World Command Line Interface (CLI) App
<?php define('_JEXEC', 1); define('JPATH_BASE', dirname(__FILE__)); require '../libraries/import.php'; class HelloWorld extends JApplicationCli { public function execute() { $this->out('Hello World'); } } JApplicationCli::getInstance('HelloWorld')->execute();
[edit] Example 2: Drawing cool things in the Terminal Screen
<?php define('_JEXEC', 1); require '../libraries/import.php'; class JoomlaRocks extends JApplicationCli { public function execute() { $this->out(' . . .__ | | '); $this->out(' | _ _ ._ _ | _. [__) _ _.|_/ __ | '); $this->out('\__|(_)(_)[ | )|(_] | \(_)(_.| \_) * '); } } JApplicationCli::getInstance('JoomlaRocks')->execute();
[edit] Example 3: Hello World using a var to save your name
<?php define('_JEXEC', 1); require '../libraries/import.php'; class HelloYou extends JApplicationCli { public function execute() { $this->out('What is your name?'); $name = $this->in(); $this->out(); $this->out('Hi '.$name.','); $this->out('Welcome to the Joomla Platform!'); $this->out(); } /** * We don’t really need configuration for this application. * * @return void */ protected function fetchConfigurationData() { return array(); } } JApplicationCli::getInstance('HelloYou')->execute();
[edit] Example 4: Get your recent Tweets
<?php define('_JEXEC', 1); require '../libraries/import.php'; class TwitterFeed extends JApplicationCli { public function execute() { $this->out('What is your twitter handle?'); $username = $this->in(); $this->out('How many tweets to view?'); $count = $this->in(); $tweets = $this->latest_tweet($username, $count); $this->out($tweets); } // Get Latest Tweet private function latest_tweet($username, $count = 5) { $url = 'http://twitter.com/statuses/user_timeline/'.$username.'.xml?count='.$count; $xml = simplexml_load_file($url) or die('could not connect'); $text = ''; foreach($xml->status as $status) { $text .= $status->text."\n"; } return $text; } } JApplicationCli::getInstance('TwitterFeed')->execute();
[edit] Building a Web Application on the Platform
These instructions will allow you to create a minimal web application that does not use a database.
Problems? Check Platform Tips and Tricks
Download the latest version of the Joomla! platform from github.
Create an index.php file in the root with the following starting code:
define('_JEXEC', 1); // Fix magic quotes. @ini_set('magic_quotes_runtime', 0); // Maximise error reporting. @ini_set('zend.ze1_compatibility_mode', '0'); error_reporting(E_ALL); ini_set('display_errors', 1); /* * Ensure that required path constants are defined. */ if (!defined('JPATH_BASE')) { define('JPATH_BASE', realpath(__DIR__)); } define('JPATH_LIBRARIES', JPATH_BASE . '/libraries'); /** * Import the platform. This file is usually in JPATH_LIBRARIES */ require_once JPATH_LIBRARIES . '/import.legacy.php'; /** * Import the application. */ require_once JPATH_BASE.'/includes/application.php'; // Instantiate the application. $web = MyWebApp::getInstance('MyWebApp'); // Run the application $web->execute();
Now create a folder includes in the root and inside it a file application.php with the following code:
/** * Override the doExecute method from JApplicationWeb. Here you define what your application does. */ class MyWebApp extends JApplicationWeb { /** * Display the application. */ protected function doExecute(){ $this->setBody( '<h1>My Web Application</h1>'. 'The current URL is '.JUri::current().'<br/>'. 'The date is '. JFactory::getDate('now') ); } }
If you browse to the web page you should see the heading followed by the two sentences, including the url and the date.