Table of contents

Architecture

PrestaShop uses Model-View-Controller (MVC) for its software architecture, which is often used in web applications where webpages are dynamically generated.  MVC isolates application logic from the input and presentation, so that they can be separately developed, tested and maintained.  A view provides the user interface presented to the customer in the browser.  A controller receives input from the browser, decides what to do with it and then passes information to models that carry out specific tasks.  In PrestaShop, the models are in the /classes directory, the views are in the /themes directory and the controllers are in the /controllers directory.  The files in the root directory are the public interface used to call the controllers.

All these files have a warning at the top of them telling you not to modify them if you wish to upgrade PrestaShop to newer versions in the future.  That is because PrestaShop allows you to override its classes and controllers in the override directory.  By overriding classes and controllers instead of modifying them, you can safely overwrite them with new versions in the future without having to worry about losing any changes you have made.  PrestaShop’s modules also have the same warning, since they can be overridden in a theme by mirroring the module’s directory inside the theme, e.g. themes/themename/modules/blockuserinfo/blockuserinfo.tpl.

Models

The models in the /classes directory of PrestaShop are all PHP classes that extend the ObjectModel class.  This class gives the model a unique ID and a table name and identifier to link it to a row in the database.  For example, in the Address model, the ID is a positive integer, the table name is address and the table identifier is id_address.  The ObjectModel class also defines the model’s field sizes and the functions in the Validate class that are used to validate fields.  It also links the model to the webservice feature and provides a cache.  The model class names all end in Core so they can be overridden in the /override/classes directory. Here is a description of each PrestaShop model:

Model FilenameDescription

Address.php

Customer, manufacturer and supplier addresses.

AddressFormat.php

Address format for each country.

Alias.php

Aliases used to redirect typos in the search box in the Front Office.

Attachment.php

File attachments that are added to products.

Attribute.php

Product attributes that display as dropdowns on the product page.

AttributeGroup.php

Product attribute groups that display as labels for the dropdowns.

Carrier.php

Carriers used to ship products to customers.

Cart.php

Customer carts including those that didn’t result in an order.

Category.php

Product categories used to organise products.

CMS.php

CMS pages used to display information.

CMSCategory.php

Categories used to organise CMS pages.

Combination.php

Combinations of product attributes and their prices.

Configuration.php

All of PrestaShop’s configuration settings.

Connection.php

Statistics about page visits.

ConnectionsSource.php

Statistics about the source of page visits.

Contact.php

Departments that can be selected on the contact form.

Country.php

Countries used in addresses.

Currency.php

Currencies used in prices.

Customer.php

Customers who have registered.

CustomerMessage.php

Individual messages sent between customers and employees.

CustomerThread.php

Threads of messages sent between customers and employees.

DateRange.php

Date ranges used in page visits.

Delivery.php

Links between carriers, zones and ranges.

Discount.php

Vouchers that can be used by customers.

Employee.php

Employees who can log in to the Back Office.

Feature.php

Product feature labels on the product page.

FeatureValue.php

Product feature values on the product page.

Group.php

Customer groups and display methods.

GroupReduction.php

Customer group reductions.

Guest.php

Customers who haven’t registered.

Hook.php

Hooks where modules can be placed.

Image.php

Product images.

ImageType.php

Image thumbnail sizes.

Language.php

Languages used on the website.

Manufacturer.php

Product manufacturers.

Message.php

Customer messages sent from the order history page.

Meta.php

Meta-information of PrestaShop’s pages.

Order.php

Customer order information.

OrderDetail.php

Customer order products.

OrderDiscount.php

Customer order vouchers.

OrderHistory.php

Customer order status history.

OrderMessage.php

Prefilled order messages that employees can use.

OrderReturn.php

Merchandise returns.

OrderReturnState.php

Merchandise return statuses.

OrderSlip.php

Credit slips.

OrderState.php

Order statuses.

Pack.php

Product packs (extends Product class).

Page.php

PrestaShop’s non-CMS pages.

PaymentCC.php

Order credit card information.

Product.php

Product information.

ProductDownload.php

Downloadable products.

Profile.php

Profiles used to restrict employee access.

QuickAccess.php

Shortcuts in the dropdown at the top of the Back Office.

RangePrice.php

Carrier price ranges.

RangeWeight.php

Carrier weight ranges.

Referrer.php

Affiliate program data.

SearchEngine.php

