Inter-module compatibility¶
Vendor acronyms and prefixes¶
Vendor Prefixes¶
A prefix and a vendor namespace should be used consistently, and they should be registered at OXID eSales to prevent use by others. Use your prefix for your:
- database tables
- additional fields
- config parameters
- language constants
Namespaces¶
Also, your namespace (with the namespace of your module) should be used inside all of your classes. An example from the PayPal module:
namespace OxidEsales\PayPalModule\Controller;
class OrderController extends OrderController_parent
{
// ...
Extensions for existing methods¶
Parent calls¶
When writing extensions for methods that do variable assignments or execute other calls, be sure to add a parent call.
This is an example from the oepaypal module class OrderController
which is an extension for the shop’s class with the
namespace \OxidEsales\Eshop\Application\Controller\OrderController
.
/**
* Returns PayPal user
*
* @return \OxidEsales\Eshop\Application\Model\User
*/
public function getUser()
{
$user = parent::getUser();
$userId = $this->getSession()->getVariable("oepaypal-userId");
if ($this->isPayPal() && $userId) {
$payPalUser = oxNew(\OxidEsales\Eshop\Application\Model\User::class);
if ($payPalUser->load($userId)) {
$user = $payPalUser;
}
}
return $user;
}
Method visibility¶
Do not change the visibility of methods that are extended. Visibilities can be public
, protected
or private
.
If you want to extend an original method, do not change your new method’s visibility from protected
to public
or
from private
to protected
.
Use oxNew()¶
For creating objects, always use the oxNew() function in order to have the module chain (and all of its methods) available:
$Article = oxNew('Article');