Controllers und View erweitern¶
Ab der Version 1.5.1 können die AngularJS-Controller und -Views erweitert werden.
Syntax¶
Rufen Sie in der custom/app.php über den UI-Manager die Funktion extendRoute() auf und geben die entsprechenden Parameter an.
/custom/app.php
1 2 3 4 5 | $app['uiManager']->extendRoute(ROUTE_NAME, CUSTOM_CONTROLLER_NAME, CUSTOM_TEMPLATE, OPTIONS ); |
Parameter¶
Parameter | Typ | Optional | Beschreibung |
---|---|---|---|
ROUTE_NAME | String | Pflicht | Zu überschreibende Route. Siehe Erweiterbare Routen Folgemde Routen können erweitert werden. |
CUSTOM_CONTROLLER_NAME | String | optional | Name des eigenen Controllers. Wird ein benutzerdefinierter Controller verwendet, muss dieser über den UI-Manager-Methode addJSFile eingebunden werden. |
CUSTOM_TEMPLATE | String | optional | Name, bzw. Pfad zu einem benutzerdefiniertem Template, relativ zum Ordner /custom/Frontend/ui/default/views |
OPTIONS | Array | optional | Für die Routen list und list-pim kann die Erweiterung auf eine bestimmte Entität begrenzt werden, z.B: array('entity' => 'Customer') |
Erweiterbare Routen¶
ROUTE_NAME | Route |
---|---|
default | / |
error | /error |
login | /login |
logout | /logout |
list | /list/:entity |
list-pim | /list/PIM/:entity |
settings | /settings |
files | /files |
Kontroller erweitern¶
Vorlage¶
Der Controller muss dabei vom ursprünglichen Contentfly-Controller über angular.extend abgeleitet werden. Im eigenen Controller kann auf die Methoden des übergeordneten Controllers zugegriffen und mit eigenen Methoden erweitert werden. Die jeweiligen Parameter-Listen müssen mit dem zu erweiternden Controller übereinstimmen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | (function() { 'use strict'; angular .module('app') .controller('CustomCtrl', CustomCtrl); function CustomCtrl($controller, [Konstruktor-Parameter),...]){ var vm = this; angular.extend(this, $controller([Contentfly Kontroller], {[Erweiterungs-Parameter,...], $extend: this })); //Functions vm.customMethod = customMethod; /////////////////////////////////// function customMethod(){ //Benutzerdefinierte Methoden ... } } })(); |
Contentfly Kontroller¶
Setzen Sie in der Methode angular.extend den zu erweiternden Contentfly-Controller, z.B. ListCtrl ein.
Konstruktor-Parameter¶
Im Konstruktur müssen die Parameter des zu erweiternden Controllers ohne den Parameter $extend als kommagetrennte Liste angegeben werden.
Beispiel ListCtrl
1 | function ListCtrl($scope, $rootScope, $cookies, localStorageService, $stateParams, $state, $http, $uibModal, pimEntity, $window, EntityService, $document, $location, FileSaver, Blob, $extend){ |
CustomCtrl
1 | function CustomCtrl($controller, $scope, $rootScope, $cookies, localStorageService, $stateParams, $state, $http, $uibModal, pimEntity, $window, EntityService, $document, $location, FileSaver, Blob, $extend){ |
Erweiterungs-Parameter¶
In der Methode angularExtend müssen die gleichen Parameter wie im Konstruktor als Key-Value-Liste übergeben werden.
CustomCtrl
1 | angular.extend(this, $controller('ListCtrl', {$scope: $scope, $rootScope: $rootScope, $cookies: $cookies, localStorageService: localStorageService, $stateParams: $stateParams, $http: $http, $uibModal: $uibModal, pimEntity: pimEntity, $window: $window, EntityService: EntityService, $document: $document, $location: $location, FileSaver: FileSaver, Blob: Blob, $extend: this })); |
Templates überschreiben¶
Im Gegensatz zu den Controllern können Templates nicht über Vererbung erweiter werden. Wird ein benutzerdefiniertes Template verwenden, überschreibt es das ursprüngliche Template. In den relevanten Contently-Templates sind relevante Codeteile (Header, Content, ...) in eigene Untertemplates ausgelagert. Diese können per ng-include wiederverwendet werden.
Als Beispiel sehen Sie das Contentfly-Template für die Listenansicht. Im einfachsten Fall kopieren Sie den Code 1:1 in Ihr Template und passen die relevanten Stellen entsprechend an.
appcms/PIM-UI/default/assets/views/list.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <pim-plugin key="LIST_HEADER_PREPEND" uiblocks="uiblocks"></pim-plugin> <div class="row header" data-block="header"> <div class="col-xl-10 col-xl-offset-1 col-lg-12 col-lg-offset-0"> <ng-include src="'/ui/default/views/list/header.html'"></ng-include> </div> </div> <pim-plugin key="LIST_CONTENT_PREPEND" uiblocks="uiblocks"></pim-plugin> <div class="row"> <div class="col-xl-10 col-xl-offset-1 col-lg-12 col-lg-offset-0"> <ng-include src="'/ui/default/views/list/list.html'"></ng-include> </div> </div> <pim-plugin key="LIST_CONTENT_APPEND" uiblocks="uiblocks"></pim-plugin> |
Beispiel¶
Im folgenden Beispiel wird die Route /list/Customer mit einem eigenen Controller und Template erweitert.
/custom/app.php
1 2 | $app['uiManager']->extendRoute('list, 'CustomListCtrl, 'controllers/custom-list.html', array('entity' => 'Customer')); $app['uiManager']->addJSFile('controllers/custom-list.controller.js'); |
/custom/Frontend/ui/default/scripts/controllers/custom-list-controller.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | (function() { 'use strict'; angular .module('app') .controller('CustomListCtrl', CustomListCtrl); function CustomListCtrl($controller, $scope, $rootScope, $cookies, localStorageService, $stateParams, $http, $uibModal, pimEntity, $window, EntityService, $document, $location, FileSaver, Blob){ var vm = this; angular.extend(this, $controller('ListCtrl', {$scope: $scope, $rootScope: $rootScope, $cookies: $cookies, localStorageService: localStorageService, $stateParams: $stateParams, $http: $http, $uibModal: $uibModal, pimEntity: pimEntity, $window: $window, EntityService: EntityService, $document: $document, $location: $location, FileSaver: FileSaver, Blob: Blob, $extend: this })); //Functions vm.customMethod = customMethod; /////////////////////////////////// function customMethod(){ //Benutzerdefinierte Methoden ... } } })(); |
Im benutzerdefinierten Template kann der Header und die eigentliche Liste über ng-include eingebunden werden. Im Beispiel wird ein eigener Header verwendet und die ursprüngliche Listenansicht 1:1 eingebunden.
/custom/Frontend/ui/default/views/controllers/custom-list.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <pim-plugin key="LIST_HEADER_PREPEND" uiblocks="uiblocks"></pim-plugin> <div class="row header" data-block="header"> <div class="col-xl-10 col-xl-offset-1 col-lg-12 col-lg-offset-0"> <h1>Willkommen</h1> <button type="button" ng-click="vm.customMethod()">Öffne meine Methode</button> </div> </div> <pim-plugin key="LIST_CONTENT_PREPEND" uiblocks="uiblocks"></pim-plugin> <div class="row"> <div class="col-xl-10 col-xl-offset-1 col-lg-12 col-lg-offset-0"> <ng-include src="'/ui/default/views/list/list.html'"></ng-include> </div> </div> <pim-plugin key="LIST_CONTENT_APPEND" uiblocks="uiblocks"></pim-plugin> |