Search engines tracked when guests visit.

Scene.php

Image maps that link products to banners.

Shop.php

Multiple shops (not yet implemented).

SpecificPrice.php

Specific prices including quantity discounts.

State.php

States used in addresses.

Store.php

Stores used in the store locator module.

StockMvt.php

Stock movements used to track employees’ changes.

StockMvtReason.php

Stock movement reasons.

SubDomain.php

Subdomains used by PrestaShop’s cookie.

Supplier.php

Product suppliers.

Tab.php

Back Office tabs and positions.

Tag.php

Product tags used by the tag cloud module.

Tax.php

Tax names and rates.

TaxRules.php

Specific tax rules.

TaxRulesGroup.php

Groups of the tax rules.

Webservice.php

External access to the database.

Zone.php

Zones used by the carriers.

Here’s a description of the other PrestaShop classes that do not store data in the database:

Class Filename

Description

AdminTab.php

Provides basic Back Office tab functionality.

Backup.php

Creates backups of the PrestaShop database.

Blowfish.php

Encrypts the PrestaShop cookie with Blowfish.

Cache.php

Provides basic caching functionality.

CacheFS.php

Perform File System caching.

CarrierModule.php

Provides basic shipping module functionality.

Chart.php

Creates charts.

ControllerFactory.php

Calls a controller and any overrides.

Cookie.php

Reads and writes PrestaShop’s cookie.

Customization.php

Gets product customization.

Db.php

Provides basic database functionality.

FrontController.php

Initialises Smarty variables and other basic controller code.

HelpAccess.php             

Displays help tooltips and documentation.

ImportModule.php

Provides basic shop import functionality.

Link.php

Gets links to products, categories, CMS pages, etc.

LocalizationPack.php

Installs localisation packs.

Mail.php

Sends emails.

MCached.php

Performs Memcaching.

Module.php

Provides basic module functionality.

ModuleGraph.php

Provides module graph functionality.

ModuleGraphEngine.php

Provides module graph engine functionality.

ModuleGrid.php

Provides module grid functionality.

ModuleGridEngine.php

Provides module grid engine functionality.

MySQL.php

Provides access to a MySQL database.

PaymentModule.php

Provides basic payment module functionality.

PDF.php             

Creates PDF invoices and delivery slips.

ProductSale.php

Manages product sale numbers.

Rijndael.php

Encrypts PrestaShop’s cookie using mcrypt.

Search.php

Performs searchs on products.

Validate.php

Validates data.

Here’s a description of the ObjectModel members:

Member Name

Description

$_cache

Stores a cache of all object.

$fieldsRequired

The required fields.

$fieldsRequiredDatabase

The required fields that have been overridden by an employee.

$fieldsSize

The maximum size of each non-translatable field.

$fieldsSizeLang

The maximum size of each translatable field.

$fieldsValidate

Array of validation functions that check non-translatable fields.

$fieldsValidateLang

Array of validation functions that check translatable fields.

$id

The integer ID of the object, e.g. 1

$identifier

The name of the ID of the object, e.g. id_address

$table

The main table used by the object.

$tables

All the tables used by the object.

$webserviceParameters

The webservice parameters for the object.

Here’s a description of the ObjectModel functions:

Function Name

Description

__construct()

Loads an object with the specified ID and language.

add()

Adds the current object to the database.

clearCache()

Used to clear the cache whenever an object is modified.

delete()

Deletes the current object from the database.

deleteSelection()

Deletes the specified list of objects from the database.

displayFieldName()

Gets the unique name of a field.

getFields()

Gets the non-translatable fields for the object.

getFieldsRequiredDatabase()

Gets the required fields overridden by an employee.

getTranslationFields()

Gets the translatable fields for the object.

getValidationRules()

Gets the validation rules for the object.

getWebserviceObjectList()

Gets a list of all webservice objects.

getWebserviceParameters()

Gets the webservice parameters for the object.

save()

Saves the object, adding it or updating it as necessary.

toggleStatus()

Toggles whether the object is visible on the website.

update()

Updates the current object in the database.

validateController()

Checks whether required fields have valid data.

validateFields()

Checks whether required non-translatable fields have valid data.

validateFieldsLang()

Checks whether required translatable fields have valid data.

Here’s a description of the validation functions:

Function Name

Description

isAbsoluteUrl()

