Inter-module compatibility
Vendor acronyms and prefixes
Vendor Prefixes
Use a prefix and a vendor namespace consistently.
Use your prefix for your:
database tables
additional fields
config parameters
language constants
Although the following page is no longer actively maintained, it can still help you avoid common or already-used prefixes: forum.oxid-esales.com/t/modulkurzel-fur-namespaces-extension-acronyms-for-namespaces/98381.
Namespaces
Also, make sure to use your namespace (with the namespace of your module) inside all of your classes.
An example from the Module Template module:
namespace OxidEsales\ModuleTemplate\Controller;
class GreetingController extends FrontendController
{
// ...
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 template module’s class Basket which is an extension for the shop’s basket class with the
namespace \\OxidEsales\Eshop\Application\Model\Basket. Detailed documentation regarding it can be found here.
/**
* Method overrides eShop method and adds logging functionality.
*
* @param string $productID
* @param int $amount
* @param null|array $sel
* @param null|array $persParam
* @param bool|false $shouldOverride
* @param bool|false $isBundle
* @param null|string $oldBasketItemId
*
* @see \OxidEsales\Eshop\Application\Model\Basket::addToBasket()
*
* @return BasketItem|null
*/
public function addToBasket(
$productID,
$amount,
$sel = null,
$persParam = null,
$shouldOverride = false,
$isBundle = false,
$oldBasketItemId = null
) {
$basketItemLogger = $this->getServiceFromContainer(BasketItemLogger::class);
$basketItemLogger->log($productID);
return parent::addToBasket($productID, $amount, $sel, $persParam, $shouldOverride, $isBundle, $oldBasketItemId);
}
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(OxidEsales\Eshop\Application\Model\Article::class);