---
title: "App for J2store"
description: "Developer guide to building a J2Commerce app: structure, naming conventions, the manifest, and the app, model and controller classes."
url: "https://docs.j2commerce.com/developer-guide/app-for-j2store"
markdown_url: "https://docs.j2commerce.com/developer-guide/app-for-j2store.md"
last_updated: "2026-10-23T03:36:49+00:00"
version: "J2Store 4"
breadcrumbs:
  - title: "Home"
    url: "https://docs.j2commerce.com/"
  - title: "Developer Guide"
    url: "https://docs.j2commerce.com/developer-guide"
  - title: "App for J2store"
    url: "https://docs.j2commerce.com/developer-guide/app-for-j2store"
---

# App for J2store

In the following guide, we are going to cover the following topics related to plugin development:

Introduction App Structure Naming Conventions The Manifest Creating app class App Model Class App controller

## Introduction

Developing a app for J2Store is very simple process if you are good in PHP and the Joomla MVC structure.

J2Store comes with a app library and wrappers that makes creating a app for J2Store.

## App Structure

There is a folder structure and a few naming conventions, that should be followed during the development of a app for J2Store.

A typical app should look like this:

```
├── app_example/
│   ├── app_example.php
│   ├── app_example.xml
│   ├── languages/
│   │   ├── en-GB.plg_j2store_app_example.ini
│   ├── app_example/
│   │   ├── tmpl/
│   │   │   ├── form.php
│   │   │   ├── default.php
│   │   ├── controller.php
│   │   ├── models/
│   │   │   ├── appexample.php
```

## Naming Conventions

The name of the app folder should start with the prefix “app\_”. Otherwise, J2Store will not recognize your app. So our example app is named as:app_example

Make sure that the name of the file and folder is in lower case and there are no spaces or any other characters in the name.

## Manifest

An example manifest should look like this:

```
<?xml version="1.0" encoding="utf-8"?>
<extension version="3.0" type="plugin" group="j2store" method="upgrade">
	<name>Example</name>
	<version>1.0</version>
	<creationDate>July 2015</creationDate>
	<author>J2Store</author>
	<authorEmail>supports@j2store.org</authorEmail>
	<authorUrl>http://www.j2store.org</authorUrl>
	<copyright>2015 Weblogicx India</copyright>
	<license>GNU General Public License v2</license>
	<description>PLG_J2STORE_APP_DONATION_DESC</description>
	<files>
		<filename plugin="app_example">app_example.php</filename>
		<folder>app_example</folder>
		<folder>languages</folder>
		<filename>index.html</filename>
	</files>
	<languages>
		<language tag="en-GB">languages/en-GB.plg_j2store_app_example.ini</language>
	</languages>
	<config>
		<fields name="params">
			<fieldset name="basic" label="J2STORE_BASIC_SETTINGS"
				addfieldpath="/administrator/components/com_j2store/models/fields">
			</fieldset>
		</fields>
	</config>
</extension>
```

## Creating app class

Make sure the name of the class suffix is same as your app file’s name. And it should extend the J2StoreAppPlugin class.

````
defined('_JEXEC') or die('Restricted access');
    require_once(JPATH_ADMINISTRATOR.'/components/com_j2store/library/plugins/app.php');
    class plgJ2StoreApp_Example extends J2StoreAppPlugin
    {
    	/**
    	 * @var $_element  string  Should always correspond with the plugin's filename,
    	 *                         forcing it to be unique
    	 */
    	var $_element    = 'app_example';
```

This file should have following two methods:

**onJ2StoreGetAppView** - This method is used to check if it is a app_example or not.

viewList - A controller for this plugin.
	```$html = $this->_getLayout('default', $vars);```

The above line will call the template layout for the app_example from /app_example/app_example/tmpl/default.php

**App Model Class**

App's model should have file named with appexample.php and it should be like below

```
defined('_JEXEC') or die('Restricted access');
require_once (JPATH_ADMINISTRATOR . '/components/com_j2store/library/appmodel.php');
class J2StoreModelAppExample extends J2StoreAppModel
{
	public $_element = 'app_example';

}

```
**App controller**

Controller.php file should be located in /app_donation/app_donation/controller.php and you must include the J2Store's library appcontroller and it should be written like below
```

defined(’\_JEXEC’) or die(‘Restricted access’); require\_once(JPATH\_ADMINISTRATOR.’/components/com\_j2store/library/appcontroller.php’);

class J2StoreControllerAppexample extends J2StoreAppController{

```
var $_element   = 'app_example';
```

}
````