Is an absolute URL (e.g., http://www.domain.com).

isAddress()

Is an address line (^!<>?=+@{}_$% not allowed).

isAnything()

Accepts anything without doing any validation.

isBirthDate()

Is empty date or a date in yyyy-mm-dd format at least 9 years ago.

isBool()

Is a Boolean value 0 or 1.

isBool_Id()

Is a Boolean id (0 or 1 followed by an underscore, then digits).

isCarrierName()

Is a valid carrier name (^<>;=#{} not allowed).

isCatalogName()

Is a catalog name (^<>;=#{} not allowed).

isCityName()

Is a city name (^!<>;?=+@#"°{}_$% not allowed).

isCleanHtml()

Is HTML without script tags or events.

isColor()

Is a colour keyword or hexadecimal code.

isConfigName()

Is a configuration key (alphanumeric and hypens).

isCookie()

Is an instance of the Cookie class.

isCoordinate()

Is a coordinate (up to 6 digits, a period, then up to 6 digits).

isCountryName()

Is a country name (lowercase letters, spaces and hyphens).

isDate()

Is a date in yyyy-mm-dd format.

isDateFormat()

Is a valid date in yyyy-mm-dd format.

isDiscountName()

Is a valid voucher code (3-32 characters except ^!<>,;?=+()@"°{}_$%:).

isDistanceUnit()

Is a distance unit (up to 2 letters).

isDni()

Is a valid DNI, NIF, CIF or NIE code and return an error code (deprecated).

isDniBool()

Whether an error code was returned from isDni (deprecated).

isEan13()

Is a 13-digit EAN13 code.

isEmail()

Is an email of the form [email protected].

isFileName()

Is a valid filename (alphanumeric, hyphens, underscores and periods).

isFloat()

Is a valid float value.

isGenderIsoCode()

Is a valid gender ISO code (0, 1 [male], 2 [female] or 9 [unknown]) (deprecated).

isGenderName()

Is a valid gender name (lowercase alphanumeric and period) (deprecated).

isGenericName()

Is a generic name (^<>;=#{} not allowed).

isGranularityValue()

Is a date format using lowercase d, m and y (deprecated).

isHookName()

Is a valid hook name (lowercase alphanumeric and hyphens).

isImageSize()

Is an image size (up to 4 digits).

isIcoFile()

Is a valid filename ending in .ico (deprecated).

isIconFile()

Is a valid filename ending in .gif, .jpg, .jpeg or .png (deprecated).

isImageTypeName()

Is a valid image type name (lowercase alphanumeric, spaces and hyphens).

isInt()

Is an integer.

isIp2Long()

Is a valid IP address.

isLabel()

Is a customisation field label (^{}<> allowed).

isLangIsoCode()

Is a language iso code (2 or 3 alphanumeric).

isLanguageFileName()

Is a language filename (2 or 3 alphanumeric followed by .gzip).

isLanguageIsoCode()

Is a valid language ISO code (2 or 3 lowercase letters).

isLinkRewrite()

Is a rewritten link (lowercase alphanumeric, hypens and underscores).

isLoadedObject()

Is a variable is an object and has a valid ID.

isLocalizationPackSelection()

Is "states", "taxes", "currencies", "languages" or "units".

isMailName()

Is a valid mail name (^<>;=#{} not allowed).

isMailSubject()

Is a valid mail subject (^<>{} not allowed).

isMessage()

Is a message (<>{} not allowed except <br />).

isMd5()

Is a valid MD5 hash.

isModuleName()

Is a valid module name (lowercase alphanumeric and hyphens).

isModuleUrl()

Is a valid URL to a zip, tgz or tar.gz file.

isName()

Is a valid name (^0-9!<>,;?=+()@#"°{}_$%: not allowed).

isOptFloat()

Is an empty field or valid float value.

isOptId()

Is an empty field or a positive integer (deprecated).

isOrderWay()

Is a valid order way 'ASC', 'DESC', 'asc' or 'desc'.

isOrderBy()

Is a valid order (lowercase alphanumeric, hyphens and underscores).

isPasswd()

Is a customer password (5-32 alphanumeric and (). -!@#$%\^&*).

isPasswdAdmin()

Is an employee password (8-32 alphanumeric and (). -!@#$%\^&*).

isPostCode()

Is a postcode (alphanumeric and hyphens).

isPrice()

Is a valid price (up to 10 digits, a period, then up to 9 digits).

isPriceDisplayMethod()

Is a price display method (must be PS_TAX_EXC or PS_TAX_INC values).

isProtocol()

Is the protocol http or https (deprecated).

isReductionType()

Is a reduction type "amount" or "percentage".

isReference()

Is a reference (^<>;={} not allowed).

isSerializedArray()

Is a serialised array.

isSha1()

Is a valid SHA1 hash.

IsSortDirection()

Is a sort direction 'ASC' or 'DESC'.

isStateIsoCode()

Is a valid state ISO code (up to 4 lowercase alphanumeric).

isString()

Is a string.

isSubDomainName()

Is a subdomain name.

isTableOrIdentifier()

Is a table name (lowercase alphanumeric, hyphens and underscores).

isTabName()

Is a valid tab name (alphanumeric, hyphens and underscores).

isTagsList()

Is a tags list (^!<>;?=+#"°{}_$% not allowed).

isTplFileName()

Is a valid template filename (alphanumeric, hyphens and underscores) (deprecated).

isTplName()

Is a valid template name (lowercase alphanumeric and hyphens).

isUnsignedFloat()

Is a valid positive float value.

isUnsignedId()

Is a positive integer.

isUnsignedInt()

Is a positive integer.

isUrl()

Is a valid URL.

isUpc()

Is a 12-digit UPC code.

isValidSearch()

Is a valid search (up to 64 characters except ^<>;=#{}).

isValuesList()

Is a MySQL query values list (deprecated).

isVoucherDescription()

Is a voucher description (<>{} not allowed except <br />).

isWeightUnit()

Is a weight unit (up to 3 letters).

isZipCodeFormat()

Is a zip code format (using uppercase letters N, L, C, spaces and hyphens).

isZoneName()

Is a zone name (lowercase letters, hyphens, spaces and parentheses) (deprecated).

Views

PrestaShop uses Smarty templating for its views, which supplements HTML with a flexible syntax to add variables, if statements, loops and other PHP code to the view.  Most of the TPL files have the same name as the PHP file that calls them.  For example, 404.php calls 404.tpl.  Here is a description of PrestaShop’s templates:

View Filename

Description

404.tpl

The “Page not found” page.

address.tpl

The address form.

addresses.tpl

Lists customer addresses.

authentication.tpl

The login and registration forms.

best-sales.tpl

Lists the best-selling products.

breadcrumb.tpl

The breadcrumb bar at the top of the centre column.

category-cms-tree.tpl

Used by sitemap.php to list CMS pages on the sitemap.

category-tree-branch.tpl

Used by sitemap.php to list subcategories on the sitemap.

category.tpl

Lists a category’s subcategories and products.

cms.tpl

Displays a CMS page.

contact-form.tpl

The customer service contact form.

discount.tpl

Lists vouchers available to a customer.

errors.tpl

Displays error messages.

footer.tpl

The footer at the bottom of the website.

guest-tracking.tpl

The guest order tracking form.

header.tpl

The header at the top of the website.

history.tpl

Lists a customer’s orders.

identity.tpl

The customer’s personal information form.

index.tpl

The center column on the homepage.

maintenance.tpl

The maintenance page when the shop is disabled.

manufacturer-list.tpl

Lists manufacturers.

manufacturer.tpl

Lists the products of a manufacturer.

my-account.tpl

The account page of a customer.

new-products.tpl

Lists new products.

order-address.tpl

Used by order.php and order-opc.php for the address step.

order-carrier.tpl

Used by order.php and order-opc.php for the carrier step.

order-confirmation.tpl

The order confirmation page.

order-detail.tpl

Used by guest-tracking.php and history.php for order details.

order-follow.tpl

Lists a customer’s merchandise returns.

order-opc.tpl

The one-page checkout page.

order-opc-new-account.tpl

Used by order-opc.php for the login and new account forms.

order-payment.tpl

Used by order-opc.php for the payment step.

order-return.tpl

Displays information about a merchandise return.

order-slip.tpl

Lists a customer’s credit clips.

order-steps.tpl

Used by order.php to display the order steps.

pagination.tpl

The page navigation at the bottom of the centre column.

password.tpl

The lost password form.

prices-drop.tpl

Lists discounted products.

product-compare.tpl

Adds product comparison checkboxes to the product listings.

product-list.tpl

Lists products.

product-sort.tpl

The “Sort by” form at the top of product listings.

product.tpl

Information about a product.

products-comparison.tpl

The product comparison page.

restricted-country.tpl

Displays a message when a customer has been restricted by country.

scenes.tpl

Used by category.php to display banners that link to products.

search.tpl

List the search results page.

shopping-cart-product-line.tpl

Used by shopping-cart.tpl to display a product line in the cart summary.

shopping-cart.tpl

Used by order.php and order-opc.php to display the cart summary.

sitemap.tpl

The sitemap of the website.

store_infos.tpl

The store opening hours.

stores.tpl

The store information and Google map.

supplier-list.tpl

Lists suppliers.

supplier.tpl

Lists products from a supplier.

Controllers

Here’s a list of PrestaShop’s controllers and a description of what each of them do:

Controller Name

Description

AddressController.php

Used by address.php to edit a customer’s address.

AddressesController.php

Used by addresses.php to get a customer’s addresses.

AuthController.php

Used by authentication.php to manage customer login.

BestSalesController.php

Used by best-sales.php to get the best-selling products.

CartController.php

Used by cart.php to manage the customer’s cart.

CategoryController.php

Used by category.php to get product categories.

CMSController.php

Used by cms.php to get a CMS page.

CompareController.php

Used by products-comparison.php to compare products.

ContactController.php

Used by contact-form.php to send messages to employees.

DiscountController.php

Used by discount.php to get vouchers available to a customer.

GuestTrackingController.php

Used by guest-tracking.php to manage guest orders.

HistoryController.php

Used by history.php to get a customer’s orders.

IdentityController.php

Used by identity.php to get a customer’s personal information.

IndexController.php

Used by index.php to display the homepage.

ManufacturerController.php

Used by manufacturer.php to get manufacturers and their products.

MyAccountController.php

Used by my-account.php to display a customer’s account page.

NewProductsController.php

Used by new-products.php to get a list of new products.

OrderConfirmationController.php

Used by order-confirmation.php to manage the order confirmation page.

OrderController.php

Used by order.php to manage the five-step checkout pages.

OrderDetailController.php

Used by order-detail.php to get a single customer order.

OrderFollowController.php

Used by order-follow.php to get a list of a customer’s merchandise returns.

OrderOpcController.php

Used by order-opc.php to manage the one-page checkout page.

OrderReturnController.php

Used by order-return.php to get a single merchandise return.

OrderSlipController.php

Used by order-slip.php to get a list of a customer’s credit slips.

PageNotFoundController.php

Used by 404.php to manage the “Page not found” page.

ParentOrderController.php

Used by OrderController.php and OrderOpcController.php for shared code.

PasswordController.php

Used by password.php to allow a customer to reset a lost password.

PricesDropController.php

Used by prices-drop.php to get a list of discounted products.

ProductController.php

Used by product.php to get a product.

SearchController.php

Used by search.php to perform a search and get the results.

SitemapController.php

Used by sitemap.php to get the sitemap of the website.

StoresController.php

Used by stores.php to get store information and Google map coordinates.

SupplierController.php

Used by supplier.php to get suppliers and their products.

All controllers in PrestaShop extend the FrontController class.  Here’s a description of the FrontController members:

Member Name

Description

$auth

Whether a customer must log in before they can access the page.

$authRedirection

The page redirected to after logging in.

$cart

The current customer’s or guest’s cart.

$cookie

Used to access PrestaShop’s cookie variables.

$currentCustomerGroups

Caches the current customer’s groups.

$errors

An array of errors that have occurred.

$guestAllowed

Whether a customer who has signed out can access the page.

$initialized

Whether the init() function has been called.

$iso

The iso code of the currently selected language.

$link

Used to generate PrestaShop links.

$n

The number of items per page.

$orderBy

The field used to sort.

$orderWay

Whether to sort ascending or descending ("ASC" or "DESC").

$p

The current page number.

$smarty

Used to access Smarty variables and functions.

$ssl

Whether the page is loaded using SSL when it is available.

Here’s a description of the controller functions in the order they are executed:

Function Name

Description

__construct()

Sets all the controller’s member variables.

preProcess()

Assigns variables that can be used in the header template file.

setMedia()

Adds all JavaScript and CSS specific to the page so it can be combined, compressed and cached.

displayHeader()

Calls the header template file.

process()

Assigns variables that can be used by the content template file.

displayContent()

Calls the content template file.

displayFooter()

Calls the footer template file.