make icon indicating copy to clipboard operation
make copied to clipboard

Feature: Minimal Site Package ?

Open susannemoog opened this issue 3 years ago • 1 comments

While the sitepackagebuilder provides a web GUI and enables us to download "fat" site packages with many many things preconfigured, I'm missing the slightly more nerdy way: create a slim sitepackage via CLI. Maybe this is something "make" could provide. What would I consider slim? Mainly what the official tutorial about the site package creates, just going to add my overview of that to this issue for consideration:

mkdir site_package
cd site_package

mkdir -p Resources/Private/Layouts/Page
mkdir -p Resources/Private/Templates/Page
mkdir -p Resources/Private/Partials/Page/Navigation
mkdir -p Resources/Private/Language
mkdir -p Resources/Public/Css
mkdir -p Resources/Public/Images
mkdir -p Resources/Public/JavaScript
mkdir -p Configuration/TypoScript/Setup/
mkdir -p Configuration/TsConfig/Page/
mkdir -p Configuration/TsConfig/Page/PageLayout/
mkdir -p Configuration/TCA/Overrides/

touch Resources/Public/Css/app.css
touch Resources/Private/Layouts/Page/Default.html
touch Resources/Private/Templates/Page/Default.html
touch Resources/Private/Partials/Page/Navigation/MainNavigation.html
touch Configuration/TypoScript/constants.typoscript
touch Configuration/TypoScript/setup.typoscript
touch Configuration/TCA/Overrides/sys_template.php
touch Configuration/TsConfig/Page/Page.tsconfig
touch Configuration/TypoScript/Setup/DynamicContent.typoscript

Configuration/TypoScript/constants.typoscript

@import 'EXT:fluid_styled_content/Configuration/TypoScript/constants.typoscript'

page {
  fluidtemplate {
    layoutRootPath = EXT:site_package/Resources/Private/Layouts/Page/
    partialRootPath = EXT:site_package/Resources/Private/Partials/Page/
    templateRootPath = EXT:site_package/Resources/Private/Templates/Page/
  }
}

Configuration/TypoScript/setup.typoscript

@import 'EXT:fluid_styled_content/Configuration/TypoScript/setup.typoscript'
@import 'EXT:site_package/Configuration/TypoScript/Setup/*.typoscript'

page = PAGE
page.10 = FLUIDTEMPLATE
page.10 {
  templateName = TEXT
  templateName {
    cObject = TEXT
    cObject {
      data = pagelayout
      required = 1
      case = ucfirst
      split {
        token = pagets__
        cObjNum = 1
        1.current = 1
      }
    }

    ifEmpty = Default
  }

  templateRootPaths {
    0 = EXT:site_package/Resources/Private/Templates/Page/
    1 = {$page.fluidtemplate.templateRootPath}
  }

  partialRootPaths {
    0 = EXT:site_package/Resources/Private/Partials/Page/
    1 = {$page.fluidtemplate.partialRootPath}
  }

  layoutRootPaths {
    0 = EXT:site_package/Resources/Private/Layouts/Page/
    1 = {$page.fluidtemplate.layoutRootPath}
  }

    dataProcessing {
      10 = TYPO3\CMS\Frontend\DataProcessing\MenuProcessor
      10 {
         levels = 1
         includeSpacer = 1
         as = mainnavigation
      }
   }
}

config {
    admPanel = 1
}

Configuration/TCA/Overrides/sys_template.php

<?php
defined('TYPO3') || die();

call_user_func(function () {
    /**
     * Extension key
     */
    $extensionKey = 'site_package';

    /**
     * Add default TypoScript (constants and setup)
     */
    \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile(
        $extensionKey,
        'Configuration/TypoScript',
        'Site Package'
    );
});

Resources/Private/Layouts/Page/Default.html

<f:asset.css identifier="identifier123" href="EXT:site_package/Resources/Public/Css/app.css" />
<f:render section="Main" />

Resources/Private/Templates/Page/Default.html

<f:layout name="Default" />
<f:section name="Main">
    <f:render partial="Navigation/MainNavigation.html" arguments="{_all}"/>
    <f:cObject typoscriptObjectPath="lib.dynamicContent" data="{colPos: '0'}" />
</f:section>

Resources/Private/Partials/Page/Navigation/MainNavigation.html

<nav>
    <ul>
        <f:for each="{mainnavigation}" as="mainnavigationItem">
        <li class="{f:if(condition: mainnavigationItem.active, then: 'active')}">
            <a 
                href="{mainnavigationItem.link}"
                target="{mainnavigationItem.target}"
                title="{mainnavigationItem.title}"
                >
                {mainnavigationItem.title}
            </a>
        </li>
        </f:for>
    </ul>
</nav>

Configuration/TsConfig/Page/Page.tsconfig

@import 'EXT:site_package/Configuration/TsConfig/Page/PageLayout/*.tsconfig'

Configuration/TsConfig/Page/PageLayout/Default.tsconfig

mod.web_layout.BackendLayouts {
    Default {
        title = Default Layout
        config {
            backend_layout {
                colCount = 1
                rowCount = 1
                rows {
                    1 {
                        columns {
                            1 {
                                name = Main
                                colPos = 0
                            }
                        }
                    }
                }
            }
        }
    }
}

Configuration/TypoScript/Setup/DynamicContent.typoscript

lib.dynamicContent = COA
lib.dynamicContent {
    5 = LOAD_REGISTER
    5 {
        colPos.cObject = TEXT
        colPos.cObject {
            field = colPos
            ifEmpty.cObject = TEXT
            ifEmpty.cObject {
                value.current = 1
                ifEmpty = 0
            }
        }
        pageUid.cObject = TEXT
        pageUid.cObject {
            field = pageUid
            ifEmpty.data = TSFE:id
        }
        contentFromPid.cObject = TEXT
        contentFromPid.cObject {
            data = DB:pages:{register:pageUid}:content_from_pid
            data.insertData = 1
        }
        wrap.cObject = TEXT
        wrap.cObject {
            field = wrap
        }
    }
    20 = CONTENT
    20 {
        table = tt_content
        select {
            includeRecordsWithoutDefaultTranslation = 1
            orderBy = sorting
            where = {#colPos}={register:colPos}
            where.insertData = 1
            pidInList.data = register:pageUid
            pidInList.override.data = register:contentFromPid
        }
        stdWrap {
            dataWrap = {register:wrap}
            required = 1
        }
    }
    90 = RESTORE_REGISTER
}

Configuration/TCA/Overrides/pages.php

<?php

defined('TYPO3') || die();

(static function () {
    \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::registerPageTSConfigFile(
        'site_package',
        'Configuration/TsConfig/Page/Page.tsconfig',
        'Site Package Config'
    );
})();

susannemoog avatar Jan 18 '22 17:01 susannemoog

I would opt to also using dataprocessors to display the content as described in the site package tutorial:

https://docs.typo3.org/m/typo3/tutorial-sitepackage/main/en-us/ContentMapping/Index.html#content-rendering-via-data-processing

linawolf avatar Sep 16 '22 12:09 linawolf