Примечание. Это руководство предназначено для osCommerce v4.


Основные положения:

1. Все расширения должны быть помещены в отдельную папку.

2. Имя файла класса должно совпадать с именем папки.

3. Шаблоны должны быть помещены в папку "views".

*** Виджеты ***

если вы хотите использовать виджеты в расширениях

1. Добавить метод getWidgets с параметром $type и описать виджеты в массиве

пример:

return [

           [

               'name' => 'CustomerLoyalty\ShoppingCart', 'title' => 'Customer Loyalty Info Box', 'description' => '', 'type' => 'cart',

           ],

       ];

в этом случае ShoppingCart (в подпапке \ShoppingCart) является виджетом ( ShoppingCart.php), который можно использовать для настройки тем.

2. чтобы отобразить дополнительные настройки виджета, используйте метод showSettings

пример:

  public static function showSettings($settings){

       return self::begin()->render('settings.tpl', ['settings' => $settings]);

   }

*** Начальная загрузка ***

если вы хотите использовать персональные контроллеры

1) Создайте класс в файле с именем Bootstrap.php и поместите в корневой каталог вашего расширения.

use yii\base\Application;

use yii\base\BootstrapInterface;

class Bootstrap implements BootstrapInterface {

   public function bootstrap($app) {

       \Yii::setAlias('@your-extension-alias', dirname(__FILE__));

       if ($app instanceof \yii\web\Application) {

           if ($app->id == 'app-frontend') {

               $app->controllerMap = array_merge($app->controllerMap, [

                   'frontend-controller' => ['class' => 'common\extensions\your-extension\frontend\controllers\your-controller'],

               ]);

           } elseif ($app->id == 'app-backend') {

               $app->controllerMap = array_merge($app->controllerMap, [

                   'backend-controller' => ['class' => 'common\extensions\your-extension\backend\controllers\your-controller'],

               ]);

           }

       }

   }

}

2) включите ваше расширение и попробуйте запустить действие index https://yoursite/frontend-controller

*** Меню администратора ***

если вы хотите использовать меню в расширениях

1. Добавьте метод getAdminMenu

*** Hooks ***

если вы хотите использовать хуки в расширениях

getAdminHooks

Кроме того список доступных значений page_name и page_area:

'customers/customeredit', ''

'customers/customeredit', 'personal-block'

'customers/customeredit', 'left-column'

'customers/customeredit', 'right-column'

'categories/brandedit', ''

'categories/brandedit', 'tab-navs'

'categories/brandedit', 'tab-content'

'categories/brandedit', 'main-tab'

'categories/brandedit', 'desc-tab'

'categories/brandedit', 'seo-tab'

'categories/productedit', ''

'categories/productedit', 'details-left-column'

'categories/productedit', 'details-right-column'

'categories/categoryedit', ''

'categories/categoryedit', 'tab-navs'

'categories/categoryedit', 'tab-content'

'categories/categoryedit', 'main-tab'

'categories/categoryedit', 'desc-tab'

'categories/categoryedit', 'seo-tab'

'orders/process-order', ''

'orders/process-order', 'totals-block'

'orders/process-order', 'btn-bar-top'

'orders/process-order', 'btn-bar-bottom'


*** Установщик расширения ***

1) extends \common\classes\modules\ModuleExtensions

2) install (example)

   public function install($platform_id){

       parent::install($platform_id);// install in liek other modules

       // install extention envirenment

       $migration = new \common\classes\Migration;

       $migration->addTranslation(['admin/main'], [

           //add keys

       ]);

       return;

   }

2) ckeck extension enabled - use \common\helpers\Acl::checkExtensionAllowed($extName, 'allowed')

   public static function allowed() {

       return self::enabled();

   }