public function actionIndex() { $this->needAuthenticate(); $galleryId = Param::get('gallery_id')->asInteger(true, 'Недопустимое значение номера галереи.'); /** @var Gallery $oGallery */ $oGallery = DataSource::factory(Gallery::cls(), $galleryId); if (!$oGallery) { SCMSNotificationLog::instance()->pushError("Запрошенная галерея с номером \"{$galleryId}\" не существует."); $this->Frame->render(); return; } $pageNumber = Param::get('gallery-item-page', false)->asInteger(false); $itemsPerPage = Param::get('gallery-item-items-per-page', false)->asInteger(false); $manifest = $this->ModuleInstaller->getManifest($this->ModuleDirectory); $dataGridView = new ViewDataGrid(); $retriever = new GalleryRetriever(); $dataGrid = new DataGrid('item', '', 'id', $manifest['meta']['alias'], $pageNumber, $itemsPerPage, $manifest['meta']['description']); $dataGrid->getMenu()->addElement(new Item('Добавить элемент', "/admin/modules/gallery/item/edit/?gallery_id={$oGallery->id}")); $dataGrid->addAction(new Action('id', "/admin/modules/gallery/item/edit/?gallery_id={$oGallery->id}", 'edit', '', [], ['class' => 'glyphicon glyphicon-pencil'], 'Редактировать'))->addAction(new Action('id', '/admin/modules/gallery/item/delete/', 'delete', '', [], ['class' => 'glyphicon glyphicon-trash'], 'Удалить', true)); $dataGrid->addHeader(new Header('id', '№', null, ['class' => 'text-center', 'style' => 'width: 50px;'], ['class' => 'text-center'], true, Param::get('item-filter-id', false)->asString(false)))->addHeader(new Header('name', 'Название', null, ['class' => 'text-center', 'style' => 'width: 250px;'], [], true, Param::get('item-filter-name', false)->asString(false)))->addHeader(new Header('description', 'Описание', new ViewCutString(20, true, ['class' => 'content-to-modal', 'style' => 'cursor: pointer;'], ['style' => 'display: none;']), ['class' => 'text-center'], ['class' => 'modal-display-field'], true, Param::get('item-filter-description', false)->asString(false)))->addHeader(new Header('path', 'Миниатюра', new ViewCondition(new ViewImageLink(true, ['class' => 'fancybox'], ['class' => 'img-rounded', 'style' => 'height: 20px;']), [['field' => 'path', 'value' => '/public/assets/images/system/no-image.svg', 'view' => new ViewStub('<span class="glyphicon glyphicon-picture"></span>')]]), ['class' => 'text-center', 'style' => 'width: 50px;'], ['class' => 'text-center']))->addHeader(new Header('position', 'Позиция', null, ['class' => 'text-center', 'style' => 'width: 50px;'], ['class' => 'text-center'], true, Param::get('item-filter-position', false)->asString(false))); $galleries = $retriever->getGalleryItems($oGallery, $dataGrid->getFilterConditions(), $dataGrid->Pagination->getLimit(), $dataGrid->Pagination->getOffset()); $dataSet = new ArrayDataSet($galleries); $dataGrid->addDataSet($dataSet); $dataGridView->dataGrid = $dataGrid; // Подготовка хлебных крошек $viewBreadcrumbs = new ViewBreadcrumbs(); $viewBreadcrumbs->Breadcrumbs = [new Breadcrumb('Панель управления', '/admin'), new Breadcrumb('Галереи', '/modules/gallery'), new Breadcrumb("Элементы галереи \"{$oGallery->name}\"", '')]; $this->Frame->bindView('breadcrumbs', $viewBreadcrumbs); $this->Frame->bindView('content', $dataGridView); $this->Frame->render(); }
public function actionIndex() { if (CoreFunctions::isAJAX()) { if (!$this->EmployeeAuthentication->authenticated()) { SCMSNotificationLog::instance()->pushError('Нет доступа.'); $this->Response->send(); return; } } else { $this->needAuthenticate(); } $siteuserId = Param::get('id')->noEmpty('Параметр обязателен для заполнения.')->asInteger(true, "Неверно задан параметр."); /** @var Siteuser $oSiteuser */ $oSiteuser = DataSource::factory(Siteuser::cls(), $siteuserId); if ($oSiteuser->id) { $oSiteuser->deleted = true; try { $oSiteuser->commit(); SCMSNotificationLog::instance()->pushMessage("Пользователь \"{$oSiteuser->name}\" успешно удалён."); } catch (Exception $e) { SCMSNotificationLog::instance()->pushError($e->getMessage()); } } else { SCMSNotificationLog::instance()->pushError("Пользователь с ID {$siteuserId} не найден"); } $this->Response->send(); }
public function actionIndex() { $this->needAuthenticate(); $galleryItemId = Param::get('id', false)->asInteger(false); $galleryId = Param::get('gallery_id')->asInteger(true, 'Недопустимое значение номера галереи.'); /** @var GalleryItem $oGalleryItem */ $oGalleryItem = DataSource::factory(GalleryItem::cls(), $galleryItemId); /** @var Gallery $oGallery */ $oGallery = DataSource::factory(Gallery::cls(), $galleryId); if ($oGalleryItem->isNew() && $oGallery->isNew()) { SCMSNotificationLog::instance()->pushError('Недопустимое значение параметра!'); $this->Frame->render(); return; } $view = new ViewEditForm(); $view->GalleryItem = $oGalleryItem; $view->Gallery = $oGallery; // Подготовка хлебных крошек $viewBreadcrumbs = new ViewBreadcrumbs(); $viewBreadcrumbs->Breadcrumbs = [new Breadcrumb('Панель управления', '/admin'), new Breadcrumb('Галереи', '/modules/gallery'), new Breadcrumb("Галерея \"{$oGallery->name}\"", "/item/?gallery_id={$oGallery->id}")]; if ($oGalleryItem->id !== null) { $viewBreadcrumbs->Breadcrumbs[] = new Breadcrumb("Редактирование \"{$oGalleryItem->name}\"", ''); } else { $viewBreadcrumbs->Breadcrumbs[] = new Breadcrumb('Добавление нового элемента галереи', ''); } $view->backUrl = CoreFunctions::buildUrlByBreadcrumbs($viewBreadcrumbs->Breadcrumbs, 1); $this->Frame->bindView('breadcrumbs', $viewBreadcrumbs); $this->Frame->bindView('content', $view); $this->Frame->render(); }
public function actionIndex() { $this->needAuthenticate(); $isCategory = Param::get('is_category')->asInteger(true, "Недопустимое значение параметра."); $id = Param::get('id', false)->asInteger(false); $parentId = Param::get('parent_pk', false)->asInteger(false); /** @var Category $oCategories */ $oCategories = DataSource::factory(Category::cls()); $oCategories->builder()->where('deleted=0'); /** @var Category[] $aCategories */ $aCategories = $oCategories->findAll(); if ($isCategory == 1) { $viewCatalogueEdit = new ViewCategoryEdit(); /** @var Category $oCategory */ $oCategory = DataSource::factory(Category::cls(), $id); $viewCatalogueEdit->oCategory = $oCategory; $viewCatalogueEdit->aCategories = $aCategories; $viewCatalogueEdit->parentId = $oCategory->isNew() ? $parentId : $oCategory->category_id; } else { $viewCatalogueEdit = new ViewItemEdit(); /** @var Item $oItem */ $oItem = DataSource::factory(Item::cls(), $id); $viewCatalogueEdit->oItem = $oItem; $viewCatalogueEdit->aCategories = $aCategories; $viewCatalogueEdit->parentId = $oItem->isNew() ? $parentId : $oItem->category_id; } // Подготовка хлебных крошек $viewBreadcrumbs = new ViewBreadcrumbs(); $viewBreadcrumbs->Breadcrumbs = [new Breadcrumb('Панель управления', '/admin'), new Breadcrumb('Каталог', '/modules/catalogue')]; if ($parentId) { $breadcrumbsParentPK = $parentId; } elseif ($isCategory == 1 && isset($oCategory)) { $breadcrumbsParentPK = $oCategory->category_id; } elseif (!$isCategory && isset($oItem)) { $breadcrumbsParentPK = $oItem->category_id; } else { $breadcrumbsParentPK = 0; } $catalogueEditBreadcrumbs = []; while ($breadcrumbsParentPK) { /** @var Category $oParentCategory */ $oParentCategory = DataSource::factory(Category::cls(), $breadcrumbsParentPK); $catalogueEditBreadcrumbs[] = new Breadcrumb($oParentCategory->name, "?parent_pk={$oParentCategory->getPrimaryKey()}", true); $breadcrumbsParentPK = $oParentCategory->category_id; } $viewBreadcrumbs->Breadcrumbs = array_merge($viewBreadcrumbs->Breadcrumbs, array_reverse($catalogueEditBreadcrumbs)); if ($id && isset($oCategory)) { $viewBreadcrumbs->Breadcrumbs[] = new Breadcrumb("Редактирование \"{$oCategory->name}\"", ''); } elseif ($id && isset($oItem)) { $viewBreadcrumbs->Breadcrumbs[] = new Breadcrumb("Редактирование \"{$oItem->name}\"", ''); } else { $lastBreadcrumb = 'Добавление новой ' . ($isCategory == 1 ? 'категории' : 'позиции'); $viewBreadcrumbs->Breadcrumbs[] = new Breadcrumb($lastBreadcrumb, ''); } $viewCatalogueEdit->backUrl = CoreFunctions::buildUrlByBreadcrumbs($viewBreadcrumbs->Breadcrumbs, 1); $this->Frame->bindView('breadcrumbs', $viewBreadcrumbs); $this->Frame->bindView('content', $viewCatalogueEdit); $this->Frame->render(); }
public function actionIndex() { $this->needAuthenticate(); $structureId = Param::get('id')->asInteger(); /** @var Structure $oStructure */ $oStructure = DataSource::factory(Structure::cls(), $structureId); $name = $oStructure->name; $this->deepDelete($oStructure); SCMSNotificationLog::instance()->pushMessage("Структура \"{$name}\" успешно удалена."); $this->Response->send(); }
public function actionIndex() { $this->needAuthenticate(); $this->Frame->addCss('\\public\\assets\\css\\edit-form.css'); $this->Frame->addCss('\\public\\assets\\css\\main-menu.css'); $moduleId = Param::get('pk')->asInteger(); $view = new ViewModuleShow(); $module = DataSource::factory(Module::cls(), $moduleId); $view->module = $module; $this->Frame->bindView('content', $view); $this->Frame->render(); }
public function actionIndex() { $this->needAuthenticate(); $galleryItemId = Param::get('id')->noEmpty('Не задан обязательный параметр.')->asInteger(true, 'Параметр должен быть числом.'); /** @var GalleryItem $oGalleryItem */ $oGalleryItem = DataSource::factory(GalleryItem::cls(), $galleryItemId); if (is_null($oGalleryItem) || !$oGalleryItem->getPrimaryKey()) { SCMSNotificationLog::instance()->pushError('Элемент галереи не найден.'); } else { SCMSNotificationLog::instance()->pushMessage("Элемент \"{$oGalleryItem->name}\" галереи {$oGalleryItem->getGallery()->name} успешно удален."); $oGalleryItem->delete(); } $this->Response->send(); }
public function actionIndex() { $this->needAuthenticate(); $employeeId = Param::get('id')->noEmpty('Параметр обязателен для заполнения.')->asInteger(true, "Неверно задан параметр."); /** @var Employee $oEmployee */ $oEmployee = DataSource::factory(Employee::cls(), $employeeId); if ($oEmployee->id) { SCMSNotificationLog::instance()->pushMessage("Сотрудник \"{$oEmployee->name}\" успешно удалён."); $oEmployee->deleted = true; $oEmployee->commit(); } else { SCMSNotificationLog::instance()->pushError("Сотрутник с ID {$employeeId} не найден"); } $this->Response->send(); }
public function actionIndex() { $this->needAuthenticate(); $pk = Param::get('id', true)->asInteger(true, 'Не указан обязательный параметр.'); /** @var Employee $oEmployee */ $oEmployee = DataSource::factory(Employee::cls(), $pk); $view = new ViewEmployeeEdit(); $view->employee = $oEmployee; // Подготовка хлебных крошек $viewBreadcrumbs = new ViewBreadcrumbs(); $viewBreadcrumbs->Breadcrumbs = [new Breadcrumb('Панель управления', '/admin'), new Breadcrumb('Сотрудники', '/modules/employees'), new Breadcrumb("Редактирование \"{$oEmployee->email}\"", '')]; $this->Frame->bindView('breadcrumbs', $viewBreadcrumbs); $this->Frame->bindView('content', $view); $this->Frame->render(); }
public function actionIndex() { $this->needAuthenticate(); $pageId = Param::get('id')->noEmpty('Не задан обязательный параметр.')->asInteger(true, 'Параметр должен быть числом.'); /** @var Page $oPage */ $oPage = DataSource::factory(Page::cls(), $pageId); if (is_null($oPage) || !$oPage->getPrimaryKey()) { SCMSNotificationLog::instance()->pushError('Статическая страница не найдена.'); } else { SCMSNotificationLog::instance()->pushMessage("Страница \"{$oPage->name}\" успешно удалена."); $oPage->deleted = true; $oPage->commit(); } $this->Response->send(); }
public function actionIndex() { $this->needAuthenticate(); $parentCategoryId = Param::get('parent_pk', false); if ($parentCategoryId->exists()) { $parentCategoryId = $parentCategoryId->asInteger(true, 'Недопустимое значение параметра!'); /** @var Category $oParentCategoryFact */ $oParentCategoryFact = DataSource::factory(Category::cls(), $parentCategoryId); if ($oParentCategoryFact->isNew()) { SCMSNotificationLog::instance()->pushError('Недопустимое значение параметра!'); $this->Frame->render(); return; } } else { $parentCategoryId = 0; } $pageNumber = Param::get('catalogue-page', false)->asInteger(false); $itemsPerPage = Param::get('catalogue-items-per-page', false)->asInteger(false); $manifest = $this->ModuleInstaller->getManifest($this->ModuleDirectory); $dataGridView = new ViewDataGrid(); $retriever = new CatalogueRetriever(); $dataGrid = new DataGrid('catalogue', '/admin/modules/catalogue/', 'id', $manifest['meta']['alias'], $pageNumber, $itemsPerPage, $manifest['meta']['description']); $dataGrid->addHiddenField('parent_pk', $parentCategoryId); $dataGrid->getMenu()->addElement(new DataGrid\Menu\Item('Добавить категорию', '/admin/modules/catalogue/edit/?is_category=1' . ($parentCategoryId ? "&parent_pk={$parentCategoryId}" : '')))->addElement(new DataGrid\Menu\Item('Добавить позицию', '/admin/modules/catalogue/edit/?is_category=0' . ($parentCategoryId ? "&parent_pk={$parentCategoryId}" : ''))); $dataGrid->addAction(new Action('id', '/admin/modules/catalogue/edit/', 'edit', '', ['is_category'], ['class' => 'glyphicon glyphicon-pencil'], 'Редактировать'))->addAction(new Action('id', '/admin/modules/catalogue/delete/', 'delete', '', ['is_category'], ['class' => 'glyphicon glyphicon-trash'], 'Удалить', true)); $dataGrid->addHeader(new Header('id', '№', null, ['class' => 'text-center', 'style' => 'width: 50px;'], ['class' => 'text-center'], true, Param::get('catalogue-filter-id', false)->asString(false)))->addHeader(new Header('is_category', 'Тип', new ViewChange('', [[0, '<span class="glyphicon glyphicon-file"></span>'], [1, '<span class="glyphicon glyphicon-folder-open"></span>']]), ['class' => 'text-center', 'style' => 'width: 50px;'], ['class' => 'text-center'], true, Param::get('catalogue-filter-is_category', false)->asString(false)))->addHeader(new Header('name', 'Наименование', new ViewCondition(new ViewDefault(), [['field' => 'is_category', 'value' => 1, 'view' => new ViewLink('/admin/modules/catalogue/?parent_pk={label}', false, 'id')]]), ['class' => 'text-center'], [], true, Param::get('catalogue-filter-name', false)->asString(false)))->addHeader(new Header('description', 'Описание', new ViewCutString(20, true, ['class' => 'content-to-modal', 'style' => 'cursor: pointer;'], ['style' => 'display: none;']), ['class' => 'text-center'], ['class' => 'modal-display-field'], true, Param::get('catalogue-filter-description', false)->asString(false)))->addHeader(new Header('thumbnail', 'Миниатюра', new ViewCondition(new ViewImageLink(true, ['class' => 'fancybox'], ['class' => 'img-rounded', 'style' => 'height: 20px;']), [['field' => 'thumbnail', 'value' => '/public/assets/images/system/no-image.svg', 'view' => new ViewStub('<span class="glyphicon glyphicon-picture"></span>')]]), ['class' => 'text-center', 'style' => 'width: 50px;'], ['class' => 'text-center']))->addHeader(new Header('price', '<span class="glyphicon glyphicon-ruble" title="Цена"></span>', new ViewMoney('<span class="glyphicon glyphicon-ruble"></span>'), ['class' => 'text-center'], ['class' => 'text-center'], true, Param::get('catalogue-filter-price', false)->asString(false)))->addHeader(new Header('count', '<span class="glyphicon glyphicon-inbox" title="Количество"></span>', null, ['class' => 'text-center'], ['class' => 'text-center'], true, Param::get('catalogue-filter-count', false)->asString(false)))->addHeader(new Header('priority', '<span class="glyphicon glyphicon-sort-by-attributes" title="Приоритет"></span>', null, ['class' => 'text-center', 'style' => 'width: 50px;'], ['class' => 'text-center'], true, Param::get('catalogue-filter-priority', false)->asString(false)))->addHeader(new Header('active', '<span class="glyphicon glyphicon-asterisk" title="Активность"></span>', new ViewSwitch(), ['class' => 'text-center', 'style' => 'width: 50px;'], ['class' => 'text-center'], true, Param::get('catalogue-filter-active', false)->asString(false))); $categoriesAndItems = $retriever->getCategoriesAndItems($parentCategoryId, $dataGrid->getFilterConditions('childs'), $dataGrid->Pagination->getLimit(), $dataGrid->Pagination->getOffset()); $dataSet = new ArrayDataSet($categoriesAndItems); $dataGrid->addDataSet($dataSet); $dataGridView->dataGrid = $dataGrid; // Подготовка хлебных крошек $viewBreadcrumbs = new ViewBreadcrumbs(); $viewBreadcrumbs->Breadcrumbs = [new Breadcrumb('Панель управления', '/admin'), new Breadcrumb('Каталог', '/modules/catalogue')]; $breadcrumbsParentPK = $parentCategoryId; $categoryBreadcrumbs = []; while ($breadcrumbsParentPK) { /** @var Category $oParentCategory */ $oParentCategory = DataSource::factory(Category::cls(), $breadcrumbsParentPK); $categoryBreadcrumbs[] = new Breadcrumb($oParentCategory->name, "?parent_pk={$oParentCategory->getPrimaryKey()}", true); $breadcrumbsParentPK = $oParentCategory->category_id; } $viewBreadcrumbs->Breadcrumbs = array_merge($viewBreadcrumbs->Breadcrumbs, array_reverse($categoryBreadcrumbs)); $this->Frame->bindView('breadcrumbs', $viewBreadcrumbs); $this->Frame->bindView('content', $dataGridView); $this->Frame->render(); }
public function actionIndex() { $this->needAuthenticate(); $frame = $this->Frame; $frame->addCss('/public/assets/js/bower_components/markitup/markitup/skins/markitup/style.css'); $frame->addCss('/public/assets/js/bower_components/markitup/markitup/sets/default/style.css'); $frameName = Param::get('name', false)->asString(false); $view = new ViewEditForm(); $view->frameName = $frameName; // Подготовка хлебных крошек $viewBreadcrumbs = new ViewBreadcrumbs(); $viewBreadcrumbs->Breadcrumbs = [new Breadcrumb('Панель управления', '/admin'), new Breadcrumb('Фреймы', '/modules/frames'), new Breadcrumb($frameName ? "Редактирование фрейма \"{$frameName}\"" : 'Создание нового фрейма', '')]; $view->backUrl = CoreFunctions::buildUrlByBreadcrumbs($viewBreadcrumbs->Breadcrumbs, 1); $frame->bindView('breadcrumbs', $viewBreadcrumbs); $frame->bindView('content', $view); $frame->render(); }
public function actionIndex() { if (CoreFunctions::isAJAX() && !$this->EmployeeAuthentication->authenticated()) { SCMSNotificationLog::instance()->pushError('Нет доступа!'); $this->Response->send(); return; } $this->needAuthenticate(); $frameName = Param::get('name', true)->asString(true, 'Недопустимое имя фрейма!'); $FrameFile = new File(SFW_MODULES_FRAMES . $frameName); if (!$FrameFile->exists()) { SCMSNotificationLog::instance()->pushError("Фрейм с именем \"{$frameName}\" не найден!"); } if (SCMSNotificationLog::instance()->hasProblems()) { $this->Response->send(); return; } $oStructures = DataSource::factory(Structure::cls()); $oStructures->builder()->where('deleted=0')->whereAnd()->where("frame='{$frameName}'"); /** @var Structure[] $aStructures */ $aStructures = $oStructures->findAll(); if (sizeof($aStructures) > 0) { $structureNames = []; foreach ($aStructures as $oStructure) { $structureNames[] = $oStructure->name; } SCMSNotificationLog::instance()->pushError("Фрейм \"{$frameName}\" нельзя удалять, пока он используется в структуре сайта. На данный момент фрейм назначен разделам: \"" . implode('", "', $structureNames) . '"'); } if (SCMSNotificationLog::instance()->hasProblems()) { $this->Response->send(); return; } try { $FrameFile->delete(); } catch (Exception $e) { SCMSNotificationLog::instance()->pushError('При удалении фрейма произошла ошибка.'); } if (!SCMSNotificationLog::instance()->hasProblems()) { SCMSNotificationLog::instance()->pushMessage("Фрейм \"{$frameName}\" успешно удалён."); } $this->Response->send(); }
public function actionIndex() { $this->needAuthenticate(); $pageId = Param::get('id', false)->asInteger(false); /** @var Page $oPage */ $oPage = is_null($pageId) ? null : DataSource::factory(Page::cls(), $pageId); $view = new ViewEditForm(); $view->page = $oPage; // Подготовка хлебных крошек $viewBreadcrumbs = new ViewBreadcrumbs(); $viewBreadcrumbs->Breadcrumbs = [new Breadcrumb('Панель управления', '/admin'), new Breadcrumb('Статичные страницы', '/modules/pages')]; if ($oPage !== null) { $viewBreadcrumbs->Breadcrumbs[] = new Breadcrumb("Редактирование \"{$oPage->name}\"", ''); } else { $viewBreadcrumbs->Breadcrumbs[] = new Breadcrumb('Добавление новой статичной страницы', ''); } $this->Frame->bindView('breadcrumbs', $viewBreadcrumbs); $this->Frame->bindView('content', $view); $this->Frame->render(); }
public function actionAjaxModuleConfig() { $this->needAuthenticate(); $structureId = Param::get('structure_id')->noEmpty('Пропущен обязательный параметр "structure_id".')->asInteger(true, '"structure_id" должен быть числом.'); if ($structureId == 0) { SCMSNotificationLog::instance()->pushError("Не указана целевая структура."); $this->Response->send(); exit; } $moduleId = Param::get('module_id')->noEmpty('Пропущен обязательный параметр "module_id".')->asInteger(true, '"structure_id" должен быть числом.'); /** @var Structure $oStructure */ $oStructure = DataSource::factory(Structure::cls(), $structureId); /** @var Module $oModule */ $oModule = DataSource::factory(Module::cls(), $moduleId == 0 ? null : $moduleId); ob_start(); $view = $this->getModuleConfigView($oStructure, $oModule); $view->render(); $form = ob_get_clean(); $this->Response->send('', ['form' => $form]); }
public function actionIndex() { $error = Param::get('error', false)->asInteger(false); $frame = Registry::frame('back_clear'); $view = new ViewAuthorization(); if (!is_null($error)) { switch ($error) { case 0: $view->errorText = 'Неверный email или пароль.'; break; default: $view->errorText = 'Произошла неизвестная ошибка.'; } } $frame->bindView('modal-notification', new ViewNotificationsModal()); $frame->bindView('modal-confirmation', new ViewConfirmationModal()); $frame->bindView('modal-information', new ViewInformationModal()); $frame->bindView('content', $view); $frame->render(); }
public function actionIndex() { $this->needAuthenticate(); $galleryId = Param::get('id', false)->asInteger(false); /** @var Gallery $oGallery */ $oGallery = DataSource::factory(Gallery::cls(), $galleryId); $view = new ViewEditForm(); $view->gallery = $oGallery; // Подготовка хлебных крошек $viewBreadcrumbs = new ViewBreadcrumbs(); $viewBreadcrumbs->Breadcrumbs = [new Breadcrumb('Панель управления', '/admin'), new Breadcrumb('Галереи', '/modules/gallery')]; if ($oGallery->id !== null) { $viewBreadcrumbs->Breadcrumbs[] = new Breadcrumb("Редактирование \"{$oGallery->name}\"", ''); } else { $viewBreadcrumbs->Breadcrumbs[] = new Breadcrumb('Добавление новой галереи', ''); } $view->backUrl = CoreFunctions::buildUrlByBreadcrumbs($viewBreadcrumbs->Breadcrumbs, 1); $this->Frame->bindView('breadcrumbs', $viewBreadcrumbs); $this->Frame->bindView('content', $view); $this->Frame->render(); }
public function actionIndex() { $this->needAuthenticate(); $siteuserId = Param::get('id', false)->asInteger(false); /** @var Siteuser $oSiteuser */ $oSiteuser = is_null($siteuserId) ? null : DataSource::factory(Siteuser::cls(), $siteuserId); $view = new ViewSiteuserEditForm(); $view->oSiteuser = $oSiteuser; // Подготовка хлебных крошек $viewBreadcrumbs = new ViewBreadcrumbs(); $viewBreadcrumbs->Breadcrumbs = [new Breadcrumb('Панель управления', '/admin'), new Breadcrumb('Пользователи', '/modules/siteusers')]; if ($oSiteuser !== null) { $viewBreadcrumbs->Breadcrumbs[] = new Breadcrumb("Редактирование \"{$oSiteuser->name}\"", ''); } else { $viewBreadcrumbs->Breadcrumbs[] = new Breadcrumb('Добавление нового пользователя', ''); } $view->backUrl = CoreFunctions::buildUrlByBreadcrumbs($viewBreadcrumbs->Breadcrumbs, 1); $this->Frame->bindView('breadcrumbs', $viewBreadcrumbs); $this->Frame->bindView('content', $view); $this->Frame->render(); }
public function actionIndex() { $this->needAuthenticate(); $pageNumber = Param::get('frames-page', false)->asInteger(false); $itemsPerPage = Param::get('frames-items-per-page', false)->asInteger(false); $dataGridView = new ViewDataGrid(); $retriever = new FramesRetriever(); $manifest = $this->ModuleInstaller->getManifest($this->ModuleDirectory); $dataGrid = new DataGrid('frames', '/admin/modules/frames/', 'name', $manifest['meta']['alias'], $pageNumber, $itemsPerPage, $manifest['meta']['description']); $dataGrid->getMenu()->addElement(new Item('Создать новый фрейм', '/admin/modules/frames/edit/')); $dataGrid->addAction(new Action('name', '/admin/modules/frames/edit/', 'edit', '', [], ['class' => 'glyphicon glyphicon-pencil'], 'Редактировать'))->addAction(new Action('name', '/admin/modules/frames/delete/', 'delete', '', [], ['class' => 'glyphicon glyphicon-trash'], 'Удалить', true)); $dataGrid->addHeader(new Header('name', 'Название', null, ['class' => 'text-center'], ['class' => 'text-left'], true, Param::get('frames-filter-id', false)->asString(false))); $arrayDataSet = new ArrayDataSet($retriever->getFrames()); $dataGrid->addDataSet($arrayDataSet); $dataGridView->dataGrid = $dataGrid; // Подготовка хлебных крошек $viewBreadcrumbs = new ViewBreadcrumbs(); $viewBreadcrumbs->Breadcrumbs = [new Breadcrumb('Панель управления', '/admin'), new Breadcrumb('Фреймы', '/modules/frames')]; $this->Frame->bindView('breadcrumbs', $viewBreadcrumbs); $this->Frame->bindView('content', $dataGridView); $this->Frame->render(); }
public function actionIndex() { $this->needAuthenticate(); $parentPK = (int) Param::get('parent_pk', false)->asInteger(false); $pageNumber = Param::get('structure-page', false)->asInteger(false); $itemsPerPage = Param::get('structure-items-per-page', false)->asInteger(false); $addItemUrl = '/admin/modules/structures/edit/'; if ($parentPK != 0) { $addItemUrl .= "?parent_pk={$parentPK}"; } $manifest = $this->ModuleInstaller->getManifest($this->ModuleDirectory); $dataGridView = new ViewDataGrid(); $retriever = new StructureRetriever(); $dataGrid = new DataGrid('structure', '', 'id', $manifest['meta']['alias'], $pageNumber, $itemsPerPage, $manifest['meta']['description']); $dataGrid->addHiddenField('parent_pk', $parentPK); $dataGrid->getMenu()->addElement(new Item('Добавить элемент структуры', $addItemUrl)); $dataGrid->addAction(new Action('id', '/admin/modules/structures/edit/', 'edit', '', [], ['class' => 'glyphicon glyphicon-pencil'], 'Редактировать'))->addAction(new Action('id', '/admin/modules/structures/delete/', 'delete', '', [], ['class' => 'glyphicon glyphicon-trash'], 'Удалить', true)); $dataGrid->addHeader(new Header('id', '№', null, ['class' => 'text-center', 'style' => 'width: 50px;'], ['class' => 'text-center'], true, Param::get('structure-filter-id', false)->asString(false)))->addHeader(new Header('name', 'Наименование', new ViewLink('/admin/modules/structures/?parent_pk={label}', false, 'id'), ['class' => 'text-center', 'style' => 'width: 300px'], [], true, Param::get('structure-filter-name', false)->asString(false)))->addHeader(new Header('parent_structure_name', 'Родитель', null, ['class' => 'text-center', 'style' => 'width: 300px;'], [], true, Param::get('structure-filter-parent_structure_name', false)->asString(false), 'name', 'parent_structure'))->addHeader(new Header('path', 'Путь', null, ['class' => 'text-center', 'style' => 'width: 300px;'], [], true, Param::get('structure-filter-path', false)->asString(false)))->addHeader(new Header('module_alias', 'Модуль', null, ['class' => 'text-center', 'style' => 'width: 300px;'], [], true, Param::get('structure-filter-module_alias', false)->asString(false), 'alias', 'module'))->addHeader(new Header('anchor', 'Фрагмент', new ViewSwitch(), ['class' => 'text-center'], ['class' => 'text-center'], true, Param::get('structure-filter-anchor', false)->asString(false)))->addHeader(new Header('frame', 'Фрейм', new ViewEmpty(), ['class' => 'text-center'], ['class' => 'text-center'], true, Param::get('structure-filter-frame', false)->asString(false)))->addHeader(new Header('seo_title', 'SEO T', new ViewEmpty(), ['class' => 'text-center', 'style' => 'width: 80px;'], ['class' => 'text-center'], true, Param::get('structure-filter-seo_title', false)->asString(false)))->addHeader(new Header('seo_description', 'SEO D', new ViewEmpty(), ['class' => 'text-center', 'style' => 'width: 80px;'], ['class' => 'text-center'], true, Param::get('structure-filter-seo_description', false)->asString(false)))->addHeader(new Header('seo_keywords', 'SED K', new ViewEmpty(), ['class' => 'text-center', 'style' => 'width: 80px;'], ['class' => 'text-center'], true, Param::get('structure-filter-seo_keywords', false)->asString(false)))->addHeader(new Header('is_main', '<span class="glyphicon glyphicon-home" title="Главная"></span>', new ViewSwitch(), ['class' => 'text-center', 'style' => 'width: 50px;'], ['class' => 'text-center'], true, Param::get('structure-filter-is_main', false)->asString(false)))->addHeader(new Header('priority', '<span class="glyphicon glyphicon-sort-by-attributes" title="Приоритет"></span>', new ViewSwitch(), ['class' => 'text-center', 'style' => 'width: 50px;'], ['class' => 'text-center'], true, Param::get('structure-filter-priority', false)->asString(false)))->addHeader(new Header('active', '<span class="glyphicon glyphicon-asterisk" title="Активность"></span>', new ViewSwitch(), ['class' => 'text-center', 'style' => 'width: 50px;'], ['class' => 'text-center'], true, Param::get('structure-filter-active', false)->asString(false))); $structures = $retriever->getStructures($parentPK, $dataGrid->getFilterConditions('structure'), $dataGrid->Pagination->getLimit(), $dataGrid->Pagination->getOffset()); $dataSet = new ArrayDataSet($structures); $dataGrid->addDataSet($dataSet); $dataGridView->dataGrid = $dataGrid; // Подготовка хлебных крошек $viewBreadcrumbs = new ViewBreadcrumbs(); $viewBreadcrumbs->Breadcrumbs = [new Breadcrumb('Панель управления', '/admin'), new Breadcrumb('Структура сайта', '/modules/structures')]; $breadcrumbsParentPK = $parentPK; $structureBreadcrumbs = []; while ($breadcrumbsParentPK) { /** @var Structure $oParentStructure */ $oParentStructure = DataSource::factory(Structure::cls(), $breadcrumbsParentPK); $structureBreadcrumbs[] = new Breadcrumb($oParentStructure->name, "?parent_pk={$oParentStructure->getPrimaryKey()}", true); $breadcrumbsParentPK = $oParentStructure->structure_id; } $viewBreadcrumbs->Breadcrumbs = array_merge($viewBreadcrumbs->Breadcrumbs, array_reverse($structureBreadcrumbs)); $this->Frame->bindView('breadcrumbs', $viewBreadcrumbs); $this->Frame->bindView('content', $dataGridView); $this->Frame->render(); }
public function actionIndex() { $this->needAuthenticate(); $pageNumber = Param::get('gallery-page', false)->asInteger(false); $itemsPerPage = Param::get('gallery-items-per-page', false)->asInteger(false); $manifest = $this->ModuleInstaller->getManifest($this->ModuleDirectory); $dataGridView = new ViewDataGrid(); $retriever = new GalleryRetriever(); $dataGrid = new DataGrid('gallery', '', 'id', $manifest['meta']['alias'], $pageNumber, $itemsPerPage, $manifest['meta']['description']); $dataGrid->getMenu()->addElement(new Item('Создать новую галерею', '/admin/modules/gallery/edit/')); $dataGrid->addAction(new Action('id', '/admin/modules/gallery/edit/', 'edit', '', [], ['class' => 'glyphicon glyphicon-pencil'], 'Редактировать'))->addAction(new Action('id', '/admin/modules/gallery/delete/', 'delete', '', [], ['class' => 'glyphicon glyphicon-trash'], 'Удалить', true)); $dataGrid->addHeader(new Header('id', '№', null, ['class' => 'text-center', 'style' => 'width: 50px;'], ['class' => 'text-center'], true, Param::get('gallery-filter-id', false)->asString(false)))->addHeader(new Header('name', 'Название', new ViewLink('/admin/modules/gallery/item/?gallery_id={label}', false, 'id'), ['class' => 'text-center', 'style' => 'width: 250px;'], [], true, Param::get('gallery-filter-name', false)->asString(false)))->addHeader(new Header('description', 'Описание', new ViewCutString(20, true, ['class' => 'content-to-modal', 'style' => 'cursor: pointer;'], ['style' => 'display: none;']), ['class' => 'text-center'], ['class' => 'modal-display-field'], true, Param::get('gallery-filter-description', false)->asString(false))); $galleries = $retriever->getGalleries($dataGrid->getFilterConditions(), $dataGrid->Pagination->getLimit(), $dataGrid->Pagination->getOffset()); $dataSet = new ArrayDataSet($galleries); $dataGrid->addDataSet($dataSet); $dataGridView->dataGrid = $dataGrid; // Подготовка хлебных крошек $viewBreadcrumbs = new ViewBreadcrumbs(); $viewBreadcrumbs->Breadcrumbs = [new Breadcrumb('Панель управления', '/admin'), new Breadcrumb('Галереи', '')]; $this->Frame->bindView('breadcrumbs', $viewBreadcrumbs); $this->Frame->bindView('content', $dataGridView); $this->Frame->render(); }
public function actionIndex() { $this->needAuthenticate(); $pageNumber = Param::get('page-page', false)->asInteger(false); $itemsPerPage = Param::get('page-items-per-page', false)->asInteger(false); $manifest = $this->ModuleInstaller->getManifest($this->ModuleDirectory); $dataGridView = new ViewDataGrid(); $retriever = new PagesRetriever(); $dataGrid = new DataGrid('page', '', 'id', $manifest['meta']['alias'], $pageNumber, $itemsPerPage, $manifest['meta']['description']); $dataGrid->getMenu()->addElement(new Item('Добавить статическую страницу', '/admin/modules/pages/edit/')); $dataGrid->addAction(new Action('id', '/admin/modules/pages/edit/', 'edit', '', [], ['class' => 'glyphicon glyphicon-pencil'], 'Редактировать'))->addAction(new Action('id', '/admin/modules/pages/delete/', 'delete', '', [], ['class' => 'glyphicon glyphicon-trash'], 'Удалить', true)); $dataGrid->addHeader(new Header('id', '№', null, ['class' => 'text-center', 'style' => 'width: 50px;'], ['class' => 'text-center'], true, Param::get('page-filter-id', false)->asString(false)))->addHeader(new Header('name', 'Наименование', null, ['style' => 'width: 250px;'], [], true, Param::get('page-filter-name', false)->asString(false)))->addHeader(new Header('description', 'Описание', null, [], [], true, Param::get('page-filter-description', false)->asString(false)))->addHeader(new Header('active', '<span class="glyphicon glyphicon-asterisk" title="Активность"></span>', new ViewSwitch(), ['class' => 'text-center', 'style' => 'width: 50px;'], ['class' => 'text-center'], true, Param::get('page-filter-active', false)->asString(false))); $structures = $retriever->getPages($dataGrid->getFilterConditions(), $dataGrid->Pagination->getLimit(), $dataGrid->Pagination->getOffset()); $dataSet = new ArrayDataSet($structures); $dataGrid->addDataSet($dataSet); $dataGridView->dataGrid = $dataGrid; // Подготовка хлебных крошек $viewBreadcrumbs = new ViewBreadcrumbs(); $viewBreadcrumbs->Breadcrumbs = [new Breadcrumb('Панель управления', '/admin'), new Breadcrumb('Статичные страницы', '/modules/pages')]; $this->Frame->bindView('breadcrumbs', $viewBreadcrumbs); $this->Frame->bindView('content', $dataGridView); $this->Frame->render(); }
public function actionIndex() { $this->needAuthenticate(); $this->needAuthenticate(); $pageNumber = Param::get('employee-page', false)->asInteger(false); $itemsPerPage = Param::get('employee-items-per-page', false)->asInteger(false); $manifest = $this->ModuleInstaller->getManifest($this->ModuleDirectory); $siteusersRetriever = new SiteusersRetriever(); $dataGridView = new ViewDataGrid(); $dataGrid = new DataGrid('siteuser', '', 'id', $manifest['meta']['alias'], $pageNumber, $itemsPerPage, $manifest['meta']['description']); $dataGrid->getMenu()->addElement(new Item('Добавить нового пользователя', '/admin/modules/siteusers/edit/')); $dataGrid->addAction(new Action('id', '/admin/modules/siteusers/edit/', 'edit', '', [], ['class' => 'glyphicon glyphicon-pencil'], 'Редактировать'))->addAction(new Action('id', '/admin/modules/siteusers/delete/', 'delete', '', [], ['class' => 'glyphicon glyphicon-trash'], 'Удалить', true)); $dataGrid->addHeader(new Header('id', '№', null, ['class' => 'text-center', 'style' => 'width: 50px;'], ['class' => 'text-center'], true, Param::get('siteuser-filter-id', false)->asString(false)))->addHeader(new Header('name', 'Имя', null, ['class' => 'text-center', 'style' => 'width: 250px;'], [], true, Param::get('siteuser-filter-name', false)->asString(false)))->addHeader(new Header('surname', 'Фамилия', null, ['class' => 'text-center', 'style' => 'width: 250px;'], [], true, Param::get('siteuser-filter-surname', false)->asString(false)))->addHeader(new Header('patronymic', 'Отчество', null, ['class' => 'text-center', 'style' => 'width: 250px;'], [], true, Param::get('siteuser-filter-patronymic', false)->asString(false)))->addHeader(new Header('email', 'Email', new ViewEmail(), ['class' => 'text-center'], [], true, Param::get('siteuser-filter-email', false)->asString(false)))->addHeader(new Header('phone', 'Телефон', null, ['class' => 'text-center'], [], true, Param::get('siteuser-filter-phone', false)->asString(false)))->addHeader(new Header('mail_address', 'Адрес', new ViewCutString(20, true, ['class' => 'content-to-modal', 'style' => 'cursor: pointer;'], ['style' => 'display: none;']), ['class' => 'text-center'], ['class' => 'modal-display-field'], true, Param::get('siteuser-filter-mail_address', false)->asString(false)))->addHeader(new Header('postcode', 'Индекс', null, ['class' => 'text-center'], [], true, Param::get('siteuser-filter-postcode', false)->asString(false)))->addHeader(new Header('created', 'Создан', new ViewDateTime('d.m.Y h:i:s'), ['class' => 'text-center'], ['class' => 'text-center'], true, Param::get('siteuser-filter-created', false)->asString(false)))->addHeader(new Header('updated', 'Изменён', new ViewDateTime('d.m.Y h:i:s'), ['class' => 'text-center'], ['class' => 'text-center'], true, Param::get('siteuser-filter-updated', false)->asString(false))); $structures = $siteusersRetriever->getSiteusers($dataGrid->getFilterConditions(), $dataGrid->Pagination->getLimit(), $dataGrid->Pagination->getOffset()); $dataSet = new ArrayDataSet($structures); $dataGrid->addDataSet($dataSet); $dataGridView->dataGrid = $dataGrid; // Подготовка хлебных крошек $viewBreadcrumbs = new ViewBreadcrumbs(); $viewBreadcrumbs->Breadcrumbs = [new Breadcrumb('Панель управления', '/admin'), new Breadcrumb('Пользователи', '/modules/siteusers')]; $this->Frame->bindView('breadcrumbs', $viewBreadcrumbs); $this->Frame->bindView('content', $dataGridView); $this->Frame->render(); }
public function actionIndex() { if (CoreFunctions::isAJAX() && !$this->EmployeeAuthentication->authenticated()) { SCMSNotificationLog::instance()->pushError('Нет доступа!'); $this->Response->send(); return; } $this->needAuthenticate(); $isCategory = Param::get('is_category')->asInteger(true, "Недопустимое значение параметра."); $id = Param::get('id')->asInteger(); if ($isCategory) { /** @var Category $oCategory */ $oCategory = DataSource::factory(Category::cls(), $id); $this->categoryDeepDelete($oCategory); SCMSNotificationLog::instance()->pushMessage("Категория \"{$oCategory->name}\" успешно удалена."); } else { /** @var Item $oItem */ $oItem = DataSource::factory(Item::cls(), $id); $oItem->deleted = true; $oItem->commit(); SCMSNotificationLog::instance()->pushMessage("Позиция \"{$oItem->name}\" успешно удалена."); } $this->Response->send(); }
public function actionIndex() { $action = Param::request('action', false)->asString(false); $categoryId = 0; switch ($action) { case 'show-item': $itemId = Param::get('item_id', false)->asInteger(false); /** @var Item $oItem */ $oItem = DataSource::factory(Item::cls(), $itemId); $view = new ViewItem(); if (!$oItem->isNew()) { $categoryId = $oItem->category_id; $view->oItem = $oItem; } else { SCMSNotificationLog::instance()->pushError("Товар не найден."); } break; case 'add-to-cart': $id = Param::get('id', true)->noEmpty('Товар не найден.')->asInteger(true, 'Неизвестный товар.'); $count = Param::get('count', true)->noEmpty('Количество должно быть указано.')->asInteger(true, 'Не указано количество товара.'); /** @var Item $oItem */ $oItem = DataSource::factory(Item::cls(), $id); if (!$oItem) { SCMSNotificationLog::instance()->pushError('Товар, который Вы пытаетесь добавить в корзину не существует.'); } if (!$count) { SCMSNotificationLog::instance()->pushError('Количество товара должно быть больше нуля.'); } if (SCMSNotificationLog::instance()->hasProblems()) { $this->Response->send(); return; } $this->cart->addItem($id, $count); SCMSNotificationLog::instance()->pushMessage("Товар \"{$oItem->name}\" в количестве {$count} (шт.) успешно добавлен в корзину. Теперь Вы можете перейти к оформлению заказа или продолжить покупки."); $this->Response->send('', ['totalCount' => $this->cart->getTotalCount()]); return; break; case 'show-cart': $view = new ViewCart(); $cart = $this->cart; $DataGrid = new DataGrid(); $aItemsInCart = $this->cart->getItems(); $DataGrid->setCaption(empty($aItemsInCart) ? 'В Вашей корзине ещё нет ни одного товара' : 'Список товаров')->setAttributes(['class' => 'table table-condensed'])->addColumn((new Column())->setDisplayName('№')->setHeaderAttributes(['style' => 'text-align: center; vertical-align: middle;'])->setBodyAttributes(['style' => 'text-align: center; vertical-align: middle;'])->switchOnCounter())->addColumn((new Column())->setDisplayName('Наименование')->setHeaderAttributes(['style' => 'text-align: center; vertical-align: middle;'])->setValueName('name'))->addColumn((new Column())->setDisplayName('Цена')->setHeaderAttributes(['style' => 'text-align: center; vertical-align: middle;'])->setBodyAttributes(['style' => 'text-align: center; vertical-align: middle;'])->setFooterAttributes(['style' => 'text-align: center; vertical-align: middle;', 'class' => 'text-success'])->setCallback(function (Item $oItem) { echo $oItem->price, '<span class="glyphicon glyphicon-ruble"></span>'; })->setFooterCallback(function (array $aItems) { ?> Итого:<?php }))->addColumn((new Column())->setDisplayName('Количество')->setHeaderAttributes(['style' => 'text-align: center; vertical-align: middle;'])->setBodyAttributes(['style' => 'text-align: center; vertical-align: middle;'])->setFooterAttributes(['style' => 'text-align: center; vertical-align: middle;', 'class' => 'text-danger'])->setCallback(function (Item $oItem) use($cart) { ?> <input type="number" min="1" class="form-control input-sm text-center catalogue-item-count" value="<?php echo $cart->getCountById($oItem->getPrimaryKey()); ?> " /><?php })->setFooterCallback(function (array $aItems) use($cart) { echo $cart->getTotalCount(); }))->addColumn((new Column())->setDisplayName('Сумма')->setHeaderAttributes(['style' => 'text-align: center; vertical-align: middle;'])->setBodyAttributes(['style' => 'text-align: center; vertical-align: middle;'])->setFooterAttributes(['style' => 'text-align: center; vertical-align: middle;', 'class' => 'text-danger'])->setCallback(function (Item $oItem) use($cart) { echo $cart->getCountById($oItem->getPrimaryKey()) * $oItem->price, '<span class="glyphicon glyphicon-ruble"></span>'; })->setFooterCallback(function (array $aItems) use($cart) { /** @var Item[] $aItems */ $totalPrice = 0; foreach ($aItems as $oItem) { $totalPrice += $cart->getCountById($oItem->getPrimaryKey()) * $oItem->price; } echo $totalPrice, '<span class="glyphicon glyphicon-ruble"></span>'; }))->addColumn((new Column())->setDisplayName('<span class="glyphicon glyphicon-option-horizontal"></span>')->setHeaderAttributes(['style' => 'text-align: center; vertical-align: middle;'])->setBodyAttributes(['style' => 'text-align: center; vertical-align: middle;'])->setCallback(function (Item $oItem) { echo '<a href="/catalogue?action=remove-from-cart?id=' . $oItem->getPrimaryKey() . '" class="btn btn-danger btn-xs catalogue-cart-remove" title="Удалить товар из конзины"><span class="glyphicon glyphicon-remove"></span></a>'; }))->setDataSet($aItemsInCart); $view->DataGrid = $DataGrid; $view->goodCount = $cart->getTotalCount(); $view->render(); return; break; case 'set-cart-items': $items = Param::get('items')->asArray(); foreach ($items as $itemId => $count) { $this->cart->setItemCount($itemId, $count); } $this->Response->send('', ['totalCount' => $this->cart->getTotalCount()]); return; break; case 'order': break; default: $categoryId = Param::get('category_id', false)->asInteger(false); if (!$categoryId) { $categoryId = 0; } $oCategories = DataSource::factory(Category::cls()); $oCategories->builder()->where('deleted=0')->whereAnd()->where('active=1')->whereAnd()->where("category_id={$categoryId}"); $aCategories = $oCategories->findAll(); $oItems = DataSource::factory(Item::cls()); $oItems->builder()->where('deleted=0')->whereAnd()->where('active=1')->whereAnd()->where("category_id={$categoryId}"); $aItems = $oItems->findAll(); $view = new ViewCatalogue(); $view->categoriesPerRow = 4; $view->itemsPerRow = 4; $view->aCategories = $aCategories; $view->aItems = $aItems; } // Подготовка хлебных крошек $breadcrumbsParentPK = $categoryId; $categoryBreadcrumbs = []; while ($breadcrumbsParentPK) { /** @var Category $oParentCategory */ $oParentCategory = DataSource::factory(Category::cls(), $breadcrumbsParentPK); $categoryBreadcrumbs[] = new Breadcrumb($oParentCategory->name, "?category_id={$oParentCategory->getPrimaryKey()}", true); $breadcrumbsParentPK = $oParentCategory->category_id; } $this->BreadcrumbsView->Breadcrumbs = array_merge($this->BreadcrumbsView->Breadcrumbs, array_reverse($categoryBreadcrumbs)); if (isset($oItem)) { $this->BreadcrumbsView->Breadcrumbs[] = new Breadcrumb($oItem->name, ''); } $view->backUrl = CoreFunctions::buildUrlByBreadcrumbs($this->BreadcrumbsView->Breadcrumbs, 1); $this->Frame->bindView('breadcrumbs', $this->BreadcrumbsView); $view->render(); }