Architecture
Table of contents
/*<![CDATA[*/ div.rbtoc1597330884914 {padding: 0px;} div.rbtoc1597330884914 ul {list-style: disc;margin-left: 0px;} div.rbtoc1597330884914 li {margin-left: 0px;padding-left: 0px;} /*]]>*/
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 Filename | Description |
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 username@domain.tld. |
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. |
Last updated