diff --git a/Classes/Controller/BackendController.php b/Classes/Controller/BackendController.php new file mode 100644 index 000000000..060869d1e --- /dev/null +++ b/Classes/Controller/BackendController.php @@ -0,0 +1,51 @@ +moduleTemplateFactory = $moduleTemplateFactory; + $this->siteCreatorService = $siteCreatorService; + } + + public function initializeAction(): void + { + $this->moduleTemplate = $this->moduleTemplateFactory->create($this->getRequest()); + $this->moduleTemplate->setTitle('DEMO'); + } + + public function indexAction(): ResponseInterface + { + $this->siteCreatorService->createSiteSetup(); + + return $this->htmlResponse(); + } + + protected function getRequest(): ServerRequestInterface + { + return $GLOBALS['TYPO3_REQUEST']; + } +} diff --git a/Classes/SiteCreator/Dto/AbstractEntity.php b/Classes/SiteCreator/Dto/AbstractEntity.php new file mode 100644 index 000000000..5d963179c --- /dev/null +++ b/Classes/SiteCreator/Dto/AbstractEntity.php @@ -0,0 +1,83 @@ +table)) { + throw new \RuntimeException('Extending Entity needs to set $table.', 1622491079); + } + $this->id = $id ?? uniqid('NEW_CONTENT'); + } + + public function toDataHandler(): array + { + if ($this->parent !== null) { + $this->parameterBag['pid'] = $this->parent->id; + if ($this->parentStorage !== null) { + $key = array_search($this, $this->parent->{$this->parentStorage}, true); + if ($key !== 0) { + $this->parameterBag['pid'] = '-' . $this->parent->{$this->parentStorage}[((int) $key - 1)]->id; + } + } + } else { + $this->parameterBag['pid'] = 0; + } + + $relations = $this->getDataHandlerRelations(); + + $data = []; + $data[$this->table][$this->id] = $this->parameterBag; + + return array_merge_recursive($data, $relations); + } + + protected function getDataHandlerRelations(): array + { + $relations = []; + + foreach ($this->parameterBag as $parameter => $parameterValue) { + $fieldConfig = $GLOBALS['TCA'][$this->table]['columns'][$parameter]['config']; + if ($fieldConfig['type'] === 'inline') { + $foreignTable = $fieldConfig['foreign_table']; + $foreignField = $fieldConfig['foreign_field']; + $recordUids = []; + foreach ($parameterValue as $record => $recordData) { + $recordId = $recordData['id'] ?? uniqid('NEW_RECORD'); + $recordUids[] = $recordId; + unset($recordData['id']); + if (!strpos($this->parameterBag['pid'], '-') === 0) { + $recordData['pid'] = $this->parameterBag['pid']; + } else { + $recordData['pid'] = $this->parent->id; + } + $recordData[$foreignField] = $this->id; + $relations[$foreignTable][$recordId] = $recordData; + } + $this->parameterBag[$parameter] = implode(',', $recordUids); + } + } + + return $relations; + } +} diff --git a/Classes/SiteCreator/Dto/ContentBlock.php b/Classes/SiteCreator/Dto/ContentBlock.php new file mode 100644 index 000000000..c1d13c023 --- /dev/null +++ b/Classes/SiteCreator/Dto/ContentBlock.php @@ -0,0 +1,20 @@ +pages as $childPage) { + $data = array_merge_recursive($data, $childPage->toDataHandler()); + } + foreach ($this->templates as $template) { + $data = array_merge_recursive($data, $template->toDataHandler()); + } + foreach ($this->contentBlocks as $contentBlock) { + $data = array_merge_recursive($data, $contentBlock->toDataHandler()); + } + + return $data; + } +} diff --git a/Classes/SiteCreator/Dto/Site.php b/Classes/SiteCreator/Dto/Site.php new file mode 100644 index 000000000..437e0ea7c --- /dev/null +++ b/Classes/SiteCreator/Dto/Site.php @@ -0,0 +1,31 @@ +pages as $page) { + $data = array_merge_recursive($data, $page->toDataHandler()); + } + + return $data; + } +} diff --git a/Classes/SiteCreator/Dto/Template.php b/Classes/SiteCreator/Dto/Template.php new file mode 100644 index 000000000..56970f4df --- /dev/null +++ b/Classes/SiteCreator/Dto/Template.php @@ -0,0 +1,20 @@ + $data + */ + public static function fromArray(array $data): ContentBlock + { + $contentBlock = new ContentBlock(); + if (isset($data['id'])) { + $contentBlock->id = $data['id']; + unset($data['id']); + } + $contentBlock->parameterBag = $data; + + return $contentBlock; + } +} diff --git a/Classes/SiteCreator/Factory/PageFactory.php b/Classes/SiteCreator/Factory/PageFactory.php new file mode 100644 index 000000000..efd33dbed --- /dev/null +++ b/Classes/SiteCreator/Factory/PageFactory.php @@ -0,0 +1,65 @@ + $data + */ + public static function fromArray(array $data): Page + { + $page = new Page(); + + if (isset($data['id'])) { + $page->id = $data['id']; + unset($data['id']); + } + + if (isset($data['pages'])) { + foreach ($data['pages'] as $childPageData) { + $childPage = self::fromArray($childPageData); + $childPage->parent = $page; + $page->pages[] = $childPage; + } + unset($data['pages']); + } + + if (isset($data['templates'])) { + foreach ($data['templates'] as $templateData) { + $template = TemplateFactory::fromArray($templateData); + $template->parent = $page; + $page->templates[] = $template; + } + unset($data['templates']); + } + + if (isset($data['contentBlocks'])) { + foreach ($data['contentBlocks'] as $contentBlockData) { + $contentBlock = ContentBlockFactory::fromArray($contentBlockData); + $contentBlock->parent = $page; + $page->contentBlocks[] = $contentBlock; + } + unset($data['contentBlocks']); + } + + if (!isset($data['hidden'])) { + $data['hidden'] = 0; + } + + $page->parameterBag = $data; + + return $page; + } +} diff --git a/Classes/SiteCreator/Factory/SiteFactory.php b/Classes/SiteCreator/Factory/SiteFactory.php new file mode 100644 index 000000000..fce0f2ca5 --- /dev/null +++ b/Classes/SiteCreator/Factory/SiteFactory.php @@ -0,0 +1,32 @@ + $data + */ + public static function fromArray(array $data): Site + { + $site = new Site(); + $site->title = $data['title']; + $site->description = $data['description']; + foreach ($data['pages'] as $page) { + $site->pages[] = PageFactory::fromArray($page); + } + + return $site; + } +} diff --git a/Classes/SiteCreator/Factory/TemplateFactory.php b/Classes/SiteCreator/Factory/TemplateFactory.php new file mode 100644 index 000000000..b418daa55 --- /dev/null +++ b/Classes/SiteCreator/Factory/TemplateFactory.php @@ -0,0 +1,28 @@ + $data + */ + public static function fromArray(array $data): Template + { + $template = new Template(); + $template->parameterBag = $data; + + return $template; + } +} diff --git a/Classes/SiteCreator/Hooks/SiteCreatorHook.php b/Classes/SiteCreator/Hooks/SiteCreatorHook.php new file mode 100644 index 000000000..891c0deb2 --- /dev/null +++ b/Classes/SiteCreator/Hooks/SiteCreatorHook.php @@ -0,0 +1,46 @@ + $parameterValue) { + if (!in_array($parameter, ['uid', 'pid'])) { + $fieldConfig = $GLOBALS['TCA'][$table]['columns'][$parameter]['config']; + switch ($fieldConfig['type']) { + case 'text': + case 'input': + case 'inline': + case 'select': + case 'group': + $incomingFieldArray[$parameter] = str_replace( + array_keys($dataHandler->substNEWwithIDs), + array_values($dataHandler->substNEWwithIDs), + $incomingFieldArray[$parameter] + ); + break; + } + } + } + } +} diff --git a/Classes/SiteCreator/Resources/Sites/Demo/site.yaml b/Classes/SiteCreator/Resources/Sites/Demo/site.yaml new file mode 100644 index 000000000..3f40ab615 --- /dev/null +++ b/Classes/SiteCreator/Resources/Sites/Demo/site.yaml @@ -0,0 +1,1209 @@ +sitecreator: + title: "Demo" + description: "" + pages: + - + id: "NEW_PAGEROOT" + title: "Boostrap Package - Demo" + is_siteroot: 1 + abstract: "Bootstrap Package is the most advanced theme for TYPO3." + description: "Bootstrap Package delivers a full configured frontend theme for TYPO3, based on the Bootstrap CSS Framework. The goal of this package is to give an advanced example of how modern templating in TYPO3 CMS can be handled nicely without depending on third party extensions. Bootstrap Package comes with a fully configurable Frontend via TypoScript. This includes the TypoScript Constant Editor." + backend_layout: pagets__default + backend_layout_next_level: pagets__default + templates: + - + title: "+root" + root: 1 + clear: 3 + constants: " + page.theme.meta.enable = 1\n + page.theme.meta.navigationType = directory\n + page.theme.meta.navigationValue = NEW_PAGEFOOTER\n + \n + page.theme.socialmedia.channels.twitter.url = https://twitter.com/benjaminkott\n + page.theme.socialmedia.channels.github.url = https://github.com/benjaminkott/bootstrap_package\n + \n + page.theme.cookieconsent.position = bottom-right\n + " + include_static_file: " + EXT:bootstrap_package/Configuration/TypoScript + " + contentBlocks: + - + CType: carousel + frame_class: none + tx_bootstrappackage_carousel_item: + - + item_type: header + header: "Bootstrap Package delivers a full configured theme for TYPO3, based on the Bootstrap CSS Framework." + header_layout: 1 + header_class: h2 + header_position: center + link: t3://page?uid=NEW_PAGEROOT + - + item_type: text + header: "Bootstrap Package delivers a full configured theme for TYPO3, based on the Bootstrap CSS Framework." + header_layout: 1 + header_class: h2 + bodytext: "
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer laoreet, velit vitae eleifend consequat, nunc libero euismod velit, ut semper tortor dolor vitae augue. Curabitur a libero tellus. In tristique cursus velit, id convallis lectus iaculis sed.
" + - + item_type: call_to_action + header: "Call to Action" + header_layout: 1 + header_class: h2 + bodytext: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer laoreet, velit vitae eleifend consequat, nunc libero euismod velit, ut semper tortor dolor vitae augue. Curabitur a libero tellus. In tristique cursus velit, id convallis lectus iaculis sed.
" + button_text: "Go somewhere" + link: t3://page?uid=NEW_PAGEROOT + - + item_type: text_and_image + header: "Text and Image" + header_layout: 1 + header_class: h2 + bodytext: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer laoreet, velit vitae eleifend consequat, nunc libero euismod velit, ut semper tortor dolor vitae augue. Curabitur a libero tellus. In tristique cursus velit, id convallis lectus iaculis sed.
" + link: t3://page?uid=NEW_PAGEROOT + - + item_type: image + header: "Image" + link: t3://page?uid=NEW_PAGEROOT + - + item_type: html + header: "HTML" + bodytext: "RAW RAW RAW
" + - + CType: icon_group + header_layout: 100 + pi_flexform: + data: + sDEF: + lDEF: + align: + vDEF: left + columns: + vDEF: 3 + icon_position: + vDEF: left-top + background_color_class: primary + tx_bootstrappackage_icon_group_item: + - + header: "Start browsing" + bodytext: " +Start browsing to learn why TYPO3 CMS is the most powerful open source content management system.
+ + " + - + header: "Examples" + bodytext: " +Don't hesitate and discover the large selection of our pre-configured page layouts and content elements.
+ + " + - + header: "Start browsing" + bodytext: " +The TYPO3 Bootstrap Package is open source. It's hosted, developed, and maintained on GitHub.
+ + " + - + header: "Unlimited Opportunities" + CType: textpic + header_layout: 2 + imageorient: 126 + bodytext: " ++ The Bootstrap Package closes the gap between content management systems and the usual website-builder solution, + by providing sophisticated enterprise content management through TYPO3 and the flexibility of a modern website builder. +
++ Extensive configuration options allow you to adapt the theme completely to your own needs. A sophisticated system of + additional page layouts and content elements in conjunction with extended setting options for background colors and + background images no longer sets any limits to the design options for their content. +
+ " + - + header: "Get the TYPO3 Bootstrap Package today." + header_layout: 2 + header_position: center + bodytext: " ++ The TYPO3 Bootstrap Package is the most comprehensive theme available for TYPO3. + It uses only best practices recommended by the TYPO3 core team and + is therefore always state-of-the-art and compatible with all current versions. +
+ " + background_color_class: light + frame_class: indent + - + header: "Download" + header_position: center + header_layout: 100 + CType: card_group + background_color_class: light + frame_class: indent + pi_flexform: + data: + sDEF: + lDEF: + align: + vDEF: left + columns: + vDEF: 2 + tx_bootstrappackage_card_group_item: + - + header: "TYPO3 Extension Repository" + bodytext: "Download the integration directly from your TYPO3 backend, or get the package from the Official TYPO3 Extension Repository (TER).
" + link: "https://extensions.typo3.org/extension/bootstrap_package/" + link_title: "Download from TER" + link_class: primary + - + header: "Composer" + bodytext: "If you have installed TYPO3 with composer it couldn't be easier. Just require the package bk2k/bootstrap-package and you are ready to start.
" + link: "https://packagist.org/packages/bk2k/bootstrap-package" + link_title: "Get from Packagist" + link_class: primary + - + header: "Related Links" + header_layout: 3 + colPos: 10 + bodytext: " + + " + - + header: "Powered by" + header_layout: 3 + colPos: 11 + bodytext: " +TYPO3 Enterprise Open Source CMS
+ " + - + header: "Social Networks" + header_layout: 3 + colPos: 12 + bodytext: " + + " + pages: + - + doktype: 4 + title: "Home" + shortcut: "NEW_PAGEROOT" + shortcutMode: 0 + - + doktype: 199 + title: "Spacer" + - + id: "NEW_PAGECUSTOMIZING" + title: "Customizings" + - + id: "NEW_PAGEFEATURES" + title: "Features" + - + id: "NEW_PAGEPAGES" + title: "Pages" + pages: + - + title: "Default" + - + title: "2 Columns" + - + title: "2 Columns 25/75" + - + title: "2 Columns 50/50" + - + title: "2 Columns, Offset Right" + - + title: "3 Columns" + - + title: "Simple" + - + title: "Subnavigation, Left" + - + title: "Subnavigation, Left and 2 Columns" + - + title: "Subnavigation, Right" + - + title: "Subnavigation, Right and 2 Columns" + - + title: "Feature" + - + title: "Startpage" + - + id: "NEW_PAGECONTENTELEMENTS" + title: "Content Examples" + backend_layout: pagets__subnavigation_right + backend_layout_next_level: pagets__subnavigation_right + pages: + - + title: "Text" + pages: + - + id: "NEW_PAGERICHTEXT" + title: "Rich Text" + contentBlocks: + - + header: "TYPO3's Built-in Rich Text Editor" + bodytext: " ++ TYPO3 ships with the CKEditor (ckeditor.com) as there + sophisticated built-in rich text editor (RTE). This editor contains all + of the features one would expect from an Enterprise CMS, and is highly configurable and extendable to fit + every project out there. +
+ " + - + header: "Multicolumn" + bodytext: " ++ Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Etiam rhoncus. Vestibulum ullamcorper + mauris at ligula. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Praesent porttitor, + nulla vitae posuere iaculis, arcu nisl dignissim dolor, a pretium mi sem ut ipsum.Quisque id mi. Nullam + quis ante. In ac felis quis tortor malesuada pretium.Nulla facilisi. Donec posuere vulputate arcu. Nunc + nulla. Quisque ut nisi. Ut id nisl quis enim dignissim sagittis.Phasellus viverra nulla ut metus varius + laoreet. Donec mi odio, faucibus at. +
+Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi.
+Nullam cursus lacinia erat. In auctor lobortis lacus. Vivamus consectetuer hendrerit lacus. Pellentesque commodo eros a enim. Suspendisse feugiat.
+Praesent vestibulum dapibus nibh. Fusce fermentum. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc.
+ " + - + header: "Indented Blocks" + bodytext: " +Curabitur nisi. Ut tincidunt tincidunt erat. Nullam sagittis. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Sed fringilla mauris sit amet nibh.
+Phasellus dolor. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Donec vitae sapien ut libero venenatis faucibus. In hac habitasse platea dictumst. Ut non enim eleifend felis pretium feugiat.Phasellus a est. Vestibulum volutpat pretium libero. Duis leo. Cras non dolor. Nullam dictum felis eu pede mollis pretium.
+Integer tincidunt. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Phasellus accumsan cursus velit. Fusce fermentum. Nullam accumsan lorem in dui.
+ " + - + header: "Buttons" + bodytext: " + + + " + - + header: "Contextual Styling" + bodytext: " +Continuous text: text, optional in bold or italic or in a combination of bold and italic.
+Special characters can be used: @ © ® ¢ ¼ ½ ¾ § ± a² m³ Ω π µ γ β α H2O
+Texts in foreign languages can be mixed on one page.
The font has to be installed on the device though:
+ cyrillic: Русская версия
+ chinese: 中文版
+ arabic: الْعَرَبيّة
+
Centered text
+Text justified right
+ " + - + header: "Blockquote" + bodytext: " +Aenean ante elit, elementum et, varius ut, condimentum ut, sem. Aenean ante neque, imperdiet sed, ultricies vitae, aliquam dictum, arcu. Aenean arcu est, semper vitae, euismod quis, vehicula eu, risus.
+++Aenean ante elit, elementum et, varius ut, condimentum ut, sem. Aenean ante neque, imperdiet sed, ultricies vitae, aliquam dictum, arcu. Aenean arcu est, semper vitae, euismod quis, vehicula eu, risus.
+
Aenean ante elit, elementum et, varius ut, condimentum ut, sem. Aenean ante neque, imperdiet sed, ultricies vitae, aliquam dictum, arcu. Aenean arcu est, semper vitae, euismod quis, vehicula eu, risus.
+ " + - + header: "Lists" + bodytext: " +Bulleted list:
+Ordered list:
+You can insert internal links (links to pages within the website), external links (links to external sites) or e-mail links (links that open the user's email client when clicked).
+Additional link stylings:
+ + " + - + header: "Tables" + bodytext: " +# | +FirstName | +LastName | +Username | +
---|---|---|---|
1 | +Benjamin | +Kott | +@benjaminkott | +
2 | +John | +Doe | +- | +
3 | +Larry | +the Bird | +
John Doe
+Street
Zip & City
+49 1234 456-7890
++49 1234 456-7891
+john.doe@example.com
+www.example.com
+ + " + - + id: NEW_PAGEHEADERS + title: "Headers" + contentBlocks: + - + CType: header + header: Header 1. level + header_layout: 1 + subheader: Subheader + - + CType: header + header: Header 2. level + header_layout: 2 + subheader: Subheader + - + CType: header + header: Header 3. level + header_layout: 3 + subheader: Subheader + - + CType: header + header: Header 4. level + header_layout: 4 + subheader: Subheader + - + CType: header + header: Header 5. level + header_layout: 5 + subheader: Subheader + - + CType: header + header: Header 1. level (with link) + header_layout: 1 + header_link: t3://page?uid=NEW_PAGEHEADERS + subheader: Subheader + - + CType: header + header: Header 2. level (with link) + header_layout: 2 + header_link: t3://page?uid=NEW_PAGEHEADERS + subheader: Subheader + - + CType: header + header: Header 3. level (with link) + header_layout: 3 + header_link: t3://page?uid=NEW_PAGEHEADERS + subheader: Subheader + - + CType: header + header: Header 4. level (with link) + header_layout: 4 + header_link: t3://page?uid=NEW_PAGEHEADERS + subheader: Subheader + - + CType: header + header: Header 5. level (with link) + header_layout: 5 + header_link: t3://page?uid=NEW_PAGEHEADERS + subheader: Subheader + - + CType: header + header: Header 1. level (center) + header_layout: 1 + header_position: center + subheader: Subheader + - + CType: header + header: Header 2. level (center) + header_layout: 2 + header_position: center + subheader: Subheader + - + CType: header + header: Header 3. level (center) + header_layout: 3 + header_position: center + subheader: Subheader + - + CType: header + header: Header 4. level (center) + header_layout: 4 + header_position: center + subheader: Subheader + - + CType: header + header: Header 5. level (center) + header_layout: 5 + header_position: center + subheader: Subheader + - + CType: header + header: Header 1. level (right) + header_layout: 1 + header_position: right + subheader: Subheader + - + CType: header + header: Header 2. level (right) + header_layout: 2 + header_position: right + subheader: Subheader + - + CType: header + header: Header 3. level (right) + header_layout: 3 + header_position: right + subheader: Subheader + - + CType: header + header: Header 4. level (right) + header_layout: 4 + header_position: right + subheader: Subheader + - + CType: header + header: Header 5. level (right) + header_layout: 5 + header_position: right + subheader: Subheader + - + title: "Bullet List" + - + title: "Text with Teaser" + contentBlocks: + - + header: Nulla porta sapien interdum nibh pellentesque + CType: textteaser + teaser: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce convallis fermentum justo, at malesuada urna accumsan sit amet. + bodytext: " +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin quis nibh venenatis, finibus sapien id, fringilla dolor. Aenean euismod arcu nec enim feugiat maximus. Aenean mollis eros eget elementum vulputate. Mauris fringilla magna quis condimentum mattis. Proin quis lacus non elit mollis viverra sed vel orci. Aenean aliquam elit sit amet est efficitur, eget pharetra est sodales. Sed at nulla pellentesque felis maximus faucibus sit amet ut augue. Nunc blandit, ex at facilisis maximus, arcu tellus fringilla purus, non cursus nibh diam sit amet velit. Maecenas efficitur mauris accumsan, elementum urna sit amet, scelerisque orci. Aliquam pulvinar aliquet lectus, at volutpat elit convallis non. Nam eu leo nibh. Praesent a ligula at urna tempor molestie luctus in metus.
+Nam ac quam ac libero malesuada commodo ut ac eros. Fusce ullamcorper laoreet ligula. In augue urna, fermentum eu iaculis ut, tristique eget lacus. Ut nec gravida turpis. Nam id commodo nisi. Phasellus tortor ante, molestie sed nisl ac, tincidunt sagittis justo. Nunc non nibh non magna consectetur viverra a vitae lacus. Duis dignissim odio feugiat, ornare massa ut, molestie velit. Aliquam erat volutpat. Integer nisi ligula, placerat eu ex quis, dignissim gravida arcu. In nec consectetur lorem. Aliquam sit amet risus tellus. Vivamus pellentesque, velit et fermentum dignissim, orci augue rhoncus ligula, ut sodales sem nulla vel nibh. Praesent ac risus tellus. Integer placerat efficitur elit, ut malesuada purus posuere non. Morbi sed dolor et ante sodales varius eget sed eros.
+Mauris id ipsum ut felis porttitor euismod. Morbi non venenatis augue. Vivamus euismod vehicula arcu. Morbi et sem nisl. Praesent non quam non massa aliquet ultricies gravida vel nisl. Pellentesque ultrices sem vel dui facilisis, ac porta orci elementum. Fusce cursus, velit auctor scelerisque iaculis, ipsum risus luctus est, non fringilla nisi mi et mauris. Quisque ac urna condimentum, pretium augue porta, laoreet nisl. Sed a neque egestas leo pretium malesuada. Sed sollicitudin ornare leo sed elementum.
+ " + - + title: "Text and Icon" + contentBlocks: + - + header: "Text and Icon - Left - Default - Default" + CType: texticon + bodytext: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec nisi odio, lacinia ac rutrum vitae, consequat eget quam. Curabitur ornare ipsum fringilla quam cursus, at condimentum sapien commodo. Mauris ac sagittis neque. Ut est sem, venenatis eget velit vitae, pellentesque vehicula nunc. Aliquam risus magna, rutrum vel pharetra eget, luctus id arcu. Cras vitae nunc pulvinar, tristique ipsum vitae, elementum magna. Praesent blandit ante ac placerat tincidunt. Vestibulum et elit arcu. Mauris sit amet libero non risus feugiat mattis vitae ac metus.
" + icon_position: left + icon_set: "EXT:bootstrap_package/Resources/Public/Images/Icons/Ionicons/" + icon: "EXT:bootstrap_package/Resources/Public/Images/Icons/Ionicons/earth.svg" + - + header: "Text and Icon - Right - Default - Default" + CType: texticon + bodytext: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec nisi odio, lacinia ac rutrum vitae, consequat eget quam. Curabitur ornare ipsum fringilla quam cursus, at condimentum sapien commodo. Mauris ac sagittis neque. Ut est sem, venenatis eget velit vitae, pellentesque vehicula nunc. Aliquam risus magna, rutrum vel pharetra eget, luctus id arcu. Cras vitae nunc pulvinar, tristique ipsum vitae, elementum magna. Praesent blandit ante ac placerat tincidunt. Vestibulum et elit arcu. Mauris sit amet libero non risus feugiat mattis vitae ac metus.
" + icon_position: right + icon_set: "EXT:bootstrap_package/Resources/Public/Images/Icons/Ionicons/" + icon: "EXT:bootstrap_package/Resources/Public/Images/Icons/Ionicons/earth.svg" + - + header: "Text and Icon - Top - Default - Default" + CType: texticon + bodytext: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec nisi odio, lacinia ac rutrum vitae, consequat eget quam. Curabitur ornare ipsum fringilla quam cursus, at condimentum sapien commodo. Mauris ac sagittis neque. Ut est sem, venenatis eget velit vitae, pellentesque vehicula nunc. Aliquam risus magna, rutrum vel pharetra eget, luctus id arcu. Cras vitae nunc pulvinar, tristique ipsum vitae, elementum magna. Praesent blandit ante ac placerat tincidunt. Vestibulum et elit arcu. Mauris sit amet libero non risus feugiat mattis vitae ac metus.
" + icon_position: top + icon_set: "EXT:bootstrap_package/Resources/Public/Images/Icons/Ionicons/" + icon: "EXT:bootstrap_package/Resources/Public/Images/Icons/Ionicons/earth.svg" + - + header: "Text and Icon - Left - Square - Default" + CType: texticon + bodytext: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec nisi odio, lacinia ac rutrum vitae, consequat eget quam. Curabitur ornare ipsum fringilla quam cursus, at condimentum sapien commodo. Mauris ac sagittis neque. Ut est sem, venenatis eget velit vitae, pellentesque vehicula nunc. Aliquam risus magna, rutrum vel pharetra eget, luctus id arcu. Cras vitae nunc pulvinar, tristique ipsum vitae, elementum magna. Praesent blandit ante ac placerat tincidunt. Vestibulum et elit arcu. Mauris sit amet libero non risus feugiat mattis vitae ac metus.
" + icon_position: left + icon_type: square + icon_set: "EXT:bootstrap_package/Resources/Public/Images/Icons/Ionicons/" + icon: "EXT:bootstrap_package/Resources/Public/Images/Icons/Ionicons/earth.svg" + - + header: "Text and Icon - Left - Circle - Default" + CType: texticon + bodytext: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec nisi odio, lacinia ac rutrum vitae, consequat eget quam. Curabitur ornare ipsum fringilla quam cursus, at condimentum sapien commodo. Mauris ac sagittis neque. Ut est sem, venenatis eget velit vitae, pellentesque vehicula nunc. Aliquam risus magna, rutrum vel pharetra eget, luctus id arcu. Cras vitae nunc pulvinar, tristique ipsum vitae, elementum magna. Praesent blandit ante ac placerat tincidunt. Vestibulum et elit arcu. Mauris sit amet libero non risus feugiat mattis vitae ac metus.
" + icon_position: left + icon_type: circle + icon_set: "EXT:bootstrap_package/Resources/Public/Images/Icons/Ionicons/" + icon: "EXT:bootstrap_package/Resources/Public/Images/Icons/Ionicons/earth.svg" + - + header: "Text and Icon - Left - Default - Medium" + CType: texticon + bodytext: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec nisi odio, lacinia ac rutrum vitae, consequat eget quam. Curabitur ornare ipsum fringilla quam cursus, at condimentum sapien commodo. Mauris ac sagittis neque. Ut est sem, venenatis eget velit vitae, pellentesque vehicula nunc. Aliquam risus magna, rutrum vel pharetra eget, luctus id arcu. Cras vitae nunc pulvinar, tristique ipsum vitae, elementum magna. Praesent blandit ante ac placerat tincidunt. Vestibulum et elit arcu. Mauris sit amet libero non risus feugiat mattis vitae ac metus.
" + icon_position: left + icon_size: medium + icon_set: "EXT:bootstrap_package/Resources/Public/Images/Icons/Ionicons/" + icon: "EXT:bootstrap_package/Resources/Public/Images/Icons/Ionicons/earth.svg" + - + header: "Text and Icon - Left - Default - Large" + CType: texticon + bodytext: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec nisi odio, lacinia ac rutrum vitae, consequat eget quam. Curabitur ornare ipsum fringilla quam cursus, at condimentum sapien commodo. Mauris ac sagittis neque. Ut est sem, venenatis eget velit vitae, pellentesque vehicula nunc. Aliquam risus magna, rutrum vel pharetra eget, luctus id arcu. Cras vitae nunc pulvinar, tristique ipsum vitae, elementum magna. Praesent blandit ante ac placerat tincidunt. Vestibulum et elit arcu. Mauris sit amet libero non risus feugiat mattis vitae ac metus.
" + icon_position: left + icon_size: large + icon_set: "EXT:bootstrap_package/Resources/Public/Images/Icons/Ionicons/" + icon: "EXT:bootstrap_package/Resources/Public/Images/Icons/Ionicons/earth.svg" + - + header: "Text and Icon - Left - Default - Awesome" + CType: texticon + bodytext: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec nisi odio, lacinia ac rutrum vitae, consequat eget quam. Curabitur ornare ipsum fringilla quam cursus, at condimentum sapien commodo. Mauris ac sagittis neque. Ut est sem, venenatis eget velit vitae, pellentesque vehicula nunc. Aliquam risus magna, rutrum vel pharetra eget, luctus id arcu. Cras vitae nunc pulvinar, tristique ipsum vitae, elementum magna. Praesent blandit ante ac placerat tincidunt. Vestibulum et elit arcu. Mauris sit amet libero non risus feugiat mattis vitae ac metus.
" + icon_position: left + icon_size: awesome + icon_set: "EXT:bootstrap_package/Resources/Public/Images/Icons/Ionicons/" + icon: "EXT:bootstrap_package/Resources/Public/Images/Icons/Ionicons/earth.svg" + - + title: "Text in Columns" + contentBlocks: + - + header: Phasellus pellentesque malesuada nibh + CType: textcolumn + subheader: Proin quis nibh venenatis, finibus sapien id, fringilla dolor. + bodytext: " +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin quis nibh venenatis, finibus sapien id, fringilla dolor. Aenean euismod arcu nec enim feugiat maximus. Aenean mollis eros eget elementum vulputate. Mauris fringilla magna quis condimentum mattis. Proin quis lacus non elit mollis viverra sed vel orci. Aenean aliquam elit sit amet est efficitur, eget pharetra est sodales. Sed at nulla pellentesque felis maximus faucibus sit amet ut augue. Nunc blandit, ex at facilisis maximus, arcu tellus fringilla purus, non cursus nibh diam sit amet velit. Maecenas efficitur mauris accumsan, elementum urna sit amet, scelerisque orci. Aliquam pulvinar aliquet lectus, at volutpat elit convallis non. Nam eu leo nibh. Praesent a ligula at urna tempor molestie luctus in metus.
+Nam ac quam ac libero malesuada commodo ut ac eros. Fusce ullamcorper laoreet ligula. In augue urna, fermentum eu iaculis ut, tristique eget lacus. Ut nec gravida turpis. Nam id commodo nisi. Phasellus tortor ante, molestie sed nisl ac, tincidunt sagittis justo. Nunc non nibh non magna consectetur viverra a vitae lacus. Duis dignissim odio feugiat, ornare massa ut, molestie velit. Aliquam erat volutpat. Integer nisi ligula, placerat eu ex quis, dignissim gravida arcu. In nec consectetur lorem. Aliquam sit amet risus tellus. Vivamus pellentesque, velit et fermentum dignissim, orci augue rhoncus ligula, ut sodales sem nulla vel nibh. Praesent ac risus tellus. Integer placerat efficitur elit, ut malesuada purus posuere non. Morbi sed dolor et ante sodales varius eget sed eros.
+Mauris id ipsum ut felis porttitor euismod. Morbi non venenatis augue. Vivamus euismod vehicula arcu. Morbi et sem nisl. Praesent non quam non massa aliquet ultricies gravida vel nisl. Pellentesque ultrices sem vel dui facilisis, ac porta orci elementum. Fusce cursus, velit auctor scelerisque iaculis, ipsum risus luctus est, non fringilla nisi mi et mauris. Quisque ac urna condimentum, pretium augue porta, laoreet nisl. Sed a neque egestas leo pretium malesuada. Sed sollicitudin ornare leo sed elementum.
+ " + - + title: "List Group" + contentBlocks: + - + header: List Group Example + CType: listgroup + bodytext: " + Lorem ipsum dolor sit amet, consectetur adipiscing elit\n + Maecenas blandit mauris vitae vehicula volutpat\n + Duis feugiat risus efficitur ligula condimentum tempus\n + Curabitur eget quam in ipsum tincidunt pulvinar ut a eros\n + Nam placerat erat sit amet euismod fermentum\n + " + - + title: "Panel" + contentBlocks: + - + header: "Panel" + bodytext: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam tempus turpis nisi, eleifend laoreet ipsum rutrum eu. Vivamus lorem tellus, fermentum eu vulputate vitae, facilisis ut metus.
" + - + header: "Panel - Default" + CType: panel + bodytext: " ++ Sed semper orci non elementum condimentum. Fusce at urna consectetur, sodales dolor accumsan, convallis neque. + Mauris varius urna vel facilisis laoreet. Nulla cursus consequat vehicula. Donec dignissim, augue sit amet dapibus + interdum, odio eros laoreet mi, id egestas dui felis eget tortor. Class aptent taciti sociosqu ad litora torquent + per conubia nostra, per inceptos himenaeos. Pellentesque lobortis efficitur finibus. Nulla facilisi. +
+ " + panel_class: default + - + header: "Panel - Primary" + CType: panel + bodytext: " ++ Sed semper orci non elementum condimentum. Fusce at urna consectetur, sodales dolor accumsan, convallis neque. + Mauris varius urna vel facilisis laoreet. Nulla cursus consequat vehicula. Donec dignissim, augue sit amet dapibus + interdum, odio eros laoreet mi, id egestas dui felis eget tortor. Class aptent taciti sociosqu ad litora torquent + per conubia nostra, per inceptos himenaeos. Pellentesque lobortis efficitur finibus. Nulla facilisi. +
+ " + panel_class: primary + - + header: "Panel - Success" + CType: panel + bodytext: " ++ Sed semper orci non elementum condimentum. Fusce at urna consectetur, sodales dolor accumsan, convallis neque. + Mauris varius urna vel facilisis laoreet. Nulla cursus consequat vehicula. Donec dignissim, augue sit amet dapibus + interdum, odio eros laoreet mi, id egestas dui felis eget tortor. Class aptent taciti sociosqu ad litora torquent + per conubia nostra, per inceptos himenaeos. Pellentesque lobortis efficitur finibus. Nulla facilisi. +
+ " + panel_class: success + - + header: "Panel - Info" + CType: panel + bodytext: " ++ Sed semper orci non elementum condimentum. Fusce at urna consectetur, sodales dolor accumsan, convallis neque. + Mauris varius urna vel facilisis laoreet. Nulla cursus consequat vehicula. Donec dignissim, augue sit amet dapibus + interdum, odio eros laoreet mi, id egestas dui felis eget tortor. Class aptent taciti sociosqu ad litora torquent + per conubia nostra, per inceptos himenaeos. Pellentesque lobortis efficitur finibus. Nulla facilisi. +
+ " + panel_class: info + - + header: "Panel - Warning" + CType: panel + bodytext: " ++ Sed semper orci non elementum condimentum. Fusce at urna consectetur, sodales dolor accumsan, convallis neque. + Mauris varius urna vel facilisis laoreet. Nulla cursus consequat vehicula. Donec dignissim, augue sit amet dapibus + interdum, odio eros laoreet mi, id egestas dui felis eget tortor. Class aptent taciti sociosqu ad litora torquent + per conubia nostra, per inceptos himenaeos. Pellentesque lobortis efficitur finibus. Nulla facilisi. +
+ " + panel_class: warning + - + header: "Panel - Danger" + CType: panel + bodytext: " ++ Sed semper orci non elementum condimentum. Fusce at urna consectetur, sodales dolor accumsan, convallis neque. + Mauris varius urna vel facilisis laoreet. Nulla cursus consequat vehicula. Donec dignissim, augue sit amet dapibus + interdum, odio eros laoreet mi, id egestas dui felis eget tortor. Class aptent taciti sociosqu ad litora torquent + per conubia nostra, per inceptos himenaeos. Pellentesque lobortis efficitur finibus. Nulla facilisi. +
+ " + panel_class: danger + - + title: "Table" + contentBlocks: + - + header: "Basic" + CType: table + table_header_position: 1 + bodytext: " + Title 1|Title 2|Title 3\n + Row 1|Row 1|Row 1\n + Row 2|Row 2|Row 2\n + Row 3|Row 3|Row 3\n + Row 4|Row 4|Row 4\n + " + - + header: "Striped rows" + CType: table + table_class: striped + table_header_position: 1 + bodytext: " + Title 1|Title 2|Title 3\n + Row 1|Row 1|Row 1\n + Row 2|Row 2|Row 2\n + Row 3|Row 3|Row 3\n + Row 4|Row 4|Row 4\n + " + - + header: "Bordered" + CType: table + table_class: bordered + table_header_position: 1 + bodytext: " + Title 1|Title 2|Title 3\n + Row 1|Row 1|Row 1\n + Row 2|Row 2|Row 2\n + Row 3|Row 3|Row 3\n + Row 4|Row 4|Row 4\n + " + - + header: "Condensed" + CType: table + table_class: condensed + table_header_position: 1 + bodytext: " + Title 1|Title 2|Title 3\n + Row 1|Row 1|Row 1\n + Row 2|Row 2|Row 2\n + Row 3|Row 3|Row 3\n + Row 4|Row 4|Row 4\n + " + - + title: "Quote" + contentBlocks: + - + header: "Quote" + bodytext: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam tempus turpis nisi, eleifend laoreet ipsum rutrum eu. Vivamus lorem tellus, fermentum eu vulputate vitae, facilisis ut metus.
" + - + header: "W3C HTML5 specification" + CType: quote + quote_source: "W3C HTML5 specification" + quote_link: "http://w3c.github.io/html/grouping-content.html#the-blockquote-element" + bodytext: "The blockquote element represents a section that is quoted from another source." + - + title: "Media" + pages: + - + title: "Audio" + - + id: NEW_PAGECARDGROUP + title: "Card Group" + contentBlocks: + - + header: "Card Group" + bodytext: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam tempus turpis nisi, eleifend laoreet ipsum rutrum eu. Vivamus lorem tellus, fermentum eu vulputate vitae, facilisis ut metus.
" + - + header: "Cards in 2 Columns" + CType: card_group + pi_flexform: + data: + sDEF: + lDEF: + align: + vDEF: left + columns: + vDEF: 2 + tx_bootstrappackage_card_group_item: + - + header: "Card title" + subheader: "Card subtitle" + bodytext: "Some quick example text to build on the card title and make up the bulk of the card's content." + link: "t3://page?uid=NEW_PAGECARDGROUP" + link_title: "Go somewhere" + link_class: primary + - + header: "Card title" + subheader: "Card subtitle" + bodytext: "Some quick example text to build on the card title and make up the bulk of the card's content." + link: "t3://page?uid=NEW_PAGECARDGROUP" + link_title: "Go somewhere" + link_class: primary + - + title: "Icon Group" + - + title: "Gallery" + - + title: "Text and Images" + contentBlocks: + - + header: "Position: Beside text, left" + CType: textpic + imageorient: 126 + bodytext: " +Nam aliquam, lorem nec dapibus feugiat, ipsum quam laoreet arcu, sed ullamcorper augue augue vitae magna.
+Hambiam est lectus, interdum id, accumsan a, blandit quis, mauris placerat sit amet, nibh. Lacus lectus est mattis vel, pharetra sit amet. Nam laoreet, erat ac laoreet euismod, sapien felis pretium libero, semper euismod mauris metus quis tortor.
+ " + - + header: "Position: Beside text, right" + CType: textpic + imageorient: 125 + bodytext: " +Nam aliquam, lorem nec dapibus feugiat, ipsum quam laoreet arcu, sed ullamcorper augue augue vitae magna.
+Hambiam est lectus, interdum id, accumsan a, blandit quis, mauris placerat sit amet, nibh. Lacus lectus est mattis vel, pharetra sit amet. Nam laoreet, erat ac laoreet euismod, sapien felis pretium libero, semper euismod mauris metus quis tortor.
+ " + - + header: "Position: Above" + CType: textpic + imageorient: 0 + bodytext: " +Nam aliquam, lorem nec dapibus feugiat, ipsum quam laoreet arcu, sed ullamcorper augue augue vitae magna.
+Hambiam est lectus, interdum id, accumsan a, blandit quis, mauris placerat sit amet, nibh. Lacus lectus est mattis vel, pharetra sit amet. Nam laoreet, erat ac laoreet euismod, sapien felis pretium libero, semper euismod mauris metus quis tortor.
+ " + - + header: "Position: Below" + CType: textpic + imageorient: 8 + bodytext: " +Nam aliquam, lorem nec dapibus feugiat, ipsum quam laoreet arcu, sed ullamcorper augue augue vitae magna.
+Hambiam est lectus, interdum id, accumsan a, blandit quis, mauris placerat sit amet, nibh. Lacus lectus est mattis vel, pharetra sit amet. Nam laoreet, erat ac laoreet euismod, sapien felis pretium libero, semper euismod mauris metus quis tortor.
+ " + - + title: "Text and Media" + - + title: "File downloads" + - + title: "Images" + - + title: "Media" + - + title: "External Media" + - + title: "Interactive" + pages: + - + title: "Accordion" + contentBlocks: + - + header: "Accordions" + bodytext: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam tempus turpis nisi, eleifend laoreet ipsum rutrum eu. Vivamus lorem tellus, fermentum eu vulputate vitae, facilisis ut metus.
" + - + CType: accordion + tx_bootstrappackage_accordion_item: + - + header: "Media Left" + bodytext: " +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus lorem ut efficitur ultrices. Aliquam efficitur ante non molestie sodales. Nunc ullamcorper tempus diam, ac pretium urna vestibulum sed. Nam placerat nulla in fermentum sagittis. Curabitur eget sapien nec quam egestas faucibus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut a augue sed tellus laoreet porta nec sit amet urna. Duis finibus metus commodo tortor auctor ullamcorper ac sed urna. Praesent interdum, velit ut bibendum vulputate, elit augue congue eros, at egestas nunc arcu non sem. In malesuada semper neque cursus sagittis. Morbi ac risus eu risus mollis ornare consequat eu leo.
+Donec lacinia pretium enim, non tristique urna dignissim non. Fusce volutpat, arcu et iaculis lobortis, erat neque rutrum mauris, eu cursus nulla ante in ipsum. Vestibulum sagittis dictum turpis in placerat. Sed mollis finibus nulla sit amet dapibus. Donec blandit, nibh et ultrices efficitur, ligula justo mollis elit, a tincidunt diam neque gravida dolor. Vivamus a turpis sed magna eleifend elementum. Nullam pretium tincidunt mattis. Sed vel felis turpis. Integer sit amet turpis quam. Duis in dapibus augue. In cursus rhoncus velit ut hendrerit. Quisque sit amet est quis quam mattis venenatis. Aliquam diam purus, venenatis ut malesuada ut, venenatis eu sem. Proin a velit dui. In tempus lorem et neque interdum placerat.
+ " + mediaorient: left + - + header: "Media Right" + bodytext: " +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus lorem ut efficitur ultrices. Aliquam efficitur ante non molestie sodales. Nunc ullamcorper tempus diam, ac pretium urna vestibulum sed. Nam placerat nulla in fermentum sagittis. Curabitur eget sapien nec quam egestas faucibus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut a augue sed tellus laoreet porta nec sit amet urna. Duis finibus metus commodo tortor auctor ullamcorper ac sed urna. Praesent interdum, velit ut bibendum vulputate, elit augue congue eros, at egestas nunc arcu non sem. In malesuada semper neque cursus sagittis. Morbi ac risus eu risus mollis ornare consequat eu leo.
+Donec lacinia pretium enim, non tristique urna dignissim non. Fusce volutpat, arcu et iaculis lobortis, erat neque rutrum mauris, eu cursus nulla ante in ipsum. Vestibulum sagittis dictum turpis in placerat. Sed mollis finibus nulla sit amet dapibus. Donec blandit, nibh et ultrices efficitur, ligula justo mollis elit, a tincidunt diam neque gravida dolor. Vivamus a turpis sed magna eleifend elementum. Nullam pretium tincidunt mattis. Sed vel felis turpis. Integer sit amet turpis quam. Duis in dapibus augue. In cursus rhoncus velit ut hendrerit. Quisque sit amet est quis quam mattis venenatis. Aliquam diam purus, venenatis ut malesuada ut, venenatis eu sem. Proin a velit dui. In tempus lorem et neque interdum placerat.
+ " + mediaorient: right + - + header: "Media Top" + bodytext: " +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus lorem ut efficitur ultrices. Aliquam efficitur ante non molestie sodales. Nunc ullamcorper tempus diam, ac pretium urna vestibulum sed. Nam placerat nulla in fermentum sagittis. Curabitur eget sapien nec quam egestas faucibus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut a augue sed tellus laoreet porta nec sit amet urna. Duis finibus metus commodo tortor auctor ullamcorper ac sed urna. Praesent interdum, velit ut bibendum vulputate, elit augue congue eros, at egestas nunc arcu non sem. In malesuada semper neque cursus sagittis. Morbi ac risus eu risus mollis ornare consequat eu leo.
+Donec lacinia pretium enim, non tristique urna dignissim non. Fusce volutpat, arcu et iaculis lobortis, erat neque rutrum mauris, eu cursus nulla ante in ipsum. Vestibulum sagittis dictum turpis in placerat. Sed mollis finibus nulla sit amet dapibus. Donec blandit, nibh et ultrices efficitur, ligula justo mollis elit, a tincidunt diam neque gravida dolor. Vivamus a turpis sed magna eleifend elementum. Nullam pretium tincidunt mattis. Sed vel felis turpis. Integer sit amet turpis quam. Duis in dapibus augue. In cursus rhoncus velit ut hendrerit. Quisque sit amet est quis quam mattis venenatis. Aliquam diam purus, venenatis ut malesuada ut, venenatis eu sem. Proin a velit dui. In tempus lorem et neque interdum placerat.
+ " + mediaorient: top + - + header: "Media Bottom" + bodytext: " +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus lorem ut efficitur ultrices. Aliquam efficitur ante non molestie sodales. Nunc ullamcorper tempus diam, ac pretium urna vestibulum sed. Nam placerat nulla in fermentum sagittis. Curabitur eget sapien nec quam egestas faucibus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut a augue sed tellus laoreet porta nec sit amet urna. Duis finibus metus commodo tortor auctor ullamcorper ac sed urna. Praesent interdum, velit ut bibendum vulputate, elit augue congue eros, at egestas nunc arcu non sem. In malesuada semper neque cursus sagittis. Morbi ac risus eu risus mollis ornare consequat eu leo.
+Donec lacinia pretium enim, non tristique urna dignissim non. Fusce volutpat, arcu et iaculis lobortis, erat neque rutrum mauris, eu cursus nulla ante in ipsum. Vestibulum sagittis dictum turpis in placerat. Sed mollis finibus nulla sit amet dapibus. Donec blandit, nibh et ultrices efficitur, ligula justo mollis elit, a tincidunt diam neque gravida dolor. Vivamus a turpis sed magna eleifend elementum. Nullam pretium tincidunt mattis. Sed vel felis turpis. Integer sit amet turpis quam. Duis in dapibus augue. In cursus rhoncus velit ut hendrerit. Quisque sit amet est quis quam mattis venenatis. Aliquam diam purus, venenatis ut malesuada ut, venenatis eu sem. Proin a velit dui. In tempus lorem et neque interdum placerat.
+ " + mediaorient: bottom + - + title: "Carousel" + - + title: "Tab" + contentBlocks: + - + header: "Tab" + bodytext: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam tempus turpis nisi, eleifend laoreet ipsum rutrum eu. Vivamus lorem tellus, fermentum eu vulputate vitae, facilisis ut metus.
" + - + CType: tab + tx_bootstrappackage_tab_item: + - + header: "Media Left" + bodytext: " +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus lorem ut efficitur ultrices. Aliquam efficitur ante non molestie sodales. Nunc ullamcorper tempus diam, ac pretium urna vestibulum sed. Nam placerat nulla in fermentum sagittis. Curabitur eget sapien nec quam egestas faucibus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut a augue sed tellus laoreet porta nec sit amet urna. Duis finibus metus commodo tortor auctor ullamcorper ac sed urna. Praesent interdum, velit ut bibendum vulputate, elit augue congue eros, at egestas nunc arcu non sem. In malesuada semper neque cursus sagittis. Morbi ac risus eu risus mollis ornare consequat eu leo.
+Donec lacinia pretium enim, non tristique urna dignissim non. Fusce volutpat, arcu et iaculis lobortis, erat neque rutrum mauris, eu cursus nulla ante in ipsum. Vestibulum sagittis dictum turpis in placerat. Sed mollis finibus nulla sit amet dapibus. Donec blandit, nibh et ultrices efficitur, ligula justo mollis elit, a tincidunt diam neque gravida dolor. Vivamus a turpis sed magna eleifend elementum. Nullam pretium tincidunt mattis. Sed vel felis turpis. Integer sit amet turpis quam. Duis in dapibus augue. In cursus rhoncus velit ut hendrerit. Quisque sit amet est quis quam mattis venenatis. Aliquam diam purus, venenatis ut malesuada ut, venenatis eu sem. Proin a velit dui. In tempus lorem et neque interdum placerat.
+ " + mediaorient: left + - + header: "Media Right" + bodytext: " +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus lorem ut efficitur ultrices. Aliquam efficitur ante non molestie sodales. Nunc ullamcorper tempus diam, ac pretium urna vestibulum sed. Nam placerat nulla in fermentum sagittis. Curabitur eget sapien nec quam egestas faucibus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut a augue sed tellus laoreet porta nec sit amet urna. Duis finibus metus commodo tortor auctor ullamcorper ac sed urna. Praesent interdum, velit ut bibendum vulputate, elit augue congue eros, at egestas nunc arcu non sem. In malesuada semper neque cursus sagittis. Morbi ac risus eu risus mollis ornare consequat eu leo.
+Donec lacinia pretium enim, non tristique urna dignissim non. Fusce volutpat, arcu et iaculis lobortis, erat neque rutrum mauris, eu cursus nulla ante in ipsum. Vestibulum sagittis dictum turpis in placerat. Sed mollis finibus nulla sit amet dapibus. Donec blandit, nibh et ultrices efficitur, ligula justo mollis elit, a tincidunt diam neque gravida dolor. Vivamus a turpis sed magna eleifend elementum. Nullam pretium tincidunt mattis. Sed vel felis turpis. Integer sit amet turpis quam. Duis in dapibus augue. In cursus rhoncus velit ut hendrerit. Quisque sit amet est quis quam mattis venenatis. Aliquam diam purus, venenatis ut malesuada ut, venenatis eu sem. Proin a velit dui. In tempus lorem et neque interdum placerat.
+ " + mediaorient: right + - + header: "Media Top" + bodytext: " +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus lorem ut efficitur ultrices. Aliquam efficitur ante non molestie sodales. Nunc ullamcorper tempus diam, ac pretium urna vestibulum sed. Nam placerat nulla in fermentum sagittis. Curabitur eget sapien nec quam egestas faucibus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut a augue sed tellus laoreet porta nec sit amet urna. Duis finibus metus commodo tortor auctor ullamcorper ac sed urna. Praesent interdum, velit ut bibendum vulputate, elit augue congue eros, at egestas nunc arcu non sem. In malesuada semper neque cursus sagittis. Morbi ac risus eu risus mollis ornare consequat eu leo.
+Donec lacinia pretium enim, non tristique urna dignissim non. Fusce volutpat, arcu et iaculis lobortis, erat neque rutrum mauris, eu cursus nulla ante in ipsum. Vestibulum sagittis dictum turpis in placerat. Sed mollis finibus nulla sit amet dapibus. Donec blandit, nibh et ultrices efficitur, ligula justo mollis elit, a tincidunt diam neque gravida dolor. Vivamus a turpis sed magna eleifend elementum. Nullam pretium tincidunt mattis. Sed vel felis turpis. Integer sit amet turpis quam. Duis in dapibus augue. In cursus rhoncus velit ut hendrerit. Quisque sit amet est quis quam mattis venenatis. Aliquam diam purus, venenatis ut malesuada ut, venenatis eu sem. Proin a velit dui. In tempus lorem et neque interdum placerat.
+ " + mediaorient: top + - + header: "Media Bottom" + bodytext: " +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus lorem ut efficitur ultrices. Aliquam efficitur ante non molestie sodales. Nunc ullamcorper tempus diam, ac pretium urna vestibulum sed. Nam placerat nulla in fermentum sagittis. Curabitur eget sapien nec quam egestas faucibus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut a augue sed tellus laoreet porta nec sit amet urna. Duis finibus metus commodo tortor auctor ullamcorper ac sed urna. Praesent interdum, velit ut bibendum vulputate, elit augue congue eros, at egestas nunc arcu non sem. In malesuada semper neque cursus sagittis. Morbi ac risus eu risus mollis ornare consequat eu leo.
+Donec lacinia pretium enim, non tristique urna dignissim non. Fusce volutpat, arcu et iaculis lobortis, erat neque rutrum mauris, eu cursus nulla ante in ipsum. Vestibulum sagittis dictum turpis in placerat. Sed mollis finibus nulla sit amet dapibus. Donec blandit, nibh et ultrices efficitur, ligula justo mollis elit, a tincidunt diam neque gravida dolor. Vivamus a turpis sed magna eleifend elementum. Nullam pretium tincidunt mattis. Sed vel felis turpis. Integer sit amet turpis quam. Duis in dapibus augue. In cursus rhoncus velit ut hendrerit. Quisque sit amet est quis quam mattis venenatis. Aliquam diam purus, venenatis ut malesuada ut, venenatis eu sem. Proin a velit dui. In tempus lorem et neque interdum placerat.
+ " + mediaorient: bottom + - + title: "Timeline" + contentBlocks: + - + header: "Timeline" + bodytext: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam tempus turpis nisi, eleifend laoreet ipsum rutrum eu. Vivamus lorem tellus, fermentum eu vulputate vitae, facilisis ut metus.
" + - + header: "Milestones" + CType: timeline + tx_bootstrappackage_timeline_item: + - + date: "2018-09-27 00:00:00" + header: "10.0.0 - Major release" + bodytext: " +
+ Supports: 8.7.0 - 9.5.99
+ Detailed information on GitHub.
+
+ Supports: 8.7.0 - 9.5.99
+ Detailed information on GitHub.
+
+ Supports: 8.7.0 - 9.0.99
+ Detailed information on GitHub.
+
+ Supports: 8.7.0 - 9.0.99
+ Detailed information on GitHub.
+
+ Supports: 7.6.2 - 8.5.99
+ Detailed information on GitHub.
+
+ Supports: 7.6.2 - 7.99.99
+ Detailed information on GitHub.
+
+ Supports: 6.2.14 - 7.99.99
+ Detailed information on GitHub.
+
+ Frames are centrally configured layouts for different content elements. + Frames can be used, for example, to allow a content editor to apply a + specific background image and/or color to specific content elements + throughout the website. +
+ " + - + header: "Ruler before" + frame_class: ruler-before + bodytext: "You can set a rulers before or after each content element.
" + - + header: "Ruler after" + frame_class: ruler-after + space_after_class: medium + bodytext: "Here the ruler is positioned after the element.
" + - + header: "Ruler after coloured" + frame_class: ruler-after + background_color_class: "primary" + bodytext: "Here the ruler is positioned after the element.
" + - + header: "Ruler before coloured" + background_color_class: primary + bodytext: "You can set a rulers before or after each content element.
" + - + header: "Indent" + frame_class: indent + bodytext: "Donec volutpat pulvinar enim tincidunt sagittis. Duis rutrum enim leo. Maecenas euismod congue blandit? Aliquam et auctor sapien. Phasellus ut pellentesque tellus. Sed ac libero vitae quam porttitor viverra. Nullam neque libero, luctus suscipit ultricies in, tincidunt ac justo?
" + - + header: "Indent left" + frame_class: indent-left + bodytext: "Donec volutpat pulvinar enim tincidunt sagittis. Duis rutrum enim leo. Maecenas euismod congue blandit? Aliquam et auctor sapien. Phasellus ut pellentesque tellus. Sed ac libero vitae quam porttitor viverra. Nullam neque libero, luctus suscipit ultricies in, tincidunt ac justo?
" + - + header: "Indent right" + frame_class: indent-right + bodytext: "Donec volutpat pulvinar enim tincidunt sagittis. Duis rutrum enim leo. Maecenas euismod congue blandit? Aliquam et auctor sapien. Phasellus ut pellentesque tellus. Sed ac libero vitae quam porttitor viverra. Nullam neque libero, luctus suscipit ultricies in, tincidunt ac justo?
" + - + header: "Coloured Backgrounds (light)" + background_color_class: light + bodytext: "Duis luctus, enim commodo auctor sodales, mi dui facilisis elit, a lobortis quam lacus nec velit. Nam pharetra, augue quis tristique consequat, arcu orci tincidunt dolor, et vehicula nulla risus vel nisi? Maecenas vel ligula lorem. Pellentesque ullamcorper dolor non justo faucibus eleifend. Sed nec sapien vel massa vulputate vehicula eget eu nisl.
" + - + header: "Coloured Backgrounds (dark)" + background_color_class: dark + bodytext: "Duis luctus, enim commodo auctor sodales, mi dui facilisis elit, a lobortis quam lacus nec velit. Nam pharetra, augue quis tristique consequat, arcu orci tincidunt dolor, et vehicula nulla risus vel nisi? Maecenas vel ligula lorem. Pellentesque ullamcorper dolor non justo faucibus eleifend. Sed nec sapien vel massa vulputate vehicula eget eu nisl.
" + - + header: "Coloured Backgrounds (primary)" + background_color_class: primary + bodytext: "Duis luctus, enim commodo auctor sodales, mi dui facilisis elit, a lobortis quam lacus nec velit. Nam pharetra, augue quis tristique consequat, arcu orci tincidunt dolor, et vehicula nulla risus vel nisi? Maecenas vel ligula lorem. Pellentesque ullamcorper dolor non justo faucibus eleifend. Sed nec sapien vel massa vulputate vehicula eget eu nisl.
" + - + header: "If the same backgrounds follow each other, the distance between the elements is reduced." + background_color_class: primary + bodytext: "Duis luctus, enim commodo auctor sodales, mi dui facilisis elit, a lobortis quam lacus nec velit. Nam pharetra, augue quis tristique consequat, arcu orci tincidunt dolor, et vehicula nulla risus vel nisi? Maecenas vel ligula lorem. Pellentesque ullamcorper dolor non justo faucibus eleifend. Sed nec sapien vel massa vulputate vehicula eget eu nisl.
" + - + header: "Coloured Backgrounds (secondary)" + background_color_class: secondary + bodytext: "Duis luctus, enim commodo auctor sodales, mi dui facilisis elit, a lobortis quam lacus nec velit. Nam pharetra, augue quis tristique consequat, arcu orci tincidunt dolor, et vehicula nulla risus vel nisi? Maecenas vel ligula lorem. Pellentesque ullamcorper dolor non justo faucibus eleifend. Sed nec sapien vel massa vulputate vehicula eget eu nisl.
" + - + header: "Coloured Backgrounds (light)" + frame_layout: embedded + background_color_class: light + bodytext: "Duis luctus, enim commodo auctor sodales, mi dui facilisis elit, a lobortis quam lacus nec velit. Nam pharetra, augue quis tristique consequat, arcu orci tincidunt dolor, et vehicula nulla risus vel nisi? Maecenas vel ligula lorem. Pellentesque ullamcorper dolor non justo faucibus eleifend. Sed nec sapien vel massa vulputate vehicula eget eu nisl.
" + - + header: "Coloured Backgrounds (dark)" + frame_layout: embedded + background_color_class: dark + bodytext: "Duis luctus, enim commodo auctor sodales, mi dui facilisis elit, a lobortis quam lacus nec velit. Nam pharetra, augue quis tristique consequat, arcu orci tincidunt dolor, et vehicula nulla risus vel nisi? Maecenas vel ligula lorem. Pellentesque ullamcorper dolor non justo faucibus eleifend. Sed nec sapien vel massa vulputate vehicula eget eu nisl.
" + - + header: "Coloured Backgrounds (primary)" + frame_layout: embedded + background_color_class: primary + bodytext: "Duis luctus, enim commodo auctor sodales, mi dui facilisis elit, a lobortis quam lacus nec velit. Nam pharetra, augue quis tristique consequat, arcu orci tincidunt dolor, et vehicula nulla risus vel nisi? Maecenas vel ligula lorem. Pellentesque ullamcorper dolor non justo faucibus eleifend. Sed nec sapien vel massa vulputate vehicula eget eu nisl.
" + - + header: "Coloured Backgrounds (secondary)" + frame_layout: embedded + background_color_class: secondary + bodytext: "Duis luctus, enim commodo auctor sodales, mi dui facilisis elit, a lobortis quam lacus nec velit. Nam pharetra, augue quis tristique consequat, arcu orci tincidunt dolor, et vehicula nulla risus vel nisi? Maecenas vel ligula lorem. Pellentesque ullamcorper dolor non justo faucibus eleifend. Sed nec sapien vel massa vulputate vehicula eget eu nisl.
" + - + title: "Images with links" + - + title: "Any language, any character" + - + title: "404" + nav_hide: true + - + id: "NEW_PAGELEGAL" + title: "Legal" + nav_hide: true + - + id: "NEW_PAGEPRIVACY" + title: "Privacy" + nav_hide: true + - + id: "NEW_PAGEFOOTER" + doktype: 254 + title: "Footer" + pages: + - + doktype: 4 + title: "Imprint" + shortcut: "NEW_PAGELEGAL" + shortcut_mode: 0 + - + doktype: 4 + title: "Privacy" + shortcut: "NEW_PAGEPRIVACY" + shortcut_mode: 0 diff --git a/Classes/SiteCreator/Service/SiteCreatorService.php b/Classes/SiteCreator/Service/SiteCreatorService.php new file mode 100644 index 000000000..46198f029 --- /dev/null +++ b/Classes/SiteCreator/Service/SiteCreatorService.php @@ -0,0 +1,71 @@ +load($filename, 0); + $site = SiteFactory::fromArray($configuration['sitecreator']); + $this->createSite($site); + } + + public function createSite(Site $site): void + { + $data = $site->toDataHandler(); + $data = $this->sortByPriority($data); + + /** @var DataHandler $dataHandler */ + $dataHandler = GeneralUtility::makeInstance(DataHandler::class); + $dataHandler->start($data, []); + $dataHandler->process_datamap(); + + BackendUtility::setUpdateSignal('updatePageTree'); + } + + /** + * @return array