Actions

How to create a stand-alone application using the Joomla! Platform

From Joomla! Documentation

Revision as of 20:28, 11 August 2011 by Cmb (Talk | contribs)

Contents

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”



Example 1: Hello World Command Line Interface (CLI) App

<?php
define( '_JEXEC', 1 );
 
require_once ( '../libraries/import.php' );
jimport( 'joomla.application.cli' );
 
class HelloWorld extends JCli
{
 
public function execute( )
    {
       $this->out( 'Hello World' );
    }
}
 
JCli::getInstance( 'HelloWorld' )->execute( );


Example 2: Drawing cool things in the Terminal Screen

<?php
define( '_JEXEC', 1 );
 
require_once ( '../libraries/import.php' );
jimport( 'joomla.application.cli' );
 
class JoomlaRocks extends JCli
{
 
public function execute( )
    {
       $this->out( '   .           .     .__       |      | ' );
       $this->out( '   | _  _ ._ _ | _.  [__) _  _.|_/ __ | ' );
       $this->out( '\__|(_)(_)[ | )|(_]  |  \(_)(_.| \_)  * ' );
    }
}
 
JCli::getInstance( 'JoomlaRocks' )->execute( );


Example 3: Hello World using a var to save your name

<?php
define('_JEXEC', 1);
 
require_once '../libraries/import.php';
 
jimport('joomla.application.cli');
 
class HelloYou extends JCli
{
    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();
    }
}
 
JCli::getInstance('HelloYou')->execute();


Example 4: Get your recent Tweets

<?php
 
define('_JEXEC', 1);
 
require_once '../libraries/import.php';
 
jimport('joomla.application.cli');
 
class TwitterFeed extends JCli
{
 
        //Get Latest Tweet
        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 . '
 
';
        }
 
        return $text;
        }
 
 
        public function execute()
        {
 
        $this->out( 'What is your twitter handle?' );
        $username = $this->in( );
 
        $this->out( 'How many tweets to view?' );
        $count = $this->in( );
 
        $tweet = $this->latest_tweet( $username, $count );
        $this->out( $tweet );
        }
 
        protected function fetchConfigurationData()
        {
        return array();
        }
}
 
JCli::getInstance('TwitterFeed')->execute();


[Information below this point seems to be out of date, cleaning required]

In order to use the Joomla! Framework alone, you would have to follow the following guidelines:

  • Keep this folder/files from a normal Joomla! install:
  • includes/
  • libraries/
  • configuration.php
  • Edit configuration.php to match your server database/username/password/paths/etc.
  • Create the required tables in the database
Note: Normally only the table #__session is needed, but if you want to stay safe, just use the whole structure of a Joomla! install (without the samples!)
  • Create an index.php file in the root with the following starting code:
/* Initialize Joomla framework */
define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(__FILE__) );
define( 'DS', DIRECTORY_SEPARATOR );
/* Required Files */
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
/* To use Joomla's Database Class */
require_once ( JPATH_BASE .DS.'libraries'.DS.'joomla'.DS.'factory.php' );
/* Create the Application */
$mainframe =& JFactory::getApplication('site');
/**************************************************/
// Your code starts here...
/**************************************************/
Note: It is possible to use Joomla! framework without a database. To do that, pass a config array containing session as a key with the value of false in the call to JFactory::getApplication() like this:
/* Create the Application */
$mainframe =& JFactory::getApplication('appname', array('session' => false));

After that, you can still use a file based authentication system if you want.

Use Existing Joomla Configuration in External PHP file

Sometimes you may need to write an external PHP file instead of working in Joomla files. Outside the Joomla Framework, we cannot use Joomla DB libraries, such as the Global object $db, loadResult(), loadResultArray, loadAssocList, loadRow() and so on. In this case, we can use the custom PHP code plugin to write the code right in the Joomla content page. You can also include the Joomla configuration and write your own MySQL queries in external php file.

Joomla Configuration

If you open configuration.php, you will see that all variables inside are under the class JConfig().
 In this example, I need the variables of $host, $db, $user and $password.

Joomla Page

Suppose we have a Joomla page called "jm_page.php". In jm_page.php, I tried to POST a request variable of $user_id from "jm_page.php" to the external PHP file called "external.php".

<form action="external.php" method="POST">

<input type="text" name="user_id" id="user_id" value="<?php echo $user_id; ?>" />

<input type="submit" />

</form>

External Page

In the code below, the objective is to use Jconfig Class without repeating the Database connection strings which were already defined in Joomla Configuration page.

 Having the DB established, we query and output the first value in the $result Array.

 In the Query, I tried to get the result of sex of the user based on the user id from the table "jos_community_user".

How to read $jconfig->host? 
$Jconfig is now the instance of the Jconfig class. host is the variable $host inside the class.

<?php#### The following codes is written by Andy Ng 
<http://www.pcinvent.net> 
####
#### Please keep the above credit line to the Author ####


//get POST

$user_id = $_POST["user_id"];echo $user_id;


//use joomla db classrequire_once("configuration.php");$jconfig = new JConfig();


//db establish

$db_error = "Sorry. We are maintaining the Website. Please try again later.";$db_config = mysql_connect( $jconfig->host, $jconfig->user, $jconfig->password ) or die( $db_error );mysql_select_db( $jconfig->db, $db_config ) or die( $db_error );


//db query result

$query = "SELECT user_sex FROM jos_community_user WHERE user_id = $user_id";
//get user_sex

$query_execute = mysql_query($query);$result = mysql_fetch_row($query_execute);echo $result[0];


mysql_close($db_config);//andy:close db for security reason

?>