...
The ObjectModel class
This is the main object in of PrestaShop's object model. It can be overridden with precaution.
It is an Active Record kind of class (see: http://en.wikipedia.org/wiki/Active_record_pattern). PrestaShop's database table attributes or view attributes are encapsulated in the class. Therefore, the class is tied to a database record. After the object has been instantiated, a new record is added to the database. Each object retrieves its data from the database; when an object is updated, the record to which it is tied is updated as well. The class implements accessors for each attribute.
Defining the model
You must use the $definition
static variable in order to define the model.
...
In order to have an object which depend depends on the current store, and in many languages:
Code Block |
---|
'multilang_shop' => true |
The main methods
Any overriding of its the ObjectModel methods is bound to influence how all the other classes and methods act. Use with care.
Method name and parameters | Description |
---|
_ |
_ |
Return object validation rules (field validity).
getFields()
Prepare fields for ObjectModel class (add, update).
construct($id = NULL, $id_lang = NULL) | Build object. |
save($nullValues = false, $autodate = true)
add |
($autodate = true, $nullValues = false) | Save current object to database (add or update). |
update($nullValues = false)
associateTo(integer|array $id_shops) | Associate an item to its context. |
delete() | Delete current object from database. |
deleteImage(mixed $force_delete = false) | Delete images associated with the object. |
deleteSelection($selection) | Delete several objects from database. |
getFields() | Prepare fields for ObjectModel class (add, update). |
getValidationRules($className = _CLASS_) | Return object validation rules (field validity). |
save($nullValues = false, $autodate = true) | Save current object to database (add or update). |
toggleStatus() | Toggle object's status in database. |
update($nullValues = false) | Update current object to database. |
validateFields($die = true, $errorReturn = false) | Check for field validity before database interaction. |
The DBQuery class
The DBQuery class is a query builder , which helps you creation create SQL queries. For instance:
Code Block |
---|
$sql = new DbQuery();
$sql->select('*');
$sql->from('cms', 'c');
$sql->innerJoin('cms_lang', 'l', 'c.id_cms = l.id_cms AND l.id_lang = '.(int)$id_lang);
$sql->where('c.active = 1');
$sql->orderBy('position');
return Db::getInstance()->executeS($sql); |
Here are some of the methods from this class:
Method name and parameters | Description |
---|---|
__toString() | Generate and get the query. |
build() | Generate and get the query (return a string). |
from(string $table, mixed $alias = null) | Set table for FROM clause. |
groupBy(string $fields) | Add a GROUP BY restriction. |
having(string $restriction) | Add a restriction in the HAVING clause (each restriction will be separated by an AND statement). |
innerJoin(string $table, string $alias = null, string $on = null) | Add INNER JOIN clause, E.g. $this->innerJoin('product p ON ...'). |
join(string $join) | Add JOIN clause, E.g. $this->join('RIGHT JOIN'._DB_PREFIX_.'product p ON ...');. |
leftJoin(string $table, string $alias = null, string $on = null) | Add LEFT JOIN clause. |
leftOuterJoin(string $table, string $alias = null, string $on = null) | Add LEFT OUTER JOIN clause. |
limit(string $limit, mixed $offset = 0) | Limit results in query. |
naturalJoin(string $table, string $alias = null) | Add NATURAL JOIN clause. |
orderBy(string $fields) | Add an ORDER B restriction. |
select(string $fields) | Add fields in query selection. |
where(string $restriction) | Add a restriction in WHERE clause (each restriction will be separated by an AND statement). |
The Dispatcher
The Dispatcher is one of the main technical features of v1.5. It handles URL redirections. Instead of using multiple files on in the root folder like product.php
, order.php
or category.php
, only one file is used: index.php
. From now on, internal URL will look like index.php?controller=category
, index.php?controller=product
, etc.
...
Code Block |
---|
http://myprestashop.com/index.php?controller=category&id_category=3&id_lang=1 http://myprestashop.com/index.php?controller=product&id_product=1&id_lang=12 |
...and when URL-rewriting is on (or "Friendly URLs"), PrestaShop's Dispatcher will correctly support this URL form:
Code Block |
---|
http://myprestashop.com/en/3-music-ipods http://myprestashop.com/enfr/1-ipod-nano.html |
There are several advantages for this system:
...
In the MVC architecture, a controller Controller manages the synchronization events between the View and the Model, and keeps them up to date. It receives all the user events and triggers the actions to perform.
If an action needs data to be changed, the Controller will "ask" the Model to change the data, and in turn the Model will notify the View that the data has been changed, so that the View can update itself.
All of PrestaShop's controllers actually override the Controller
class through another inheriting class, such as AdminController
, ModuleAdminController
, FrontController
or , ModuleFrontController
, etc.
The FrontController class
...
Controller's filename | Description |
---|---|
AddressController.php | Used by address.php to edit a customer's address. |
AddressesController.php | Used by addresses.php to get customer's addresses. |
AuthController.php | Used by authentication.php for customer login. |
BestSalesController.php | Used by best-sales.php to get best-sellers. |
CartController.php | Used by cart.php to manage the customer's cart. |
CategoryController | 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. |
DiscountController.php | Used by discount.php to get a customer's vouchers. |
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 for customer's personal info. |
IndexController.php | Used by index.php to display the homepage. |
ManufacturerController.php | Used by manufacturer.php to get manufacturers. |
MyAccountController.php | Used by my-account.php to manage customer account. |
NewProductsController.php | Used by new-products.php to get new products. |
OrderConfirmationController.php | Used by order-confirmation.php for order confirmation. |
OrderController.php | Used by order.php to manage the five-step checkout. |
OrderDetailController.php | Used by order-detail.php to get a customer order. |
OrderFollowController.php | Used by order-follow.php to get a customer's returns. |
OrderOpcController.php | Used by order-opc.php to manage one-page checkout. |
OrderReturnController.php | Used by order-return.php to get a merchandise return. |
OrderSlipController.php | Used by order-slip.php to get a customer's credit slips. |
PageNotFoundController.php | Used by 404.php to manage the "Page not found" page. |
ParentOrderController.php | Manages shared order code. |
PasswordController.php | Used by password.php to reset a lost password. |
PricesDropController.php | Used by prices-drop.php to get discounted products. |
ProductController.php | Used by product.php to get a product. |
SearchController.php | Used by search.php to get search results. |
SitemapController.php | Used by sitemap.php to get the sitemap. |
StoresController.php | Used by stores.php to get store information. |
StoresControllerSupplierController.php | Used by supplier.php to get suppliers. |
...
For instance, when working with the category Category controller:
- File:
/controllers/CategoryController.php
- Class:
CategoryControllerCore
...
For instance, when overriding the category Category controller:
- File:
/override/controllers/front/CategoryController.php
- Class:
CategoryController
...
Data stored in a visitor/client's cookie
Token | Description |
---|---|
date_add | The date and time the cookie was created (in YYYY-MM-DD HH:MM:SS format). |
id_lang | The ID of the selected language. |
id_currency | The ID of the selected currency. |
last_visited_category | The ID of the last visited category of product listings. |
ajax_blockcart_display | Whether the cart block is "expanded" or "collapsed". |
viewed | The IDs of recently viewed products as a comma-separated list. |
id_wishlist | The ID of the current wishlist displayed in the wishlist block. |
checkedTOS | Whether the "Terms of service" checkbox has been ticked (1 if it has and 0 if it hasn't) |
id_guest | The guest ID of the visitor when not logged in. |
id_connections | The connection ID of the visitor's current session. |
id_customer | The customer ID of the visitor when logged in. |
customer_lastname | The last name of the customer. |
customer_firstname | The first name of the customer. |
logged | Whether the customer is logged in. |
passwd | The MD5 hash of the _COOKIE_KEY_ in config/settings.inc.php and the password the customer used to log in. |
The email address that the customer used to log in. | |
id_cart | The ID of the current cart displayed in the cart block. |
checksum | The Blowfish checksum used to determine whether the cookie has been modified by a third party. The customer will be logged out and the cookie deleted if the checksum doesn't match. |
Data stored in an employee/administrator's cookie
Token | Description |
---|---|
date_add | The date and time the cookie was created (in YYYY-MM-DD HH:MM:SS format). |
id_lang | The ID of the selected language. |
id_employee | The ID of the employee. |
lastname | The last name of the employee. |
firstname | The first name of the employee. |
The email address the employee used to log in. | |
profile | The ID of the profile that determines which tabs the employee can access. |
passwd | The MD5 hash of the _COOKIE_KEY_ in config/settings.inc.php and the password the employee used to log in. |
checksum | The Blowfish checksum used to determine whether the cookie has been modified by a third party. If the checksum doesn't match, the customer will be logged out and the cookie is deleted . |
Hooks
Hooks are a way to associate your code to some specific PrestaShop events.
...
This method receives one (and only one) argument: an array of the contextual information sent to the hook.
Code Block |
---|
public function hookDisplayNameOfHook($params) { // Your code. } |
...
It is easy to call a hook from within a template file (.tpl
): you simply have to use its name with the hook
function. You can add the name of a module that you want the hook execute.
For instance:
Code Block |
---|
{hook h='displayLeftColumn' mod='blockcart'} |
...
You can create new PrestaShop hooks by adding a new record in the ps_hook
table in your MySQL database. You could do it the hard way:
Code Block |
---|
INSERT INTO `ps_hook` (`name`, `title`, `description`) VALUES ('nameOfHook', 'The name of your hook', 'This is a custom hook!'); |
Yes, you can do it like that...... but you need to know that, with PrestaShop 1.5, you don't need PrestaShop enables you to do it .Now, when your module execute the install method and you want to register a hook, you do it like thatthe easy way:
Code Block |
---|
$this->registerHook('NameOfHook'); |
...