Skip to content
  1. Extras
  2. MiniShop3
  3. Development
  4. Events
  5. Vendor

Vendor events

Events for tracking vendor (brand) operations.

msOnBeforeVendorCreate

Fired before creating a vendor.

Parameters

ParameterTypeDescription
msVendormsVendorVendor object
modestringMode: new

Aborting the operation

php
<?php
switch ($modx->event->name) {
    case 'msOnBeforeVendorCreate':
        /** @var \MiniShop3\Model\msVendor $vendor */
        $vendor = $scriptProperties['msVendor'];

        $existing = $modx->getObject(\MiniShop3\Model\msVendor::class, [
            'name' => $vendor->get('name'),
        ]);

        if ($existing) {
            $modx->event->output('A vendor with this name already exists');
            return;
        }
        break;
}

msOnVendorCreate

Fired after creating a vendor.

Parameters

ParameterTypeDescription
msVendormsVendorCreated vendor object
modestringMode: new

Example

php
<?php
switch ($modx->event->name) {
    case 'msOnVendorCreate':
        $vendor = $scriptProperties['msVendor'];

        $modx->log(modX::LOG_LEVEL_INFO, sprintf(
            '[Vendor] Created vendor: %s (ID: %d)',
            $vendor->get('name'),
            $vendor->get('id')
        ));

        // $page = $modx->newObject('modResource', [...]);
        break;
}

msOnBeforeVendorUpdate

Fired before updating a vendor.

Parameters

ParameterTypeDescription
msVendormsVendorVendor object
modestringMode: upd

Example

php
<?php
switch ($modx->event->name) {
    case 'msOnBeforeVendorUpdate':
        $vendor = $scriptProperties['msVendor'];

        $modx->eventData['vendor_before'] = [
            'name' => $vendor->getPrevious('name'),
            'logo' => $vendor->getPrevious('logo'),
        ];
        break;
}

msOnVendorUpdate

Fired after updating a vendor.

Parameters

ParameterTypeDescription
msVendormsVendorUpdated vendor object
modestringMode: upd

Example

php
<?php
switch ($modx->event->name) {
    case 'msOnVendorUpdate':
        $vendor = $scriptProperties['msVendor'];

        $before = $modx->eventData['vendor_before'] ?? [];

        if ($before['name'] !== $vendor->get('name')) {
            $modx->log(modX::LOG_LEVEL_INFO, sprintf(
                '[Vendor] Renamed: %s → %s',
                $before['name'],
                $vendor->get('name')
            ));
        }
        break;
}

msOnBeforeVendorDelete

Fired before deleting a vendor.

Parameters

ParameterTypeDescription
msVendormsVendorVendor object to delete

Aborting the operation

php
<?php
switch ($modx->event->name) {
    case 'msOnBeforeVendorDelete':
        $vendor = $scriptProperties['msVendor'];

        $productCount = $modx->getCount(\MiniShop3\Model\msProductData::class, [
            'vendor_id' => $vendor->get('id'),
        ]);

        if ($productCount > 0) {
            $modx->event->output(sprintf(
                'Cannot delete vendor: %d products are linked',
                $productCount
            ));
            return;
        }
        break;
}

msOnVendorDelete

Fired after deleting a vendor.

Parameters

ParameterTypeDescription
msVendormsVendorDeleted vendor object

Example

php
<?php
switch ($modx->event->name) {
    case 'msOnVendorDelete':
        $vendor = $scriptProperties['msVendor'];

        $modx->log(modX::LOG_LEVEL_INFO, sprintf(
            '[Vendor] Deleted vendor: %s (ID: %d)',
            $vendor->get('name'),
            $vendor->get('id')
        ));

        $modx->cacheManager->delete('vendors_list');
        break;
}

Full example: catalog sync

php
<?php
/**
 * Plugin: Vendor sync
 * Events: msOnVendorCreate, msOnVendorUpdate, msOnVendorDelete
 */

switch ($modx->event->name) {

    case 'msOnVendorCreate':
        $vendor = $scriptProperties['msVendor'];

        $brandsParent = $modx->getOption('brands_resource_id', null, 0);
        if ($brandsParent) {
            $page = $modx->newObject('modResource', [
                'pagetitle' => $vendor->get('name'),
                'alias' => $modx->filterPathSegment($vendor->get('name')),
                'parent' => $brandsParent,
                'template' => $modx->getOption('brands_template_id', null, 0),
                'published' => 1,
                'content' => $vendor->get('description'),
            ]);
            $page->setTVValue('vendor_id', $vendor->get('id'));
            $page->save();

            $vendor->set('resource_id', $page->get('id'));
            $vendor->save();
        }
        break;

    case 'msOnVendorUpdate':
        $vendor = $scriptProperties['msVendor'];

        $resourceId = $vendor->get('resource_id');
        if ($resourceId) {
            $page = $modx->getObject('modResource', $resourceId);
            if ($page) {
                $page->set('pagetitle', $vendor->get('name'));
                $page->set('content', $vendor->get('description'));
                $page->save();
            }
        }
        break;

    case 'msOnVendorDelete':
        $vendor = $scriptProperties['msVendor'];

        $resourceId = $vendor->get('resource_id');
        if ($resourceId) {
            $page = $modx->getObject('modResource', $resourceId);
            if ($page) {
                $page->remove();
            }
        }
        break;
}