Initial commit
283
.ddev/config.yaml
Normal file
@@ -0,0 +1,283 @@
|
|||||||
|
name: typo3-basic
|
||||||
|
type: typo3
|
||||||
|
docroot: public
|
||||||
|
php_version: "8.3"
|
||||||
|
webserver_type: nginx-fpm
|
||||||
|
xdebug_enabled: false
|
||||||
|
additional_hostnames: []
|
||||||
|
additional_fqdns: []
|
||||||
|
database:
|
||||||
|
type: mariadb
|
||||||
|
version: "10.11"
|
||||||
|
use_dns_when_possible: true
|
||||||
|
composer_version: "2"
|
||||||
|
web_environment:
|
||||||
|
- TYPO3_CONTEXT=Development/Ddev
|
||||||
|
corepack_enable: false
|
||||||
|
|
||||||
|
# Key features of DDEV's config.yaml:
|
||||||
|
|
||||||
|
# name: <projectname> # Name of the project, automatically provides
|
||||||
|
# http://projectname.ddev.site and https://projectname.ddev.site
|
||||||
|
|
||||||
|
# type: <projecttype> # backdrop, craftcms, django4, drupal, drupal6, drupal7, laravel, magento, magento2, php, python, shopware6, silverstripe, typo3, wordpress
|
||||||
|
# See https://ddev.readthedocs.io/en/stable/users/quickstart/ for more
|
||||||
|
# information on the different project types
|
||||||
|
# "drupal" covers recent Drupal 8+
|
||||||
|
|
||||||
|
# docroot: <relative_path> # Relative path to the directory containing index.php.
|
||||||
|
|
||||||
|
# php_version: "8.2" # PHP version to use, "5.6", "7.0", "7.1", "7.2", "7.3", "7.4", "8.0", "8.1", "8.2", "8.3"
|
||||||
|
|
||||||
|
# You can explicitly specify the webimage but this
|
||||||
|
# is not recommended, as the images are often closely tied to DDEV's' behavior,
|
||||||
|
# so this can break upgrades.
|
||||||
|
|
||||||
|
# webimage: <docker_image> # nginx/php docker image.
|
||||||
|
|
||||||
|
# database:
|
||||||
|
# type: <dbtype> # mysql, mariadb, postgres
|
||||||
|
# version: <version> # database version, like "10.11" or "8.0"
|
||||||
|
# MariaDB versions can be 5.5-10.8 and 10.11, MySQL versions can be 5.5-8.0
|
||||||
|
# PostgreSQL versions can be 9-16.
|
||||||
|
|
||||||
|
# router_http_port: <port> # Port to be used for http (defaults to global configuration, usually 80)
|
||||||
|
# router_https_port: <port> # Port for https (defaults to global configuration, usually 443)
|
||||||
|
|
||||||
|
# xdebug_enabled: false # Set to true to enable Xdebug and "ddev start" or "ddev restart"
|
||||||
|
# Note that for most people the commands
|
||||||
|
# "ddev xdebug" to enable Xdebug and "ddev xdebug off" to disable it work better,
|
||||||
|
# as leaving Xdebug enabled all the time is a big performance hit.
|
||||||
|
|
||||||
|
# xhprof_enabled: false # Set to true to enable Xhprof and "ddev start" or "ddev restart"
|
||||||
|
# Note that for most people the commands
|
||||||
|
# "ddev xhprof" to enable Xhprof and "ddev xhprof off" to disable it work better,
|
||||||
|
# as leaving Xhprof enabled all the time is a big performance hit.
|
||||||
|
|
||||||
|
# webserver_type: nginx-fpm, apache-fpm, or nginx-gunicorn
|
||||||
|
|
||||||
|
# timezone: Europe/Berlin
|
||||||
|
# This is the timezone used in the containers and by PHP;
|
||||||
|
# it can be set to any valid timezone,
|
||||||
|
# see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
|
||||||
|
# For example Europe/Dublin or MST7MDT
|
||||||
|
|
||||||
|
# composer_root: <relative_path>
|
||||||
|
# Relative path to the Composer root directory from the project root. This is
|
||||||
|
# the directory which contains the composer.json and where all Composer related
|
||||||
|
# commands are executed.
|
||||||
|
|
||||||
|
# composer_version: "2"
|
||||||
|
# You can set it to "" or "2" (default) for Composer v2 or "1" for Composer v1
|
||||||
|
# to use the latest major version available at the time your container is built.
|
||||||
|
# It is also possible to use each other Composer version channel. This includes:
|
||||||
|
# - 2.2 (latest Composer LTS version)
|
||||||
|
# - stable
|
||||||
|
# - preview
|
||||||
|
# - snapshot
|
||||||
|
# Alternatively, an explicit Composer version may be specified, for example "2.2.18".
|
||||||
|
# To reinstall Composer after the image was built, run "ddev debug refresh".
|
||||||
|
|
||||||
|
# nodejs_version: "20"
|
||||||
|
# change from the default system Node.js version to any other version.
|
||||||
|
# Numeric version numbers can be complete (i.e. 18.15.0) or
|
||||||
|
# incomplete (18, 17.2, 16). 'lts' and 'latest' can be used as well along with
|
||||||
|
# other named releases.
|
||||||
|
# see https://www.npmjs.com/package/n#specifying-nodejs-versions
|
||||||
|
# Note that you can continue using 'ddev nvm' or nvm inside the web container
|
||||||
|
# to change the project's installed node version if you need to.
|
||||||
|
|
||||||
|
# corepack_enable: false
|
||||||
|
# Change to 'true' to 'corepack enable' and gain access to latest versions of yarn/pnpm
|
||||||
|
|
||||||
|
# additional_hostnames:
|
||||||
|
# - somename
|
||||||
|
# - someothername
|
||||||
|
# would provide http and https URLs for "somename.ddev.site"
|
||||||
|
# and "someothername.ddev.site".
|
||||||
|
|
||||||
|
# additional_fqdns:
|
||||||
|
# - example.com
|
||||||
|
# - sub1.example.com
|
||||||
|
# would provide http and https URLs for "example.com" and "sub1.example.com"
|
||||||
|
# Please take care with this because it can cause great confusion.
|
||||||
|
|
||||||
|
# upload_dirs: "custom/upload/dir"
|
||||||
|
#
|
||||||
|
# upload_dirs:
|
||||||
|
# - custom/upload/dir
|
||||||
|
# - ../private
|
||||||
|
#
|
||||||
|
# would set the destination paths for ddev import-files to <docroot>/custom/upload/dir
|
||||||
|
# When Mutagen is enabled this path is bind-mounted so that all the files
|
||||||
|
# in the upload_dirs don't have to be synced into Mutagen.
|
||||||
|
|
||||||
|
# disable_upload_dirs_warning: false
|
||||||
|
# If true, turns off the normal warning that says
|
||||||
|
# "You have Mutagen enabled and your 'php' project type doesn't have upload_dirs set"
|
||||||
|
|
||||||
|
# ddev_version_constraint: ""
|
||||||
|
# Example:
|
||||||
|
# ddev_version_constraint: ">= 1.22.4"
|
||||||
|
# This will enforce that the running ddev version is within this constraint.
|
||||||
|
# See https://github.com/Masterminds/semver#checking-version-constraints for
|
||||||
|
# supported constraint formats
|
||||||
|
|
||||||
|
# working_dir:
|
||||||
|
# web: /var/www/html
|
||||||
|
# db: /home
|
||||||
|
# would set the default working directory for the web and db services.
|
||||||
|
# These values specify the destination directory for ddev ssh and the
|
||||||
|
# directory in which commands passed into ddev exec are run.
|
||||||
|
|
||||||
|
# omit_containers: [db, ddev-ssh-agent]
|
||||||
|
# Currently only these containers are supported. Some containers can also be
|
||||||
|
# omitted globally in the ~/.ddev/global_config.yaml. Note that if you omit
|
||||||
|
# the "db" container, several standard features of DDEV that access the
|
||||||
|
# database container will be unusable. In the global configuration it is also
|
||||||
|
# possible to omit ddev-router, but not here.
|
||||||
|
|
||||||
|
# performance_mode: "global"
|
||||||
|
# DDEV offers performance optimization strategies to improve the filesystem
|
||||||
|
# performance depending on your host system. Should be configured globally.
|
||||||
|
#
|
||||||
|
# If set, will override the global config. Possible values are:
|
||||||
|
# - "global": uses the value from the global config.
|
||||||
|
# - "none": disables performance optimization for this project.
|
||||||
|
# - "mutagen": enables Mutagen for this project.
|
||||||
|
# - "nfs": enables NFS for this project.
|
||||||
|
#
|
||||||
|
# See https://ddev.readthedocs.io/en/stable/users/install/performance/#nfs
|
||||||
|
# See https://ddev.readthedocs.io/en/stable/users/install/performance/#mutagen
|
||||||
|
|
||||||
|
# fail_on_hook_fail: False
|
||||||
|
# Decide whether 'ddev start' should be interrupted by a failing hook
|
||||||
|
|
||||||
|
# host_https_port: "59002"
|
||||||
|
# The host port binding for https can be explicitly specified. It is
|
||||||
|
# dynamic unless otherwise specified.
|
||||||
|
# This is not used by most people, most people use the *router* instead
|
||||||
|
# of the localhost port.
|
||||||
|
|
||||||
|
# host_webserver_port: "59001"
|
||||||
|
# The host port binding for the ddev-webserver can be explicitly specified. It is
|
||||||
|
# dynamic unless otherwise specified.
|
||||||
|
# This is not used by most people, most people use the *router* instead
|
||||||
|
# of the localhost port.
|
||||||
|
|
||||||
|
# host_db_port: "59002"
|
||||||
|
# The host port binding for the ddev-dbserver can be explicitly specified. It is dynamic
|
||||||
|
# unless explicitly specified.
|
||||||
|
|
||||||
|
# mailpit_http_port: "8025"
|
||||||
|
# mailpit_https_port: "8026"
|
||||||
|
# The Mailpit ports can be changed from the default 8025 and 8026
|
||||||
|
|
||||||
|
# host_mailpit_port: "8025"
|
||||||
|
# The mailpit port is not normally bound on the host at all, instead being routed
|
||||||
|
# through ddev-router, but it can be bound directly to localhost if specified here.
|
||||||
|
|
||||||
|
# webimage_extra_packages: [php7.4-tidy, php-bcmath]
|
||||||
|
# Extra Debian packages that are needed in the webimage can be added here
|
||||||
|
|
||||||
|
# dbimage_extra_packages: [telnet,netcat]
|
||||||
|
# Extra Debian packages that are needed in the dbimage can be added here
|
||||||
|
|
||||||
|
# use_dns_when_possible: true
|
||||||
|
# If the host has internet access and the domain configured can
|
||||||
|
# successfully be looked up, DNS will be used for hostname resolution
|
||||||
|
# instead of editing /etc/hosts
|
||||||
|
# Defaults to true
|
||||||
|
|
||||||
|
# project_tld: ddev.site
|
||||||
|
# The top-level domain used for project URLs
|
||||||
|
# The default "ddev.site" allows DNS lookup via a wildcard
|
||||||
|
# If you prefer you can change this to "ddev.local" to preserve
|
||||||
|
# pre-v1.9 behavior.
|
||||||
|
|
||||||
|
# ngrok_args: --basic-auth username:pass1234
|
||||||
|
# Provide extra flags to the "ngrok http" command, see
|
||||||
|
# https://ngrok.com/docs/ngrok-agent/config or run "ngrok http -h"
|
||||||
|
|
||||||
|
# disable_settings_management: false
|
||||||
|
# If true, DDEV will not create CMS-specific settings files like
|
||||||
|
# Drupal's settings.php/settings.ddev.php or TYPO3's AdditionalConfiguration.php
|
||||||
|
# In this case the user must provide all such settings.
|
||||||
|
|
||||||
|
# You can inject environment variables into the web container with:
|
||||||
|
# web_environment:
|
||||||
|
# - SOMEENV=somevalue
|
||||||
|
# - SOMEOTHERENV=someothervalue
|
||||||
|
|
||||||
|
# no_project_mount: false
|
||||||
|
# (Experimental) If true, DDEV will not mount the project into the web container;
|
||||||
|
# the user is responsible for mounting it manually or via a script.
|
||||||
|
# This is to enable experimentation with alternate file mounting strategies.
|
||||||
|
# For advanced users only!
|
||||||
|
|
||||||
|
# bind_all_interfaces: false
|
||||||
|
# If true, host ports will be bound on all network interfaces,
|
||||||
|
# not the localhost interface only. This means that ports
|
||||||
|
# will be available on the local network if the host firewall
|
||||||
|
# allows it.
|
||||||
|
|
||||||
|
# default_container_timeout: 120
|
||||||
|
# The default time that DDEV waits for all containers to become ready can be increased from
|
||||||
|
# the default 120. This helps in importing huge databases, for example.
|
||||||
|
|
||||||
|
#web_extra_exposed_ports:
|
||||||
|
#- name: nodejs
|
||||||
|
# container_port: 3000
|
||||||
|
# http_port: 2999
|
||||||
|
# https_port: 3000
|
||||||
|
#- name: something
|
||||||
|
# container_port: 4000
|
||||||
|
# https_port: 4000
|
||||||
|
# http_port: 3999
|
||||||
|
# Allows a set of extra ports to be exposed via ddev-router
|
||||||
|
# Fill in all three fields even if you don’t intend to use the https_port!
|
||||||
|
# If you don’t add https_port, then it defaults to 0 and ddev-router will fail to start.
|
||||||
|
#
|
||||||
|
# The port behavior on the ddev-webserver must be arranged separately, for example
|
||||||
|
# using web_extra_daemons.
|
||||||
|
# For example, with a web app on port 3000 inside the container, this config would
|
||||||
|
# expose that web app on https://<project>.ddev.site:9999 and http://<project>.ddev.site:9998
|
||||||
|
# web_extra_exposed_ports:
|
||||||
|
# - name: myapp
|
||||||
|
# container_port: 3000
|
||||||
|
# http_port: 9998
|
||||||
|
# https_port: 9999
|
||||||
|
|
||||||
|
#web_extra_daemons:
|
||||||
|
#- name: "http-1"
|
||||||
|
# command: "/var/www/html/node_modules/.bin/http-server -p 3000"
|
||||||
|
# directory: /var/www/html
|
||||||
|
#- name: "http-2"
|
||||||
|
# command: "/var/www/html/node_modules/.bin/http-server /var/www/html/sub -p 3000"
|
||||||
|
# directory: /var/www/html
|
||||||
|
|
||||||
|
# override_config: false
|
||||||
|
# By default, config.*.yaml files are *merged* into the configuration
|
||||||
|
# But this means that some things can't be overridden
|
||||||
|
# For example, if you have 'use_dns_when_possible: true'' you can't override it with a merge
|
||||||
|
# and you can't erase existing hooks or all environment variables.
|
||||||
|
# However, with "override_config: true" in a particular config.*.yaml file,
|
||||||
|
# 'use_dns_when_possible: false' can override the existing values, and
|
||||||
|
# hooks:
|
||||||
|
# post-start: []
|
||||||
|
# or
|
||||||
|
# web_environment: []
|
||||||
|
# or
|
||||||
|
# additional_hostnames: []
|
||||||
|
# can have their intended affect. 'override_config' affects only behavior of the
|
||||||
|
# config.*.yaml file it exists in.
|
||||||
|
|
||||||
|
# Many DDEV commands can be extended to run tasks before or after the
|
||||||
|
# DDEV command is executed, for example "post-start", "post-import-db",
|
||||||
|
# "pre-composer", "post-composer"
|
||||||
|
# See https://ddev.readthedocs.io/en/stable/users/extend/custom-commands/ for more
|
||||||
|
# information on the commands that can be extended and the tasks you can define
|
||||||
|
# for them. Example:
|
||||||
|
#hooks:
|
||||||
|
# post-start:
|
||||||
|
# - exec: composer install -d /var/www/html
|
||||||
BIN
.ddev/providers/acquia.yaml
Executable file
BIN
.ddev/providers/platform.yaml
Executable file
BIN
.ddev/providers/upsun.yaml
Executable file
18
.gitignore
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
.DS_Store
|
||||||
|
.idea
|
||||||
|
mbox
|
||||||
|
nbproject
|
||||||
|
/var/*
|
||||||
|
!/var/labels
|
||||||
|
/vendor
|
||||||
|
/public/_assets
|
||||||
|
/public/fileadmin
|
||||||
|
/public/typo3
|
||||||
|
/public/typo3temp
|
||||||
|
/public/index.php
|
||||||
|
/.env
|
||||||
|
/composer.list
|
||||||
|
/backup
|
||||||
|
/bin
|
||||||
|
/public
|
||||||
|
composer.lock
|
||||||
96
composer.json
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
{
|
||||||
|
"name": "typo3/cms-base-distribution",
|
||||||
|
"description": "TYPO3 CMS Base Distribution",
|
||||||
|
"license": "GPL-2.0+",
|
||||||
|
"config": {
|
||||||
|
"allow-plugins": {
|
||||||
|
"typo3/class-alias-loader": true,
|
||||||
|
"typo3/cms-composer-installers": true,
|
||||||
|
"helhum/dotenv-connector": true,
|
||||||
|
"cweagans/composer-patches": true
|
||||||
|
},
|
||||||
|
"platform": {
|
||||||
|
"php": "8.3"
|
||||||
|
},
|
||||||
|
"vendor-dir": "vendor",
|
||||||
|
"bin-dir": "bin",
|
||||||
|
"sort-packages": true
|
||||||
|
},
|
||||||
|
"repositories": [
|
||||||
|
{
|
||||||
|
"type": "path",
|
||||||
|
"url": "packages/*"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"require": {
|
||||||
|
"typo3/minimal": "^12.4",
|
||||||
|
"typo3/cms-adminpanel": "^12.4",
|
||||||
|
"typo3/cms-backend": "^12.4",
|
||||||
|
"typo3/cms-belog": "^12.4",
|
||||||
|
"typo3/cms-beuser": "^12.4",
|
||||||
|
"typo3/cms-core": "^12.4",
|
||||||
|
"typo3/cms-dashboard": "^12.4",
|
||||||
|
"typo3/cms-extbase": "^12.4",
|
||||||
|
"typo3/cms-extensionmanager": "^12.4",
|
||||||
|
"typo3/cms-felogin": "^12.4",
|
||||||
|
"typo3/cms-filelist": "^12.4",
|
||||||
|
"typo3/cms-filemetadata": "^12.4",
|
||||||
|
"typo3/cms-fluid": "^12.4",
|
||||||
|
"typo3/cms-fluid-styled-content": "^12.4",
|
||||||
|
"typo3/cms-form": "^12.4",
|
||||||
|
"typo3/cms-frontend": "^12.4",
|
||||||
|
"typo3/cms-indexed-search": "^12.4",
|
||||||
|
"typo3/cms-info": "^12.4",
|
||||||
|
"typo3/cms-install": "^12.4",
|
||||||
|
"typo3/cms-lowlevel": "^12.4",
|
||||||
|
"typo3/cms-opendocs": "^12.4",
|
||||||
|
"typo3/cms-recordlist": "^12.4",
|
||||||
|
"typo3/cms-recycler": "^12.4",
|
||||||
|
"typo3/cms-redirects": "^12.4",
|
||||||
|
"typo3/cms-reports": "^12.4",
|
||||||
|
"typo3/cms-rte-ckeditor": "^12.4",
|
||||||
|
"typo3/cms-scheduler": "^12.4",
|
||||||
|
"typo3/cms-seo": "^12.4",
|
||||||
|
"typo3/cms-setup": "^12.4",
|
||||||
|
"typo3/cms-sys-note": "^12.4",
|
||||||
|
"typo3/cms-tstemplate": "^12.4",
|
||||||
|
"typo3/cms-viewpage": "^12.4",
|
||||||
|
|
||||||
|
"ichhabrecht/filefill": "^4.3",
|
||||||
|
"helhum/dotenv-connector": "^3.1",
|
||||||
|
"helhum/typo3-console": "^8.2",
|
||||||
|
"bk2k/bootstrap-package": "^15.0",
|
||||||
|
"georgringer/news": "^12.2",
|
||||||
|
"georgringer/numbered-pagination": "^2.1",
|
||||||
|
"tpwd/ke_search": "^6.1",
|
||||||
|
"cloonar-typo3/base-design": "@dev"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"deployer/deployer": "^7.4",
|
||||||
|
"friendsoftypo3/phpstan-typo3": "^0.9",
|
||||||
|
"phpmd/phpmd": "^2.10",
|
||||||
|
"phpstan/phpstan": "^1.8",
|
||||||
|
"rector/rector": "0.13.4",
|
||||||
|
"squizlabs/php_codesniffer": "^3.6",
|
||||||
|
"vimeo/psalm": "^4.7"
|
||||||
|
},
|
||||||
|
"scripts":{
|
||||||
|
"pre-autoload-dump": [
|
||||||
|
"@php -r \"file_exists('.env') || copy('.env.local', '.env');\""
|
||||||
|
],
|
||||||
|
"typo3-cms-scripts": [
|
||||||
|
"typo3 install:fixfolderstructure"
|
||||||
|
],
|
||||||
|
"post-autoload-dump": [
|
||||||
|
"@typo3-cms-scripts"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"typo3/cms": {
|
||||||
|
"web-dir": "public"
|
||||||
|
},
|
||||||
|
"helhum/typo3-console": {
|
||||||
|
"install-extension-dummy": "0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
17
config/sites/default/config.yaml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
base: /
|
||||||
|
languages:
|
||||||
|
-
|
||||||
|
title: German
|
||||||
|
enabled: true
|
||||||
|
languageId: 0
|
||||||
|
base: /
|
||||||
|
typo3Language: de
|
||||||
|
locale: de_AT.UTF-8
|
||||||
|
iso-639-1: de
|
||||||
|
navigationTitle: Deutsch
|
||||||
|
hreflang: de-AT
|
||||||
|
direction: ltr
|
||||||
|
flag: at
|
||||||
|
websiteTitle: ''
|
||||||
|
rootPageId: 1
|
||||||
|
websiteTitle: ''
|
||||||
85
config/system/additional.php
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
$customChanges = [
|
||||||
|
'BE' => [
|
||||||
|
'installToolPassword' => $_ENV['TYPO3_BE_INSTALL_TOOL_PASSWORD'],
|
||||||
|
],
|
||||||
|
'DB' => [
|
||||||
|
'Connections' => [
|
||||||
|
'Default' => [
|
||||||
|
'dbname' => $_ENV['TYPO3_DB_NAME'],
|
||||||
|
'host' => $_ENV['TYPO3_DB_HOST'],
|
||||||
|
'password' => $_ENV['TYPO3_DB_PASSWORD'],
|
||||||
|
'port' => $_ENV['TYPO3_DB_PORT'],
|
||||||
|
'user' => $_ENV['TYPO3_DB_USER'],
|
||||||
|
'unix_socket' => $_ENV['TYPO3_DB_UNIX_SOCKET'],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'extTablesDefinitionScript' => 'extTables.php',
|
||||||
|
],
|
||||||
|
'MAIL' => [
|
||||||
|
'transport' => $_ENV['TYPO3_MAIL_TRANSPORT'],
|
||||||
|
'transport_smtp_server' => $_ENV['TYPO3_MAIL_SMTP_SERVER'],
|
||||||
|
'transport_smtp_encrypt' => $_ENV['TYPO3_MAIL_SMTP_ENCRYPT'],
|
||||||
|
'transport_smtp_username' => $_ENV['TYPO3_MAIL_SMTP_USER'],
|
||||||
|
'transport_smtp_password' => $_ENV['TYPO3_MAIL_SMTP_PASSWORD'],
|
||||||
|
],
|
||||||
|
'SYS' => [
|
||||||
|
'caching' => [
|
||||||
|
'cacheConfigurations' => [
|
||||||
|
'hash' => [
|
||||||
|
'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\NullBackend',
|
||||||
|
],
|
||||||
|
'imagesizes' => [
|
||||||
|
'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\NullBackend',
|
||||||
|
'options' => [
|
||||||
|
'compression' => true,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'pages' => [
|
||||||
|
'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\NullBackend',
|
||||||
|
'options' => [
|
||||||
|
'compression' => true,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'rootline' => [
|
||||||
|
'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\NullBackend',
|
||||||
|
'options' => [
|
||||||
|
'compression' => true,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScript(
|
||||||
|
'developmentConfiguration',
|
||||||
|
'setup',
|
||||||
|
'config.contentObjectExceptionHandler = 0'
|
||||||
|
);
|
||||||
|
|
||||||
|
// MAIL
|
||||||
|
// $GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport'] = 'mbox';
|
||||||
|
// $GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport_mbox_file'] = dirname(__DIR__, 2).'/mbox';
|
||||||
|
$GLOBALS['TYPO3_CONF_VARS']['GFX']['processor_path'] = '/usr/bin/';
|
||||||
|
//
|
||||||
|
$GLOBALS['TYPO3_CONF_VARS'] = array_replace_recursive($GLOBALS['TYPO3_CONF_VARS'], $customChanges);
|
||||||
|
|
||||||
|
$context = strtolower((string)\TYPO3\CMS\Core\Core\Environment::getContext());
|
||||||
|
|
||||||
|
$contextParts = explode('/', $context);
|
||||||
|
$dir = realpath(__DIR__);
|
||||||
|
|
||||||
|
$file = $dir . '/additional_' . $contextParts[0] . '.php';
|
||||||
|
if (is_file($file)) {
|
||||||
|
include_once($file);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($contextParts[1])) {
|
||||||
|
$file = $dir . '/additional_' . $contextParts[0] . '_' . $contextParts[1] . '.php';
|
||||||
|
if (is_file($file)) {
|
||||||
|
include_once($file);
|
||||||
|
}
|
||||||
|
}
|
||||||
34
config/system/additional_development_ddev.php
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
$GLOBALS['TYPO3_CONF_VARS'] = array_replace_recursive(
|
||||||
|
$GLOBALS['TYPO3_CONF_VARS'],
|
||||||
|
[
|
||||||
|
'BE' => [
|
||||||
|
'installToolPassword' => '$2y$12$h8p5JOqRdE2ze/daTBKeDuF6kDnbRjiU2iQs9PoD4WhpERyGepIV2',
|
||||||
|
'debug' => true,
|
||||||
|
'cookieSameSite' => 'lax',
|
||||||
|
'HTTP' => [
|
||||||
|
'Response' => [
|
||||||
|
'Headers' => [
|
||||||
|
'csp' => 'Content-Security-Policy: default-src \'self\' \'data:\' *.ddev.site *.gstatic.com cdnjs.cloudflare.com piwik.wohnservice-wien.at *.ytimg.com *.googlevideo.com *.youtube-nocookie.com *.googleapis.com *.wien.gv.at *.google.com \'unsafe-eval\' \'unsafe-inline\' \'script-src-elem\'',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'FE' => [
|
||||||
|
'debug' => true,
|
||||||
|
],
|
||||||
|
// This GFX configuration allows processing by installed ImageMagick 6
|
||||||
|
'GFX' => [
|
||||||
|
'processor' => 'ImageMagick',
|
||||||
|
'processor_path' => '/usr/bin/',
|
||||||
|
'processor_path_lzw' => '/usr/bin/',
|
||||||
|
],
|
||||||
|
'SYS' => [
|
||||||
|
'cookieDomain' => '/\.ddev\.site$/',
|
||||||
|
'trustedHostsPattern' => '.*',
|
||||||
|
'devIPmask' => '*',
|
||||||
|
'displayErrors' => 1,
|
||||||
|
]
|
||||||
|
]
|
||||||
|
);
|
||||||
169
config/system/settings.php
Normal file
@@ -0,0 +1,169 @@
|
|||||||
|
<?php
|
||||||
|
return [
|
||||||
|
'BE' => [
|
||||||
|
'HTTP' => [
|
||||||
|
'Response' => [
|
||||||
|
'Headers' => [
|
||||||
|
'csp' => 'Content-Security-Policy: default-src \'self\' *.gstatic.com cdnjs.cloudflare.com piwik.wohnservice-wien.at *.ytimg.com *.googlevideo.com *.youtube-nocookie.com *.googleapis.com *.wien.gv.at *.google.com \'unsafe-eval\' \'unsafe-inline\'',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'debug' => false,
|
||||||
|
'explicitADmode' => 'explicitAllow',
|
||||||
|
'installToolPassword' => '$pbkdf2-sha256$25000$J4PZzLyS4haJCD.ajwNIDw$kj//RtM.xTPuXDa2/qwr/CiLIUO6MMbuI367AHEs6hU',
|
||||||
|
'passwordHashing' => [
|
||||||
|
'className' => 'TYPO3\\CMS\\Core\\Crypto\\PasswordHashing\\BcryptPasswordHash',
|
||||||
|
'options' => [],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'DB' => [
|
||||||
|
'Connections' => [
|
||||||
|
'Default' => [
|
||||||
|
'charset' => 'utf8',
|
||||||
|
'dbname' => 'func_test_at',
|
||||||
|
'driver' => 'mysqli',
|
||||||
|
'host' => 'mariadb10',
|
||||||
|
'password' => 'password',
|
||||||
|
'port' => 3307,
|
||||||
|
'user' => 'root',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'EXT' => [],
|
||||||
|
'EXTCONF' => [
|
||||||
|
'lang' => [
|
||||||
|
'availableLanguages' => [
|
||||||
|
'de',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'EXTENSIONS' => [
|
||||||
|
'backend' => [
|
||||||
|
'backendFavicon' => '',
|
||||||
|
'backendLogo' => '',
|
||||||
|
'loginBackgroundImage' => '',
|
||||||
|
'loginFootnote' => '',
|
||||||
|
'loginHighlightColor' => '',
|
||||||
|
'loginLogo' => '',
|
||||||
|
'loginLogoAlt' => '',
|
||||||
|
],
|
||||||
|
'bootstrap_package' => [
|
||||||
|
'disableCssProcessing' => '0',
|
||||||
|
'disableFontLoader' => '1',
|
||||||
|
'disableGoogleFontCaching' => '0',
|
||||||
|
'disablePageTsBackendLayouts' => '0',
|
||||||
|
'disablePageTsContentElements' => '0',
|
||||||
|
'disablePageTsRTE' => '0',
|
||||||
|
'disablePageTsTCADefaults' => '0',
|
||||||
|
'disablePageTsTCEFORM' => '0',
|
||||||
|
'disablePageTsTCEMAIN' => '0',
|
||||||
|
],
|
||||||
|
'extensionmanager' => [
|
||||||
|
'automaticInstallation' => '1',
|
||||||
|
'offlineMode' => '0',
|
||||||
|
],
|
||||||
|
'indexed_search' => [
|
||||||
|
'catdoc' => '/usr/bin/',
|
||||||
|
'debugMode' => '0',
|
||||||
|
'deleteFromIndexAfterEditing' => '1',
|
||||||
|
'disableFrontendIndexing' => '0',
|
||||||
|
'enableMetaphoneSearch' => '1',
|
||||||
|
'flagBitMask' => '192',
|
||||||
|
'fullTextDataLength' => '0',
|
||||||
|
'ignoreExtensions' => '',
|
||||||
|
'indexExternalURLs' => '0',
|
||||||
|
'maxAge' => '0',
|
||||||
|
'maxExternalFiles' => '5',
|
||||||
|
'minAge' => '24',
|
||||||
|
'pdf_mode' => '20',
|
||||||
|
'pdftools' => '/usr/bin/',
|
||||||
|
'ppthtml' => '/usr/bin/',
|
||||||
|
'unrtf' => '/usr/bin/',
|
||||||
|
'unzip' => '/usr/bin/',
|
||||||
|
'useCrawlerForExternalFiles' => '0',
|
||||||
|
'useMysqlFulltext' => '0',
|
||||||
|
'xlhtml' => '/usr/bin/',
|
||||||
|
],
|
||||||
|
'ke_search' => [
|
||||||
|
'allowEmptySearch' => '1',
|
||||||
|
'enableExplicitAnd' => '0',
|
||||||
|
'enablePartSearch' => '1',
|
||||||
|
'finishNotification' => '0',
|
||||||
|
'loglevel' => 'ERROR',
|
||||||
|
'multiplyValueToTitle' => '1',
|
||||||
|
'notificationRecipient' => '',
|
||||||
|
'notificationSender' => 'no_reply@domain.com',
|
||||||
|
'notificationSubject' => '[KE_SEARCH INDEXER NOTIFICATION]',
|
||||||
|
'pathCatdoc' => '/usr/bin/',
|
||||||
|
'pathPdfinfo' => '/usr/bin/',
|
||||||
|
'pathPdftotext' => '/usr/bin/',
|
||||||
|
'searchWordLength' => '4',
|
||||||
|
],
|
||||||
|
'news' => [
|
||||||
|
'advancedMediaPreview' => '1',
|
||||||
|
'archiveDate' => 'date',
|
||||||
|
'categoryBeGroupTceFormsRestriction' => '0',
|
||||||
|
'categoryRestriction' => '',
|
||||||
|
'contentElementPreview' => '1',
|
||||||
|
'contentElementRelation' => '1',
|
||||||
|
'dateTimeNotRequired' => '0',
|
||||||
|
'hidePageTreeForAdministrationModule' => '0',
|
||||||
|
'manualSorting' => '0',
|
||||||
|
'mediaPreview' => 'false',
|
||||||
|
'prependAtCopy' => '1',
|
||||||
|
'resourceFolderImporter' => '/news_import',
|
||||||
|
'rteForTeaser' => '0',
|
||||||
|
'showAdministrationModule' => '1',
|
||||||
|
'showImporter' => '0',
|
||||||
|
'slugBehaviour' => 'unique',
|
||||||
|
'storageUidImporter' => '1',
|
||||||
|
'tagPid' => '1',
|
||||||
|
],
|
||||||
|
'scheduler' => [
|
||||||
|
'maxLifetime' => '1440',
|
||||||
|
'showSampleTasks' => '1',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'FE' => [
|
||||||
|
'debug' => false,
|
||||||
|
'passwordHashing' => [
|
||||||
|
'className' => 'TYPO3\\CMS\\Core\\Crypto\\PasswordHashing\\BcryptPasswordHash',
|
||||||
|
'options' => [],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'GFX' => [
|
||||||
|
'jpg_quality' => '80',
|
||||||
|
],
|
||||||
|
'MAIL' => [
|
||||||
|
'defaultMailFromAddress' => 'no-reply@example.com',
|
||||||
|
'transport_smtp_encrypt' => false,
|
||||||
|
'transport_smtp_password' => '',
|
||||||
|
'transport_smtp_server' => '',
|
||||||
|
'transport_smtp_username' => '',
|
||||||
|
],
|
||||||
|
'SYS' => [
|
||||||
|
'caching' => [
|
||||||
|
'cacheConfigurations' => [
|
||||||
|
'extbase_object' => [
|
||||||
|
'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\Typo3DatabaseBackend',
|
||||||
|
'frontend' => 'TYPO3\\CMS\\Core\\Cache\\Frontend\\VariableFrontend',
|
||||||
|
'groups' => [
|
||||||
|
'system',
|
||||||
|
],
|
||||||
|
'options' => [
|
||||||
|
'defaultLifetime' => 60,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'devIPmask' => '127.0.0.1',
|
||||||
|
'displayErrors' => 0,
|
||||||
|
'encryptionKey' => 'ef791a3dc7a18e20d575d6ebe666bcfadc3be7744f66ef14e863fcb76a8baffb5f7dea3e1d11134d5ed745bf84aa65f8',
|
||||||
|
'exceptionalErrors' => 4096,
|
||||||
|
'phpTimeZone' => 'Europe/Vienna',
|
||||||
|
'sitename' => 'Managed Typo3',
|
||||||
|
'systemMaintainers' => [
|
||||||
|
1,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
2868
data/test.sql
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Cloonar\BaseDesign\Domain\Finishers;
|
||||||
|
|
||||||
|
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||||
|
use TYPO3\CMS\Core\Http\RequestFactory;
|
||||||
|
use TYPO3\CMS\Form\Domain\Finishers\Exception\FinisherException;
|
||||||
|
use Symfony\Component\Mime\Address;
|
||||||
|
|
||||||
|
class GetResponseFinisher extends \TYPO3\CMS\Form\Domain\Finishers\AbstractFinisher
|
||||||
|
{
|
||||||
|
|
||||||
|
const GET_RESPONSE_REQUEST_URL = 'https://api.getresponse.com/v3';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var \TYPO3\CMS\Core\Http\RequestFactory
|
||||||
|
*/
|
||||||
|
protected $request;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $defaultOptions = [
|
||||||
|
'notifyEmail' => '',
|
||||||
|
'apiKey' => '',
|
||||||
|
'campaignId' => '',
|
||||||
|
'email' => '',
|
||||||
|
'firstname' => '',
|
||||||
|
'lastname' => '',
|
||||||
|
'company' => '',
|
||||||
|
'register' => false,
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Executes this finisher
|
||||||
|
* @see AbstractFinisher::execute()
|
||||||
|
*
|
||||||
|
* @throws FinisherException
|
||||||
|
*/
|
||||||
|
protected function executeInternal()
|
||||||
|
{
|
||||||
|
|
||||||
|
$notifyEmail = $this->parseOption('notifyEmail');
|
||||||
|
$apiKey = $this->parseOption('apiKey');
|
||||||
|
$campaignId = $this->parseOption('campaignId');
|
||||||
|
$email = $this->parseOption('email');
|
||||||
|
$firstname = $this->parseOption('firstname');
|
||||||
|
$lastname = $this->parseOption('lastname');
|
||||||
|
$company = $this->parseOption('compandy');
|
||||||
|
$register = $this->parseOption('register');
|
||||||
|
|
||||||
|
if ($register != "1") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($notifyEmail)) {
|
||||||
|
throw new FinisherException('The option "notifyEmail" must be set for the GetResponseFinisher.', 1681331285);
|
||||||
|
}
|
||||||
|
if (empty($apiKey)) {
|
||||||
|
throw new FinisherException('The option "apiKey" must be set for the GetResponseFinisher.', 1681331286);
|
||||||
|
}
|
||||||
|
if (empty($campaignId)) {
|
||||||
|
throw new FinisherException('The option "campaignId" must be set for the GetResponseFinisher.', 1681331287);
|
||||||
|
}
|
||||||
|
if (empty($email)) {
|
||||||
|
throw new FinisherException('The option "email" must be set for the GetResponseFinisher.', 1681331288);
|
||||||
|
}
|
||||||
|
if (empty($firstname)) {
|
||||||
|
throw new FinisherException('The option "firstname" must be set for the GetResponseFinisher.', 1681331289);
|
||||||
|
}
|
||||||
|
if (empty($lastname)) {
|
||||||
|
throw new FinisherException('The option "lastname" must be set for the GetResponseFinisher.', 1681331290);
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = [
|
||||||
|
"name" => $firstname.' '.$lastname,
|
||||||
|
"email" => $email,
|
||||||
|
"campaign" => [
|
||||||
|
"campaignId" => $campaignId
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
$request = GeneralUtility::makeInstance(RequestFactory::class);
|
||||||
|
$response = $request->request(
|
||||||
|
self::GET_RESPONSE_REQUEST_URL.'/contacts',
|
||||||
|
'POST',
|
||||||
|
[
|
||||||
|
'headers' => [
|
||||||
|
'X-Auth-Token' => 'api-key '.$apiKey,
|
||||||
|
'Content-Type' => 'application/json'
|
||||||
|
],
|
||||||
|
'body' => json_encode($data)
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($response->getStatusCode() == 200) {
|
||||||
|
$mail = GeneralUtility::makeInstance(MailMessage::class);
|
||||||
|
$mail
|
||||||
|
->from(new Address('noreply@cloonar.dev'))
|
||||||
|
->to(
|
||||||
|
new Address($notifyEmail)
|
||||||
|
)
|
||||||
|
->subject('Newsletter Anmeldung')
|
||||||
|
->text('Vorname: '.$firstname.'\r\nNachname: '.$lastname.'\r\nFirma: '.$company.'\r\nEmail: '.$email)
|
||||||
|
->send();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $string
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected static function escapeString($string)
|
||||||
|
{
|
||||||
|
$string = htmlspecialchars($string);
|
||||||
|
return (string)$string;
|
||||||
|
}
|
||||||
|
}
|
||||||
7
packages/base-design/Configuration/Form/Setup.yaml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
TYPO3:
|
||||||
|
CMS:
|
||||||
|
Form:
|
||||||
|
persistenceManager:
|
||||||
|
allowSaveToExtensionPaths: true
|
||||||
|
allowedExtensionPaths:
|
||||||
|
1727355960: EXT:base_design/Resources/Private/Forms/
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the package bk2k/bootstrap-package.
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please read the
|
||||||
|
* LICENSE file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
defined('TYPO3') || die();
|
||||||
|
|
||||||
|
/***************
|
||||||
|
* TypoScript: Full Package
|
||||||
|
* This includes the full setup including all configurations
|
||||||
|
*/
|
||||||
|
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile(
|
||||||
|
'base_design',
|
||||||
|
'Configuration/TypoScript',
|
||||||
|
'Cloonar Base Design'
|
||||||
|
);
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the package bk2k/bootstrap-package.
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please read the
|
||||||
|
* LICENSE file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
defined('TYPO3') or die('Access denied.');
|
||||||
|
|
||||||
|
$GLOBALS['TCA']['tt_content']['columns']['space_after_class']['config']['items'][6] = [
|
||||||
|
'LLL:EXT:base_design/Resources/Private/Language/locallang_ttc.xlf:space_class_zero',
|
||||||
|
'zero'
|
||||||
|
];
|
||||||
|
$GLOBALS['TCA']['tt_content']['columns']['space_before_class']['config']['items'][6] = [
|
||||||
|
'LLL:EXT:base_design/Resources/Private/Language/locallang_ttc.xlf:space_class_zero',
|
||||||
|
'zero'
|
||||||
|
];
|
||||||
@@ -0,0 +1,148 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the package bk2k/bootstrap-package.
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please read the
|
||||||
|
* LICENSE file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
defined('TYPO3') or die('Access denied.');
|
||||||
|
|
||||||
|
// Add crop variants
|
||||||
|
$defaultCropSettings = [
|
||||||
|
'title' => 'LLL:EXT:bootstrap_package/Resources/Private/Language/Backend.xlf:option.default',
|
||||||
|
'allowedAspectRatios' => [
|
||||||
|
'16:9' => [
|
||||||
|
'title' => 'LLL:EXT:bootstrap_package/Resources/Private/Language/Backend.xlf:ratio.16_9',
|
||||||
|
'value' => 16 / 9
|
||||||
|
],
|
||||||
|
'4:3' => [
|
||||||
|
'title' => 'LLL:EXT:bootstrap_package/Resources/Private/Language/Backend.xlf:ratio.4_3',
|
||||||
|
'value' => 4 / 3
|
||||||
|
],
|
||||||
|
'1:1' => [
|
||||||
|
'title' => 'LLL:EXT:bootstrap_package/Resources/Private/Language/Backend.xlf:ratio.1_1',
|
||||||
|
'value' => 1.0
|
||||||
|
],
|
||||||
|
'NaN' => [
|
||||||
|
'title' => 'LLL:EXT:bootstrap_package/Resources/Private/Language/Backend.xlf:ratio.free',
|
||||||
|
'value' => 0.0
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'selectedRatio' => 'NaN',
|
||||||
|
'cropArea' => [
|
||||||
|
'x' => 0.0,
|
||||||
|
'y' => 0.0,
|
||||||
|
'width' => 1.0,
|
||||||
|
'height' => 1.0,
|
||||||
|
]
|
||||||
|
];
|
||||||
|
$xlargeCropSettings = $defaultCropSettings;
|
||||||
|
$xlargeCropSettings['title'] = 'LLL:EXT:bootstrap_package/Resources/Private/Language/Backend.xlf:option.xlarge';
|
||||||
|
$largeCropSettings = $defaultCropSettings;
|
||||||
|
$largeCropSettings['title'] = 'LLL:EXT:bootstrap_package/Resources/Private/Language/Backend.xlf:option.large';
|
||||||
|
$mediumCropSettings = $defaultCropSettings;
|
||||||
|
$mediumCropSettings['title'] = 'LLL:EXT:bootstrap_package/Resources/Private/Language/Backend.xlf:option.medium';
|
||||||
|
$smallCropSettings = $defaultCropSettings;
|
||||||
|
$smallCropSettings['title'] = 'LLL:EXT:bootstrap_package/Resources/Private/Language/Backend.xlf:option.small';
|
||||||
|
$extrasmallCropSettings = $defaultCropSettings;
|
||||||
|
$extrasmallCropSettings['title'] = 'LLL:EXT:bootstrap_package/Resources/Private/Language/Backend.xlf:option.extrasmall';
|
||||||
|
|
||||||
|
// Content Element Background Image
|
||||||
|
$GLOBALS['TCA']['tt_content']['columns']['background_image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['default'] = $defaultCropSettings;
|
||||||
|
$GLOBALS['TCA']['tt_content']['columns']['background_image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['xlarge'] = $xlargeCropSettings;
|
||||||
|
$GLOBALS['TCA']['tt_content']['columns']['background_image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['large'] = $largeCropSettings;
|
||||||
|
$GLOBALS['TCA']['tt_content']['columns']['background_image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['medium'] = $mediumCropSettings;
|
||||||
|
$GLOBALS['TCA']['tt_content']['columns']['background_image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['small'] = $smallCropSettings;
|
||||||
|
$GLOBALS['TCA']['tt_content']['columns']['background_image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['extrasmall'] = $extrasmallCropSettings;
|
||||||
|
|
||||||
|
// Image content element
|
||||||
|
$GLOBALS['TCA']['tt_content']['types']['image']['columnsOverrides']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['default'] = $defaultCropSettings;
|
||||||
|
$GLOBALS['TCA']['tt_content']['types']['image']['columnsOverrides']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['xlarge'] = $xlargeCropSettings;
|
||||||
|
$GLOBALS['TCA']['tt_content']['types']['image']['columnsOverrides']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['large'] = $largeCropSettings;
|
||||||
|
$GLOBALS['TCA']['tt_content']['types']['image']['columnsOverrides']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['medium'] = $mediumCropSettings;
|
||||||
|
$GLOBALS['TCA']['tt_content']['types']['image']['columnsOverrides']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['small'] = $smallCropSettings;
|
||||||
|
$GLOBALS['TCA']['tt_content']['types']['image']['columnsOverrides']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['extrasmall'] = $extrasmallCropSettings;
|
||||||
|
|
||||||
|
// Textpic content element
|
||||||
|
$GLOBALS['TCA']['tt_content']['types']['textpic']['columnsOverrides']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['default'] = $defaultCropSettings;
|
||||||
|
$GLOBALS['TCA']['tt_content']['types']['textpic']['columnsOverrides']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['xlarge'] = $xlargeCropSettings;
|
||||||
|
$GLOBALS['TCA']['tt_content']['types']['textpic']['columnsOverrides']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['large'] = $largeCropSettings;
|
||||||
|
$GLOBALS['TCA']['tt_content']['types']['textpic']['columnsOverrides']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['medium'] = $mediumCropSettings;
|
||||||
|
$GLOBALS['TCA']['tt_content']['types']['textpic']['columnsOverrides']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['small'] = $smallCropSettings;
|
||||||
|
$GLOBALS['TCA']['tt_content']['types']['textpic']['columnsOverrides']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['extrasmall'] = $extrasmallCropSettings;
|
||||||
|
|
||||||
|
// Media content element
|
||||||
|
$GLOBALS['TCA']['tt_content']['types']['media']['columnsOverrides']['assets']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['default'] = $defaultCropSettings;
|
||||||
|
$GLOBALS['TCA']['tt_content']['types']['media']['columnsOverrides']['assets']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['xlarge'] = $xlargeCropSettings;
|
||||||
|
$GLOBALS['TCA']['tt_content']['types']['media']['columnsOverrides']['assets']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['large'] = $largeCropSettings;
|
||||||
|
$GLOBALS['TCA']['tt_content']['types']['media']['columnsOverrides']['assets']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['medium'] = $mediumCropSettings;
|
||||||
|
$GLOBALS['TCA']['tt_content']['types']['media']['columnsOverrides']['assets']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['small'] = $smallCropSettings;
|
||||||
|
$GLOBALS['TCA']['tt_content']['types']['media']['columnsOverrides']['assets']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['extrasmall'] = $extrasmallCropSettings;
|
||||||
|
|
||||||
|
// Textmedia content element
|
||||||
|
$GLOBALS['TCA']['tt_content']['types']['textmedia']['columnsOverrides']['assets']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['default'] = $defaultCropSettings;
|
||||||
|
$GLOBALS['TCA']['tt_content']['types']['textmedia']['columnsOverrides']['assets']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['xlarge'] = $xlargeCropSettings;
|
||||||
|
$GLOBALS['TCA']['tt_content']['types']['textmedia']['columnsOverrides']['assets']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['large'] = $largeCropSettings;
|
||||||
|
$GLOBALS['TCA']['tt_content']['types']['textmedia']['columnsOverrides']['assets']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['medium'] = $mediumCropSettings;
|
||||||
|
$GLOBALS['TCA']['tt_content']['types']['textmedia']['columnsOverrides']['assets']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['small'] = $smallCropSettings;
|
||||||
|
$GLOBALS['TCA']['tt_content']['types']['textmedia']['columnsOverrides']['assets']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['extrasmall'] = $extrasmallCropSettings;
|
||||||
|
|
||||||
|
// Card Group
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_card_group_item']['types']['1']['columnsOverrides']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['default'] = $defaultCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_card_group_item']['types']['1']['columnsOverrides']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['xlarge'] = $xlargeCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_card_group_item']['types']['1']['columnsOverrides']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['large'] = $largeCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_card_group_item']['types']['1']['columnsOverrides']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['medium'] = $mediumCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_card_group_item']['types']['1']['columnsOverrides']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['small'] = $smallCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_card_group_item']['types']['1']['columnsOverrides']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['extrasmall'] = $extrasmallCropSettings;
|
||||||
|
|
||||||
|
// Accordion
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_accordion_item']['types']['1']['columnsOverrides']['media']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['default'] = $defaultCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_accordion_item']['types']['1']['columnsOverrides']['media']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['xlarge'] = $xlargeCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_accordion_item']['types']['1']['columnsOverrides']['media']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['large'] = $largeCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_accordion_item']['types']['1']['columnsOverrides']['media']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['medium'] = $mediumCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_accordion_item']['types']['1']['columnsOverrides']['media']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['small'] = $smallCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_accordion_item']['types']['1']['columnsOverrides']['media']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['extrasmall'] = $extrasmallCropSettings;
|
||||||
|
|
||||||
|
// Carousel Background Image
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_carousel_item']['columns']['background_image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['default'] = $defaultCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_carousel_item']['columns']['background_image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['xlarge'] = $xlargeCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_carousel_item']['columns']['background_image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['large'] = $largeCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_carousel_item']['columns']['background_image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['medium'] = $mediumCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_carousel_item']['columns']['background_image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['small'] = $smallCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_carousel_item']['columns']['background_image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['extrasmall'] = $extrasmallCropSettings;
|
||||||
|
|
||||||
|
// Carousel Image
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_carousel_item']['columns']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['default'] = $defaultCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_carousel_item']['columns']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['xlarge'] = $xlargeCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_carousel_item']['columns']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['large'] = $largeCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_carousel_item']['columns']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['medium'] = $mediumCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_carousel_item']['columns']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['small'] = $smallCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_carousel_item']['columns']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['extrasmall'] = $extrasmallCropSettings;
|
||||||
|
|
||||||
|
// Tab
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_tab_item']['types']['1']['columnsOverrides']['media']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['default'] = $defaultCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_tab_item']['types']['1']['columnsOverrides']['media']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['xlarge'] = $xlargeCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_tab_item']['types']['1']['columnsOverrides']['media']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['large'] = $largeCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_tab_item']['types']['1']['columnsOverrides']['media']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['medium'] = $mediumCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_tab_item']['types']['1']['columnsOverrides']['media']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['small'] = $smallCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_tab_item']['types']['1']['columnsOverrides']['media']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['extrasmall'] = $extrasmallCropSettings;
|
||||||
|
|
||||||
|
// Timeline
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_timeline_item']['types']['1']['columnsOverrides']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['default'] = $defaultCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_timeline_item']['types']['1']['columnsOverrides']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['xlarge'] = $xlargeCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_timeline_item']['types']['1']['columnsOverrides']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['large'] = $largeCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_timeline_item']['types']['1']['columnsOverrides']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['medium'] = $mediumCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_timeline_item']['types']['1']['columnsOverrides']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['small'] = $smallCropSettings;
|
||||||
|
$GLOBALS['TCA']['tx_bootstrappackage_timeline_item']['types']['1']['columnsOverrides']['image']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['extrasmall'] = $extrasmallCropSettings;
|
||||||
|
|
||||||
|
// Pages
|
||||||
|
foreach ([1, 3, 4] as $type) {
|
||||||
|
$GLOBALS['TCA']['pages']['types'][$type]['columnsOverrides']['thumbnail']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['default'] = $defaultCropSettings;
|
||||||
|
$GLOBALS['TCA']['pages']['types'][$type]['columnsOverrides']['thumbnail']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['xlarge'] = $xlargeCropSettings;
|
||||||
|
$GLOBALS['TCA']['pages']['types'][$type]['columnsOverrides']['thumbnail']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['large'] = $largeCropSettings;
|
||||||
|
$GLOBALS['TCA']['pages']['types'][$type]['columnsOverrides']['thumbnail']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['medium'] = $mediumCropSettings;
|
||||||
|
$GLOBALS['TCA']['pages']['types'][$type]['columnsOverrides']['thumbnail']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['small'] = $smallCropSettings;
|
||||||
|
$GLOBALS['TCA']['pages']['types'][$type]['columnsOverrides']['thumbnail']['config']['overrideChildTca']['columns']['crop']['config']['cropVariants']['extrasmall'] = $extrasmallCropSettings;
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
tx_news.templateLayouts {
|
||||||
|
1 = Zahl des Monats Layout
|
||||||
|
2 = Startseite
|
||||||
|
}
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
config {
|
||||||
|
concatenateJs = 1
|
||||||
|
compressJs = 1
|
||||||
|
compressCss = 1
|
||||||
|
concatenateCss = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
page {
|
||||||
|
logo {
|
||||||
|
file = EXT:base_design/Resources/Public/Images/logo.png
|
||||||
|
fileInverted = EXT:base_design/Resources/Public/Images/logo.png
|
||||||
|
}
|
||||||
|
|
||||||
|
theme {
|
||||||
|
cookieconsent {
|
||||||
|
enable = 0
|
||||||
|
}
|
||||||
|
navigation {
|
||||||
|
type = top
|
||||||
|
}
|
||||||
|
breadcrumb {
|
||||||
|
enable = 0
|
||||||
|
}
|
||||||
|
language {
|
||||||
|
enable = 0
|
||||||
|
}
|
||||||
|
meta {
|
||||||
|
enable = 0
|
||||||
|
}
|
||||||
|
copyright {
|
||||||
|
# cat=bootstrap package: copyright/169/120; type=boolean; label=Copyright: Enable to display the copyright
|
||||||
|
enable = 1
|
||||||
|
# cat=bootstrap package: copyright/169/121; type=string; label=Copyright Text
|
||||||
|
text = © Copyright 2024 <b>Cloonar Technologies GmbH</b>
|
||||||
|
}
|
||||||
|
googleFont {
|
||||||
|
enable = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fluidtemplate {
|
||||||
|
templateRootPath = EXT:base_design/Resources/Private/Templates/Page/
|
||||||
|
partialRootPath = EXT:base_design/Resources/Private/Partials/Page/
|
||||||
|
layoutRootPath = EXT:base_design/Resources/Private/Layouts/Page/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
plugin.tx_news {
|
||||||
|
settings {
|
||||||
|
list.media.image {
|
||||||
|
maxWidth = 200c
|
||||||
|
maxHeight = 200c
|
||||||
|
}
|
||||||
|
detail.media.image.lightbox {
|
||||||
|
enabled = 0
|
||||||
|
class = lightbox
|
||||||
|
width = 800m
|
||||||
|
height = 600m
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
plugin.tx_indexedsearch.settings.targetPid = 10
|
||||||
|
|
||||||
|
plugin.bootstrap_package {
|
||||||
|
settings {
|
||||||
|
scss {
|
||||||
|
primary = #ed1847
|
||||||
|
secondary = #ffffff
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
136
packages/base-design/Configuration/TypoScript/setup.typoscript
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
page {
|
||||||
|
shortcutIcon = EXT:base_design/Resources/Public/Images/favicon.png
|
||||||
|
includeCSS {
|
||||||
|
zTheme = EXT:base_design/Resources/Public/Scss/main.scss
|
||||||
|
}
|
||||||
|
includeJSFooterlibs {
|
||||||
|
ajaxnews = EXT:base_design/Resources/Public/JavaScript/newsAjaxPagination.js
|
||||||
|
search = EXT:base_design/Resources/Public/JavaScript/search.js
|
||||||
|
matomo = EXT:base_design/Resources/Public/JavaScript/matomo.js
|
||||||
|
}
|
||||||
|
10 {
|
||||||
|
settings {
|
||||||
|
pageIds {
|
||||||
|
search = {$plugin.tx_indexedsearch.settings.targetPid}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
config {
|
||||||
|
spamProtectEmailAddresses = 2
|
||||||
|
spamProtectEmailAddresses_atSubst = @
|
||||||
|
}
|
||||||
|
|
||||||
|
plugin {
|
||||||
|
tx_news {
|
||||||
|
view {
|
||||||
|
templateRootPaths {
|
||||||
|
0 = EXT:news/Resources/Private/Templates/
|
||||||
|
1 = EXT:base_design/Resources/Private/Templates/News
|
||||||
|
}
|
||||||
|
partialRootPaths {
|
||||||
|
0 = EXT:news/Resources/Private/Partials/
|
||||||
|
1 = EXT:base_design/Resources/Private/Partials/News
|
||||||
|
}
|
||||||
|
}
|
||||||
|
settings {
|
||||||
|
displayDummyIfNoMedia = 0
|
||||||
|
cropMaxCharacters = 500
|
||||||
|
responsiveimages {
|
||||||
|
news {
|
||||||
|
multiplier {
|
||||||
|
default = 0.5
|
||||||
|
large = 0.5
|
||||||
|
medium = 0.5
|
||||||
|
}
|
||||||
|
gutters {
|
||||||
|
default = 40
|
||||||
|
large = 40
|
||||||
|
medium = 40
|
||||||
|
}
|
||||||
|
}
|
||||||
|
variants {
|
||||||
|
default {
|
||||||
|
breakpoint = 1400
|
||||||
|
width = 1280
|
||||||
|
}
|
||||||
|
xlarge {
|
||||||
|
breakpoint = 1200
|
||||||
|
width = 1100
|
||||||
|
}
|
||||||
|
large {
|
||||||
|
breakpoint = 992
|
||||||
|
width = 920
|
||||||
|
}
|
||||||
|
medium {
|
||||||
|
breakpoint = 768
|
||||||
|
width = 680
|
||||||
|
}
|
||||||
|
small {
|
||||||
|
breakpoint = 576
|
||||||
|
width = 500
|
||||||
|
}
|
||||||
|
extrasmall {
|
||||||
|
breakpoint = unset
|
||||||
|
width = 374
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
list {
|
||||||
|
media.image {
|
||||||
|
maxWidth = 150c
|
||||||
|
maxHeight = 150c
|
||||||
|
}
|
||||||
|
paginate.templatePath = EXT:news/Resources/Private/Templates/Styles/Twb/Templates/ViewHelpers/Widget/Paginate/IndexAjax.html
|
||||||
|
}
|
||||||
|
detail.media.image.lightbox {
|
||||||
|
enabled = 1
|
||||||
|
class = lightbox
|
||||||
|
rel = lightbox-group-news
|
||||||
|
width = 800
|
||||||
|
height = 600
|
||||||
|
}
|
||||||
|
search {
|
||||||
|
paginate {
|
||||||
|
class = GeorgRinger\NumberedPagination\NumberedPagination
|
||||||
|
itemsPerPage = 10
|
||||||
|
insertAbove = 1
|
||||||
|
insertBelow = 1
|
||||||
|
maximumNumberOfLinks = 3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tx_form.settings.yamlConfigurations {
|
||||||
|
1681331285 = EXT:base_design/Configuration/Yaml/Finishers/GetResponse.yaml
|
||||||
|
}
|
||||||
|
tx_kesearch_pi1 {
|
||||||
|
view {
|
||||||
|
templateRootPaths {
|
||||||
|
9 = EXT:base_design/Resources/Private/Templates/Search/
|
||||||
|
}
|
||||||
|
partialRootPaths {
|
||||||
|
9 = EXT:base_design/Resources/Private/Partials/Search/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tx_kesearch_pi2.view < plugin.tx_kesearch_pi1.view
|
||||||
|
tx_kesearch_pi3.view < plugin.tx_kesearch_pi1.view
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
############################
|
||||||
|
#### CONTENT ELEMENTS ######
|
||||||
|
############################
|
||||||
|
lib.contentElement {
|
||||||
|
layoutRootPaths {
|
||||||
|
15 = EXT:base_design/Resources/Private/Layouts/ContentElements/
|
||||||
|
}
|
||||||
|
templateRootPaths {
|
||||||
|
15 = EXT:base_design/Resources/Private/Templates/ContentElements/
|
||||||
|
}
|
||||||
|
partialRootPaths {
|
||||||
|
15 = EXT:base_design/Resources/Private/Partials/ContentElements/
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,141 @@
|
|||||||
|
TYPO3:
|
||||||
|
CMS:
|
||||||
|
Form:
|
||||||
|
prototypes:
|
||||||
|
standard:
|
||||||
|
formElementsDefinition:
|
||||||
|
Form:
|
||||||
|
formEditor:
|
||||||
|
editors:
|
||||||
|
900:
|
||||||
|
selectOptions:
|
||||||
|
1681331285:
|
||||||
|
value: GetResponse
|
||||||
|
label: GetResponse Finisher
|
||||||
|
propertyCollections:
|
||||||
|
finishers:
|
||||||
|
1681331285:
|
||||||
|
identifier: GetResponse
|
||||||
|
editors:
|
||||||
|
100:
|
||||||
|
identifier: header
|
||||||
|
label: GetResponse
|
||||||
|
templateName: Inspector-CollectionElementHeaderEditor
|
||||||
|
105:
|
||||||
|
identifier: 'notifyEmail'
|
||||||
|
templateName: 'Inspector-TextEditor'
|
||||||
|
label: 'Notify email'
|
||||||
|
propertyPath: 'options.notifyEmail'
|
||||||
|
propertyValidators:
|
||||||
|
10: 'NotEmpty'
|
||||||
|
110:
|
||||||
|
identifier: 'apiKey'
|
||||||
|
templateName: 'Inspector-TextEditor'
|
||||||
|
label: 'API Key'
|
||||||
|
propertyPath: 'options.apiKey'
|
||||||
|
propertyValidators:
|
||||||
|
10: 'NotEmpty'
|
||||||
|
120:
|
||||||
|
identifier: 'campaignId'
|
||||||
|
templateName: 'Inspector-TextEditor'
|
||||||
|
label: 'Campaign ID'
|
||||||
|
propertyPath: 'options.campaignId'
|
||||||
|
propertyValidators:
|
||||||
|
10: 'NotEmpty'
|
||||||
|
130:
|
||||||
|
identifier: 'email'
|
||||||
|
templateName: 'Inspector-TextEditor'
|
||||||
|
label: 'Subscribers email'
|
||||||
|
propertyPath: 'options.email'
|
||||||
|
enableFormelementSelectionButton: true
|
||||||
|
propertyValidators:
|
||||||
|
10: 'NotEmpty'
|
||||||
|
20: 'FormElementIdentifierWithinCurlyBracesInclusive'
|
||||||
|
150:
|
||||||
|
identifier: 'firstname'
|
||||||
|
templateName: 'Inspector-TextEditor'
|
||||||
|
label: 'Subscribers firstname'
|
||||||
|
propertyPath: 'options.firstname'
|
||||||
|
enableFormelementSelectionButton: true
|
||||||
|
propertyValidators:
|
||||||
|
10: 'NotEmpty'
|
||||||
|
20: 'FormElementIdentifierWithinCurlyBracesInclusive'
|
||||||
|
160:
|
||||||
|
identifier: 'lastname'
|
||||||
|
templateName: 'Inspector-TextEditor'
|
||||||
|
label: 'Subscribers lastname'
|
||||||
|
propertyPath: 'options.lastname'
|
||||||
|
enableFormelementSelectionButton: true
|
||||||
|
propertyValidators:
|
||||||
|
10: 'NotEmpty'
|
||||||
|
20: 'FormElementIdentifierWithinCurlyBracesInclusive'
|
||||||
|
170:
|
||||||
|
identifier: 'company'
|
||||||
|
templateName: 'Inspector-TextEditor'
|
||||||
|
label: 'Subscribers company'
|
||||||
|
propertyPath: 'options.company'
|
||||||
|
enableFormelementSelectionButton: true
|
||||||
|
propertyValidators:
|
||||||
|
10: 'FormElementIdentifierWithinCurlyBracesInclusive'
|
||||||
|
180:
|
||||||
|
identifier: 'register'
|
||||||
|
templateName: 'Inspector-TextEditor'
|
||||||
|
label: 'Register boolean'
|
||||||
|
propertyPath: 'options.register'
|
||||||
|
enableFormelementSelectionButton: true
|
||||||
|
propertyValidators:
|
||||||
|
10: 'FormElementIdentifierWithinCurlyBracesInclusive'
|
||||||
|
9999:
|
||||||
|
indentifier: removeButton
|
||||||
|
templateName: Inspector-RemoveElementEditor
|
||||||
|
finishersDefinition:
|
||||||
|
GetResponse:
|
||||||
|
implementationClassName: 'Cloonar\BaseDesign\Domain\Finishers\GetResponseFinisher'
|
||||||
|
formEditor:
|
||||||
|
iconIdentifier: 'form-finisher'
|
||||||
|
label: 'GetResponse Finisher'
|
||||||
|
predefinedDefaults:
|
||||||
|
options:
|
||||||
|
notifyEmail: ''
|
||||||
|
apiKey: ''
|
||||||
|
campaignId: ''
|
||||||
|
email: {}
|
||||||
|
firstname: {}
|
||||||
|
lastname: {}
|
||||||
|
company: {}
|
||||||
|
register: {}
|
||||||
|
FormEngine:
|
||||||
|
label: 'GetResponse Finisher'
|
||||||
|
elements:
|
||||||
|
notifyEmail:
|
||||||
|
label: 'Notify email'
|
||||||
|
config:
|
||||||
|
type: 'text'
|
||||||
|
apiKey:
|
||||||
|
label: 'API key'
|
||||||
|
config:
|
||||||
|
type: 'text'
|
||||||
|
campaignId:
|
||||||
|
label: 'Campaign ID'
|
||||||
|
config:
|
||||||
|
type: 'text'
|
||||||
|
email:
|
||||||
|
label: 'Subscribers email'
|
||||||
|
config:
|
||||||
|
type: 'text'
|
||||||
|
firstname:
|
||||||
|
label: 'Subscribers firstname'
|
||||||
|
config:
|
||||||
|
type: 'text'
|
||||||
|
lastname:
|
||||||
|
label: 'Subscribers lastname'
|
||||||
|
config:
|
||||||
|
type: 'text'
|
||||||
|
company:
|
||||||
|
label: 'Subscribers company'
|
||||||
|
config:
|
||||||
|
type: 'text'
|
||||||
|
register:
|
||||||
|
label: 'Register Subscriber'
|
||||||
|
config:
|
||||||
|
type: 'text'
|
||||||
@@ -0,0 +1,121 @@
|
|||||||
|
|
||||||
|
renderingOptions:
|
||||||
|
submitButtonLabel: Anmelden
|
||||||
|
type: Form
|
||||||
|
identifier: newsletter
|
||||||
|
label: Newsletter
|
||||||
|
prototypeName: standard
|
||||||
|
finishers:
|
||||||
|
-
|
||||||
|
options:
|
||||||
|
notifyEmail: dominik.polakovics@cloonar.com
|
||||||
|
apiKey: 28a7270df8f61a296a11d3e63d5b2aaf
|
||||||
|
campaignId: 4Etb5
|
||||||
|
email: '{email-1}'
|
||||||
|
firstname: '{text-1}'
|
||||||
|
lastname: '{text-2}'
|
||||||
|
company: '{text-3}'
|
||||||
|
register: '{checkbox-1}'
|
||||||
|
identifier: GetResponse
|
||||||
|
-
|
||||||
|
options:
|
||||||
|
message: 'Vielen Dank für Ihre Anmeldung !'
|
||||||
|
contentElementUid: ''
|
||||||
|
identifier: Confirmation
|
||||||
|
renderables:
|
||||||
|
-
|
||||||
|
renderingOptions:
|
||||||
|
previousButtonLabel: 'Previous step'
|
||||||
|
nextButtonLabel: 'Next step'
|
||||||
|
type: Page
|
||||||
|
identifier: page-1
|
||||||
|
label: 'Newsletter Anmeldung'
|
||||||
|
renderables:
|
||||||
|
-
|
||||||
|
properties:
|
||||||
|
text: 'Melden Sie sich zu unserem Newsletter an, um top News zu erhalten!'
|
||||||
|
type: StaticText
|
||||||
|
identifier: statictext-1
|
||||||
|
label: ''
|
||||||
|
-
|
||||||
|
type: GridRow
|
||||||
|
identifier: gridrow-1
|
||||||
|
label: 'Grid: Row'
|
||||||
|
renderables:
|
||||||
|
-
|
||||||
|
defaultValue: ''
|
||||||
|
type: Text
|
||||||
|
identifier: text-1
|
||||||
|
label: Vorname
|
||||||
|
properties:
|
||||||
|
fluidAdditionalAttributes:
|
||||||
|
placeholder: Vorname
|
||||||
|
required: required
|
||||||
|
gridColumnClassAutoConfiguration:
|
||||||
|
viewPorts:
|
||||||
|
xs:
|
||||||
|
numbersOfColumnsToUse: '12'
|
||||||
|
validators:
|
||||||
|
-
|
||||||
|
identifier: NotEmpty
|
||||||
|
-
|
||||||
|
defaultValue: ''
|
||||||
|
type: Text
|
||||||
|
identifier: text-2
|
||||||
|
label: Nachname
|
||||||
|
properties:
|
||||||
|
fluidAdditionalAttributes:
|
||||||
|
placeholder: Nachname
|
||||||
|
required: required
|
||||||
|
gridColumnClassAutoConfiguration:
|
||||||
|
viewPorts:
|
||||||
|
xs:
|
||||||
|
numbersOfColumnsToUse: '12'
|
||||||
|
validators:
|
||||||
|
-
|
||||||
|
identifier: NotEmpty
|
||||||
|
-
|
||||||
|
type: GridRow
|
||||||
|
identifier: gridrow-2
|
||||||
|
label: 'Grid: Row'
|
||||||
|
renderables:
|
||||||
|
-
|
||||||
|
defaultValue: ''
|
||||||
|
type: Email
|
||||||
|
identifier: email-1
|
||||||
|
label: E-mail
|
||||||
|
properties:
|
||||||
|
fluidAdditionalAttributes:
|
||||||
|
placeholder: vorname.nachname@domain.com
|
||||||
|
required: required
|
||||||
|
gridColumnClassAutoConfiguration:
|
||||||
|
viewPorts:
|
||||||
|
xs:
|
||||||
|
numbersOfColumnsToUse: '12'
|
||||||
|
validators:
|
||||||
|
-
|
||||||
|
identifier: EmailAddress
|
||||||
|
-
|
||||||
|
identifier: NotEmpty
|
||||||
|
-
|
||||||
|
defaultValue: ''
|
||||||
|
type: Text
|
||||||
|
identifier: text-3
|
||||||
|
label: Firma
|
||||||
|
properties:
|
||||||
|
fluidAdditionalAttributes:
|
||||||
|
placeholder: Firma
|
||||||
|
gridColumnClassAutoConfiguration:
|
||||||
|
viewPorts:
|
||||||
|
xs:
|
||||||
|
numbersOfColumnsToUse: '12'
|
||||||
|
-
|
||||||
|
type: Checkbox
|
||||||
|
identifier: checkbox-1
|
||||||
|
label: 'Ich möchte den Newsletter per E-Mail erhalten. Meine Daten werden keinesfalls an Dritte weitergegeben. Meine Einwilligung kann ich jederzeit durch eine E-Mail an newsletter@cloonar.dev widerrufen. Selbstverständlich können Sie über die gespeicherten Daten Auskunft verlangen.'
|
||||||
|
properties:
|
||||||
|
fluidAdditionalAttributes:
|
||||||
|
required: required
|
||||||
|
validators:
|
||||||
|
-
|
||||||
|
identifier: NotEmpty
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
<file source-language="en" datatype="plaintext" original="EXT:base_design/Resources/Private/Language/locallang_ttc.xlf" date="2011-10-17T20:22:32Z" product-name="cms">
|
||||||
|
<header/>
|
||||||
|
<body>
|
||||||
|
<trans-unit id="space_class_zero" resname="space_class_zero">
|
||||||
|
<source>None</source>
|
||||||
|
</trans-unit>
|
||||||
|
</body>
|
||||||
|
</file>
|
||||||
|
</xliff>
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||||
|
xmlns:bk2k="http://typo3.org/ns/BK2K/BootstrapPackage/ViewHelpers" data-namespace-typo3-fluid="true">
|
||||||
|
<f:if condition="{files}">
|
||||||
|
|
||||||
|
<f:variable name="imagecols">{data.imagecols as integer}</f:variable>
|
||||||
|
<f:variable name="columnConfig">{settings.gallery.columns.{imagecols}}</f:variable>
|
||||||
|
<bk2k:data.imageVariants as="variants" variants="{variants}" multiplier="{columnConfig.multiplier}"
|
||||||
|
gutters="{columnConfig.gutters}" corrections="{columnConfig.corrections}" />
|
||||||
|
|
||||||
|
<div class="gallery-row">
|
||||||
|
<f:for each="{files}" as="file" iteration="fileIteration">
|
||||||
|
<div class="gallery-item {columnConfig.class}">
|
||||||
|
<f:render partial="Media/Type" arguments="{file: file, data: data, settings: settings, variants: variants}" />
|
||||||
|
</div>
|
||||||
|
</f:for>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</f:if>
|
||||||
|
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||||
|
xmlns:bk2k="http://typo3.org/ns/BK2K/BootstrapPackage/ViewHelpers" data-namespace-typo3-fluid="true">
|
||||||
|
<figure class="image">
|
||||||
|
<f:if condition="{file.properties.link}">
|
||||||
|
<f:then>
|
||||||
|
<f:link.typolink parameter="{file.properties.link}" title="{file.properties.title}">
|
||||||
|
<f:render partial="Media/Rendering/Image"
|
||||||
|
arguments="{file: file, data: data, settings: settings, variants: variants}" />
|
||||||
|
<f:if condition="{file.properties.title}">
|
||||||
|
<h4><f:format.nl2br>{file.properties.title}</f:format.nl2br></h4>
|
||||||
|
</f:if>
|
||||||
|
</f:link.typolink>
|
||||||
|
</f:then>
|
||||||
|
<f:else>
|
||||||
|
<f:if condition="{data.image_zoom}">
|
||||||
|
<f:then>
|
||||||
|
<bk2k:link.lightbox image="{file}" maxHeight="{settings.lightbox.image.maxHeight}"
|
||||||
|
maxWidth="{settings.lightbox.image.maxWidth}" class="{settings.lightbox.cssClass}"
|
||||||
|
rel="{settings.lightbox.prefix}-{data.uid}" title="{file.properties.title}"
|
||||||
|
caption="{file.properties.description}">
|
||||||
|
<f:render partial="Media/Rendering/Image"
|
||||||
|
arguments="{file: file, data: data, settings: settings, variants: variants}" />
|
||||||
|
</bk2k:link.lightbox>
|
||||||
|
</f:then>
|
||||||
|
<f:else>
|
||||||
|
<f:render partial="Media/Rendering/Image"
|
||||||
|
arguments="{file: file, data: data, settings: settings, variants: variants}" />
|
||||||
|
</f:else>
|
||||||
|
</f:if>
|
||||||
|
</f:else>
|
||||||
|
</f:if>
|
||||||
|
<f:if condition="{file.properties.description} && !{data.image_zoom}">
|
||||||
|
<figcaption class="caption">
|
||||||
|
<f:format.nl2br>{file.properties.description}</f:format.nl2br>
|
||||||
|
</figcaption>
|
||||||
|
</f:if>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||||
|
xmlns:n="http://typo3.org/ns/GeorgRinger/News/ViewHelpers"
|
||||||
|
data-namespace-typo3-fluid="true">
|
||||||
|
|
||||||
|
<div class="mediaelement mediaelement-image">
|
||||||
|
<f:if condition="{mediaElement.link}">
|
||||||
|
<f:then>
|
||||||
|
<f:link.typolink parameter="{mediaElement.link}" target="{n:targetLink(link:mediaElement.link)}">
|
||||||
|
<f:image image="{mediaElement}" title="{mediaElement.title}" alt="{mediaElement.alternative}" loading="{settings.detail.media.image.lazyLoading}" maxWidth="{f:if(condition: settings.media.maxWidth, then: settings.media.maxWidth, else: settings.detail.media.image.maxWidth)}" maxHeight="{f:if(condition: settings.media.maxHeight, then: settings.media.maxHeight, else: settings.detail.media.image.maxHeight)}" additionalAttributes="{itemprop:'image'}" />
|
||||||
|
</f:link.typolink>
|
||||||
|
</f:then>
|
||||||
|
<f:else>
|
||||||
|
<f:if condition="{settings.detail.media.image.lightbox.enabled}">
|
||||||
|
<f:then>
|
||||||
|
<a href="{f:uri.image(image:mediaElement, width:'{settings.detail.media.image.lightbox.width}m', height:'{settings.detail.media.image.lightbox.height}m')}" title="{mediaElement.title}" class="{settings.detail.media.image.lightbox.class}" rel="{settings.detail.media.image.lightbox.rel}" data-lightbox-width="{settings.detail.media.image.lightbox.width}" data-lightbox-height="{settings.detail.media.image.lightbox.height}" data-lightbox-caption="">
|
||||||
|
<f:image image="{mediaElement}" title="{mediaElement.title}" alt="{mediaElement.alternative}" loading="{settings.detail.media.image.lazyLoading}" maxWidth="{f:if(condition: settings.media.maxWidth, then: settings.media.maxWidth, else: settings.detail.media.image.maxWidth)}" maxHeight="{f:if(condition: settings.media.maxHeight, then: settings.media.maxHeight, else: settings.detail.media.image.maxHeight)}" additionalAttributes="{itemprop:'image'}" />
|
||||||
|
</a>
|
||||||
|
</f:then>
|
||||||
|
<f:else>
|
||||||
|
<f:image image="{mediaElement}" title="{mediaElement.title}" alt="{mediaElement.alternative}" loading="{settings.detail.media.image.lazyLoading}" maxWidth="{f:if(condition: settings.media.maxWidth, then: settings.media.maxWidth, else: settings.detail.media.image.maxWidth)}" maxHeight="{f:if(condition: settings.media.maxHeight, then: settings.media.maxHeight, else: settings.detail.media.image.maxHeight)}" additionalAttributes="{itemprop:'image'}" />
|
||||||
|
</f:else>
|
||||||
|
</f:if>
|
||||||
|
</f:else>
|
||||||
|
</f:if>
|
||||||
|
</div>
|
||||||
|
<f:if condition="{mediaElement.description}">
|
||||||
|
<p class="news-img-caption">
|
||||||
|
{mediaElement.description}
|
||||||
|
</p>
|
||||||
|
</f:if>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||||
|
xmlns:n="http://typo3.org/ns/GeorgRinger/News/ViewHelpers"
|
||||||
|
data-namespace-typo3-fluid="true">
|
||||||
|
|
||||||
|
<f:if condition="{newsItem.alternativeTitle}">
|
||||||
|
<f:then><n:metaTag property="og:title" content="{newsItem.alternativeTitle}" /></f:then>
|
||||||
|
<f:else><n:metaTag property="og:title" content="{newsItem.title}" /></f:else>
|
||||||
|
</f:if>
|
||||||
|
<n:metaTag property="og:type" content="{settings.opengraph.type}" />
|
||||||
|
<n:metaTag property="og:url" content="" useCurrentDomain="1" />
|
||||||
|
<n:metaTag property="og:site_name" content="{settings.opengraph.site_name}" />
|
||||||
|
<f:if condition="{newsItem.media.0}">
|
||||||
|
<f:variable name="ogImagePath" value="{f:uri.image(src:'{newsItem.media.0.uid}', treatIdAsReference:1, maxWidth:'1200')}" />
|
||||||
|
<n:metaTag
|
||||||
|
property="og:image"
|
||||||
|
content="{ogImagePath}"
|
||||||
|
forceAbsoluteUrl="1" />
|
||||||
|
<n:metaTag property="og:image:width" content="{n:imageSize(property:'width', image:'{ogImagePath}')}" />
|
||||||
|
<n:metaTag property="og:image:height" content="{n:imageSize(property:'height', image:'{ogImagePath}')}" />
|
||||||
|
</f:if>
|
||||||
|
|
||||||
|
<f:if condition="{newsItem.description}">
|
||||||
|
<f:then>
|
||||||
|
<n:metaTag name="description" content="{newsItem.description}" />
|
||||||
|
<n:metaTag property="og:description" content="{newsItem.description}" />
|
||||||
|
</f:then>
|
||||||
|
<f:else>
|
||||||
|
<n:metaTag name="description" content="{newsItem.teaser -> f:format.stripTags()}" />
|
||||||
|
<n:metaTag property="og:description" content="{newsItem.teaser -> f:format.stripTags()}" />
|
||||||
|
</f:else>
|
||||||
|
</f:if>
|
||||||
|
<n:metaTag name="keywords" content="{newsItem.keywords}" />
|
||||||
|
<n:metaTag property="fb:admins" content="{settings.opengraph.admins}" />
|
||||||
|
<n:metaTag property="og:locale" content="{settings.opengraph.locale}" />
|
||||||
|
<f:if condition="{settings.opengraph.twitter.site}">
|
||||||
|
<n:metaTag name="twitter:card" content="{settings.opengraph.twitter.card}" />
|
||||||
|
<n:metaTag name="twitter:site" content="{settings.opengraph.twitter.site}" />
|
||||||
|
<n:metaTag name="twitter:creator" content="{settings.opengraph.twitter.creator}" />
|
||||||
|
</f:if>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,103 @@
|
|||||||
|
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||||
|
xmlns:n="http://typo3.org/ns/GeorgRinger/News/ViewHelpers"
|
||||||
|
data-namespace-typo3-fluid="true">
|
||||||
|
<!--
|
||||||
|
=====================
|
||||||
|
Partials/List/Item.html
|
||||||
|
-->
|
||||||
|
<div class="article articletype-{newsItem.type}{f:if(condition: newsItem.istopnews, then: ' topnews')}" itemscope="itemscope" itemtype="https://schema.org/Article">
|
||||||
|
<n:excludeDisplayedNews newsItem="{newsItem}"/>
|
||||||
|
<!-- header -->
|
||||||
|
<div class="header">
|
||||||
|
<h3>
|
||||||
|
<n:link newsItem="{newsItem}" settings="{settings}" title="{newsItem.title}" additionalAttributes="{itemprop:'url'}">
|
||||||
|
<span itemprop="headline">{newsItem.title}</span>
|
||||||
|
</n:link>
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<f:if condition="{newsItem.media}">
|
||||||
|
<!-- media preview element -->
|
||||||
|
<f:then>
|
||||||
|
<div class="news-img-wrap">
|
||||||
|
<n:link newsItem="{newsItem}" settings="{settings}" title="{newsItem.title}">
|
||||||
|
<f:alias map="{mediaElement: newsItem.media.0}">
|
||||||
|
<f:if condition="{mediaElement.originalResource.type} == 2">
|
||||||
|
<f:image image="{mediaElement}" title="{mediaElement.originalResource.title}" alt="{mediaElement.originalResource.alternative}" loading="{settings.list.media.image.lazyLoading}" width="{f:if(condition: settings.media.maxWidth, then: settings.media.maxWidth, else: settings.list.media.image.maxWidth)}" height="{f:if(condition: settings.media.maxHeight, then: settings.media.maxHeight, else: settings.list.media.image.maxHeight)}"/>
|
||||||
|
</f:if>
|
||||||
|
<f:if condition="{mediaElement.originalResource.type} == 4">
|
||||||
|
<f:render partial="Detail/MediaVideo" arguments="{mediaElement: mediaElement}"/>
|
||||||
|
</f:if>
|
||||||
|
<f:if condition="{mediaElement.originalResource.type} == 5">
|
||||||
|
<f:image image="{mediaElement}" title="{mediaElement.originalResource.title}" alt="{mediaElement.originalResource.alternative}" loading="{settings.list.media.image.lazyLoading}" width="{f:if(condition: settings.media.maxWidth, then: settings.media.maxWidth, else: settings.list.media.image.maxWidth)}" height="{f:if(condition: settings.media.maxHeight, then: settings.media.maxHeight, else: settings.list.media.image.maxHeight)}"/>
|
||||||
|
</f:if>
|
||||||
|
</f:alias>
|
||||||
|
</n:link>
|
||||||
|
</div>
|
||||||
|
</f:then>
|
||||||
|
<f:else>
|
||||||
|
<f:if condition="{settings.displayDummyIfNoMedia}">
|
||||||
|
<div class="news-img-wrap">
|
||||||
|
<span class="no-media-element">
|
||||||
|
<n:link newsItem="{newsItem}" settings="{settings}" title="{newsItem.title}">
|
||||||
|
<f:image src="{settings.list.media.dummyImage}" title="" alt="" loading="{settings.list.media.image.lazyLoading}" maxWidth="{f:if(condition: settings.media.maxWidth, then: settings.media.maxWidth, else: settings.list.media.image.maxWidth)}" maxHeight="{f:if(condition: settings.media.maxHeight, then: settings.media.maxHeight, else: settings.list.media.image.maxHeight)}"/>
|
||||||
|
</n:link>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</f:if>
|
||||||
|
</f:else>
|
||||||
|
</f:if>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- teaser -->
|
||||||
|
<div class="teaser-text">
|
||||||
|
<n:removeMediaTags>
|
||||||
|
<f:if condition="{newsItem.teaser}">
|
||||||
|
<f:then>
|
||||||
|
<div itemprop="description">{newsItem.teaser -> f:format.crop(maxCharacters: '{settings.cropMaxCharacters}', respectWordBoundaries:'1') -> f:format.raw()}</div>
|
||||||
|
</f:then>
|
||||||
|
<f:else>
|
||||||
|
<div itemprop="description">{newsItem.bodytext -> f:format.crop(maxCharacters: '{settings.cropMaxCharacters}', respectWordBoundaries:'1') -> f:format.raw()}</div>
|
||||||
|
</f:else>
|
||||||
|
</f:if>
|
||||||
|
</n:removeMediaTags>
|
||||||
|
|
||||||
|
<n:link newsItem="{newsItem}" settings="{settings}" class="more" title="{newsItem.title}">
|
||||||
|
<f:translate key="more-link"/>
|
||||||
|
</n:link>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- footer information -->
|
||||||
|
<div class="footer">
|
||||||
|
<p>
|
||||||
|
<!-- date -->
|
||||||
|
<span class="news-list-date">
|
||||||
|
<time itemprop="datePublished" datetime="{f:format.date(date:newsItem.datetime, format:'Y-m-d')}">
|
||||||
|
<f:format.date format="{f:translate(key:'dateFormat')}">{newsItem.datetime}</f:format.date>
|
||||||
|
</time>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<f:if condition="{newsItem.firstCategory}">
|
||||||
|
<!-- first category -->
|
||||||
|
<span class="news-list-category">{newsItem.firstCategory.title}</span>
|
||||||
|
</f:if>
|
||||||
|
|
||||||
|
<f:if condition="{newsItem.tags}">
|
||||||
|
<!-- Tags -->
|
||||||
|
<span class="news-list-tags" itemprop="keywords">
|
||||||
|
<f:for each="{newsItem.tags}" as="tag">
|
||||||
|
{tag.title}
|
||||||
|
</f:for>
|
||||||
|
</span>
|
||||||
|
</f:if>
|
||||||
|
|
||||||
|
<!-- author -->
|
||||||
|
<f:if condition="{newsItem.author}">
|
||||||
|
<span class="news-list-author">
|
||||||
|
<f:translate key="author" arguments="{0:newsItem.author}"/>
|
||||||
|
</span>
|
||||||
|
</f:if>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
<ul class="f3-widget-paginator">
|
||||||
|
<f:if condition="{pagination.previousPageNumber} && {pagination.previousPageNumber} >= {pagination.firstPageNumber}">
|
||||||
|
<f:then>
|
||||||
|
<f:comment>
|
||||||
|
<li class="first">
|
||||||
|
<a href="{f:uri.action(action:actionName, arguments:{currentPage: 1},addQueryString:1)}" title="{f:translate(key:'pagination.first')}">
|
||||||
|
<i class="material-icons">first_page</i>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</f:comment>
|
||||||
|
<li class="previous">
|
||||||
|
<a href="{f:uri.action(action:actionName, arguments:{currentPage: pagination.previousPageNumber},addQueryString:1)}" title="{f:translate(key:'pagination.previous')}">
|
||||||
|
{f:translate(key:'widget.pagination.previous', extensionName: 'fluid')}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</f:then>
|
||||||
|
<f:else>
|
||||||
|
<f:comment>
|
||||||
|
<li class="disabled"><span><i class="material-icons">first_page</i></span></li>
|
||||||
|
<li class="disabled"><span>{f:translate(key:'widget.pagination.previous', extensionName: 'fluid')}</span></li>
|
||||||
|
</f:comment>
|
||||||
|
</f:else>
|
||||||
|
</f:if>
|
||||||
|
<f:if condition="{pagination.hasLessPages}">
|
||||||
|
<li><span>…</span></li>
|
||||||
|
</f:if>
|
||||||
|
<f:for each="{pagination.allPageNumbers}" as="page">
|
||||||
|
<li class="{f:if(condition: '{page} == {paginator.currentPageNumber}', then:'current')}">
|
||||||
|
<a href="{f:uri.action(action:actionName, arguments:{currentPage: page},addQueryString:1)}">{page}</a>
|
||||||
|
</li>
|
||||||
|
</f:for>
|
||||||
|
<f:if condition="{pagination.hasMorePages}">
|
||||||
|
<li><span>…</span></li>
|
||||||
|
</f:if>
|
||||||
|
<f:if condition="{pagination.nextPageNumber} && {pagination.nextPageNumber} <= {pagination.lastPageNumber}">
|
||||||
|
<f:then>
|
||||||
|
<li class="next">
|
||||||
|
<a href="{f:uri.action(action:actionName, arguments:{currentPage: pagination.nextPageNumber},addQueryString:1)}" title="{f:translate(key:'pagination.next')}">
|
||||||
|
{f:translate(key:'widget.pagination.next', extensionName: 'fluid')}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<f:comment>
|
||||||
|
<li class="last">
|
||||||
|
<a href="{f:uri.action(action:actionName, arguments:{currentPage: pagination.lastPageNumber},addQueryString:1)}" title="{f:translate(key:'pagination.last')}">
|
||||||
|
last
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</f:comment>
|
||||||
|
</f:then>
|
||||||
|
<f:else>
|
||||||
|
<f:comment>
|
||||||
|
<li class="disabled"><span>{f:translate(key:'widget.pagination.next', extensionName: 'fluid')}</span></li>
|
||||||
|
<li class="disabled"><span>last page</span></li>
|
||||||
|
</f:comment>
|
||||||
|
</f:else>
|
||||||
|
</f:if>
|
||||||
|
</ul>
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||||
|
xmlns:n="http://typo3.org/ns/GeorgRinger/News/ViewHelpers"
|
||||||
|
data-namespace-typo3-fluid="true">
|
||||||
|
<!--
|
||||||
|
=====================
|
||||||
|
Partials/List/Item.html
|
||||||
|
-->
|
||||||
|
<div class="article articletype-{newsItem.type}{f:if(condition: newsItem.istopnews, then: ' topnews')}" itemscope="itemscope" itemtype="https://schema.org/Article">
|
||||||
|
<n:excludeDisplayedNews newsItem="{newsItem}"/>
|
||||||
|
<!-- header -->
|
||||||
|
<div class="header">
|
||||||
|
<h3>
|
||||||
|
<span itemprop="headline">{newsItem.title}</span>
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<f:if condition="{newsItem.media}">
|
||||||
|
<!-- media preview element -->
|
||||||
|
<f:then>
|
||||||
|
<div class="news-img-wrap">
|
||||||
|
<f:alias map="{mediaElement: newsItem.media.0}">
|
||||||
|
<f:if condition="{mediaElement.originalResource.type} == 2">
|
||||||
|
<f:image image="{mediaElement}" title="{mediaElement.originalResource.title}" alt="{mediaElement.originalResource.alternative}" loading="{settings.list.media.image.lazyLoading}" width="{f:if(condition: settings.media.maxWidth, then: settings.media.maxWidth, else: settings.list.media.image.maxWidth)}" height="{f:if(condition: settings.media.maxHeight, then: settings.media.maxHeight, else: settings.list.media.image.maxHeight)}"/>
|
||||||
|
</f:if>
|
||||||
|
<f:if condition="{mediaElement.originalResource.type} == 4">
|
||||||
|
<f:render partial="Detail/MediaVideo" arguments="{mediaElement: mediaElement}"/>
|
||||||
|
</f:if>
|
||||||
|
<f:if condition="{mediaElement.originalResource.type} == 5">
|
||||||
|
<f:image image="{mediaElement}" title="{mediaElement.originalResource.title}" alt="{mediaElement.originalResource.alternative}" loading="{settings.list.media.image.lazyLoading}" width="{f:if(condition: settings.media.maxWidth, then: settings.media.maxWidth, else: settings.list.media.image.maxWidth)}" height="{f:if(condition: settings.media.maxHeight, then: settings.media.maxHeight, else: settings.list.media.image.maxHeight)}"/>
|
||||||
|
</f:if>
|
||||||
|
</f:alias>
|
||||||
|
</div>
|
||||||
|
</f:then>
|
||||||
|
<f:else>
|
||||||
|
<f:if condition="{settings.displayDummyIfNoMedia}">
|
||||||
|
<div class="news-img-wrap">
|
||||||
|
<span class="no-media-element">
|
||||||
|
<f:image src="{settings.list.media.dummyImage}" title="" alt="" loading="{settings.list.media.image.lazyLoading}" maxWidth="{f:if(condition: settings.media.maxWidth, then: settings.media.maxWidth, else: settings.list.media.image.maxWidth)}" maxHeight="{f:if(condition: settings.media.maxHeight, then: settings.media.maxHeight, else: settings.list.media.image.maxHeight)}"/>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</f:if>
|
||||||
|
</f:else>
|
||||||
|
</f:if>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- teaser -->
|
||||||
|
<div class="teaser-text">
|
||||||
|
<n:removeMediaTags>
|
||||||
|
<div itemprop="description">{newsItem.bodytext -> f:format.html()}</div>
|
||||||
|
</n:removeMediaTags>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- footer information -->
|
||||||
|
<div class="footer">
|
||||||
|
<p>
|
||||||
|
<!-- date -->
|
||||||
|
<span class="news-list-date">
|
||||||
|
<time itemprop="datePublished" datetime="{f:format.date(date:newsItem.datetime, format:'Y-m-d')}">
|
||||||
|
<f:format.date format="{f:translate(key:'dateFormat')}">{newsItem.datetime}</f:format.date>
|
||||||
|
</time>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<f:if condition="{newsItem.firstCategory}">
|
||||||
|
<!-- first category -->
|
||||||
|
<span class="news-list-category">{newsItem.firstCategory.title}</span>
|
||||||
|
</f:if>
|
||||||
|
|
||||||
|
<f:if condition="{newsItem.tags}">
|
||||||
|
<!-- Tags -->
|
||||||
|
<span class="news-list-tags" itemprop="keywords">
|
||||||
|
<f:for each="{newsItem.tags}" as="tag">
|
||||||
|
{tag.title}
|
||||||
|
</f:for>
|
||||||
|
</span>
|
||||||
|
</f:if>
|
||||||
|
|
||||||
|
<!-- author -->
|
||||||
|
<f:if condition="{newsItem.author}">
|
||||||
|
<span class="news-list-author">
|
||||||
|
<f:translate key="author" arguments="{0:newsItem.author}"/>
|
||||||
|
</span>
|
||||||
|
</f:if>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" xmlns:bk2k="http://typo3.org/ns/BK2K/BootstrapPackage/ViewHelpers" data-namespace-typo3-fluid="true">
|
||||||
|
<div class="search-wrap">
|
||||||
|
<form
|
||||||
|
method="get"
|
||||||
|
id="form_kesearch_searchfield"
|
||||||
|
name="form_kesearch_searchfield"
|
||||||
|
action="{f:uri.typolink(parameter: settings.pageIds.search)}"
|
||||||
|
class="search-wrap"
|
||||||
|
>
|
||||||
|
<div class="input-group">
|
||||||
|
<input type="text" id="header-search-input" name="tx_kesearch_pi1[sword]" class="form-control" />
|
||||||
|
<div class="input-group-append">
|
||||||
|
<button class="btn btn-primary" type="submit">
|
||||||
|
<bk2k:inlineSvg src="EXT:bootstrap_package/Resources/Public/Images/Icons/Glyphicons/search.svg" height="20" width="20" />
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
<f:comment>
|
||||||
|
<!--
|
||||||
|
=====================
|
||||||
|
Base Partials/Search/ResultRow.html
|
||||||
|
-->
|
||||||
|
</f:comment>
|
||||||
|
|
||||||
|
<div class="result-list-item result-list-item-type-{resultrow.type}">
|
||||||
|
<span class="clearer"> </span>
|
||||||
|
<div class="add-info">
|
||||||
|
<f:if condition="{conf.showResultUrl}">
|
||||||
|
<i>{f:translate(key: 'LLL:EXT:ke_search/Resources/Private/Language/locallang_searchbox.xlf:label_resulturl')}:</i>
|
||||||
|
<f:format.raw>{resultrow.url}</f:format.raw><br />
|
||||||
|
</f:if>
|
||||||
|
|
||||||
|
<f:if condition="{conf.showTags}">
|
||||||
|
<i>{f:translate(key: 'LLL:EXT:ke_search/Resources/Private/Language/locallang_searchbox.xlf:label_tags')}:</i>
|
||||||
|
{resultrow.tags}<br />
|
||||||
|
</f:if>
|
||||||
|
</div>
|
||||||
|
<span class="teaser_icon">
|
||||||
|
<a href="{resultrow.url}">
|
||||||
|
<f:render section="typeIconOrPreviewImage"
|
||||||
|
arguments="{icon: resultrow.typeIconPath, filePreviewId: resultrow.filePreviewId, treatIdAsReference:resultrow.treatIdAsReference, iconConf: conf.showTypeIcon}" />
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
<h3 class="result-title">
|
||||||
|
<f:if condition="{conf.resultsNumeration}">
|
||||||
|
<span class="result-number">{resultrow.number}.</span>
|
||||||
|
</f:if>
|
||||||
|
<f:format.raw>
|
||||||
|
<f:format.crop maxCharacters="65" append="...">
|
||||||
|
{resultrow.title}
|
||||||
|
</f:format.crop>
|
||||||
|
</f:format.raw>
|
||||||
|
</h3>
|
||||||
|
<f:if condition="{resultrow.type} == 'cal'">
|
||||||
|
<f:then>
|
||||||
|
<f:comment>
|
||||||
|
<!-- Special cal date rendering -->
|
||||||
|
</f:comment>
|
||||||
|
<f:render partial="CalDate" arguments="{resultrow: resultrow}" />
|
||||||
|
<br />
|
||||||
|
</f:then>
|
||||||
|
<f:else>
|
||||||
|
<f:comment>
|
||||||
|
<!-- Default date rendering -->
|
||||||
|
</f:comment>
|
||||||
|
<f:if condition="{conf.showDate}">
|
||||||
|
<div class="result-date">
|
||||||
|
<!-- <f:format.date>{resultrow.date_timestamp}</f:format.date> -->
|
||||||
|
01.01.2023
|
||||||
|
</div>
|
||||||
|
</f:if>
|
||||||
|
</f:else>
|
||||||
|
</f:if>
|
||||||
|
<div class="result-teaser">
|
||||||
|
<f:format.raw>{resultrow.teaser}</f:format.raw>
|
||||||
|
</div>
|
||||||
|
<span class="clearer"> </span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<f:section name="typeIconOrPreviewImage">
|
||||||
|
<f:if condition="{iconConf} && !{filePreviewId}">
|
||||||
|
<f:then>
|
||||||
|
</f:then>
|
||||||
|
<f:else>
|
||||||
|
<f:if condition="{filePreviewId}">
|
||||||
|
<f:image src="{filePreviewId}" treatIdAsReference="{treatIdAsReference}" width="100m" height="100c" />
|
||||||
|
</f:if>
|
||||||
|
</f:else>
|
||||||
|
</f:if>
|
||||||
|
</f:section>
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
<f:comment>
|
||||||
|
<!--
|
||||||
|
=====================
|
||||||
|
Partials/ResultRows.html
|
||||||
|
-->
|
||||||
|
</f:comment>
|
||||||
|
|
||||||
|
<div class="clearer"> </div>
|
||||||
|
<f:render partial="Sorting" arguments="{conf: conf, numberofresults: numberofresults, sortingLinks: sortingLinks}" />
|
||||||
|
<f:if condition="{conf.pagebrowserOnTop}">
|
||||||
|
<div id="kesearch_pagebrowser_top">
|
||||||
|
<f:render partial="PageBrowser"
|
||||||
|
arguments="{conf: conf, numberofresults:numberofresults, pagebrowser:pagebrowser}" />
|
||||||
|
</div>
|
||||||
|
</f:if>
|
||||||
|
<div id="kesearch_results">
|
||||||
|
<f:for each="{resultrows}" as="resultrow">
|
||||||
|
<f:render partial="ResultRow" arguments="{conf: conf, resultrow: resultrow}" />
|
||||||
|
</f:for>
|
||||||
|
</div>
|
||||||
|
<f:if condition="{conf.pagebrowserAtBottom}">
|
||||||
|
<div id="kesearch_pagebrowser_bottom">
|
||||||
|
<f:render partial="PageBrowser"
|
||||||
|
arguments="{conf: conf, numberofresults:numberofresults, pagination:pagination}" />
|
||||||
|
</div>
|
||||||
|
</f:if>
|
||||||
|
<f:if condition="{conf.showQueryTime}">
|
||||||
|
<div id="kesearch_query_time">{queryTimeText}</div>
|
||||||
|
</f:if>
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
|
||||||
|
<section class="section footer-section footer-section-content">
|
||||||
|
<div class="container">
|
||||||
|
<div class="section-row">
|
||||||
|
<div class="section-column footer-section-content-column footer-section-content-column-left">
|
||||||
|
<f:cObject typoscriptObjectPath="lib.dynamicContent" data="{pageUid: '{data.uid}', colPos: '10', slide: '-1'}" />
|
||||||
|
</div>
|
||||||
|
<div class="section-column footer-section-content-column footer-section-content-column-middle">
|
||||||
|
<f:cObject typoscriptObjectPath="lib.dynamicContent" data="{pageUid: '{data.uid}', colPos: '11', slide: '-1'}" />
|
||||||
|
</div>
|
||||||
|
<div class="section-column footer-section-content-column footer-section-content-column-right">
|
||||||
|
<f:cObject typoscriptObjectPath="lib.dynamicContent" data="{pageUid: '{data.uid}', colPos: '12', slide: '-1'}" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,203 @@
|
|||||||
|
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||||
|
xmlns:n="http://typo3.org/ns/GeorgRinger/News/ViewHelpers"
|
||||||
|
xmlns:rx="http://typo3.org/ns/Reelworx/RxShariff/ViewHelper"
|
||||||
|
data-namespace-typo3-fluid="true">
|
||||||
|
|
||||||
|
<f:layout name="Detail" />
|
||||||
|
|
||||||
|
<!--
|
||||||
|
=====================
|
||||||
|
News/Detail.html
|
||||||
|
-->
|
||||||
|
|
||||||
|
<f:section name="content">
|
||||||
|
<f:if condition="{newsItem}">
|
||||||
|
<f:then>
|
||||||
|
<n:format.nothing>
|
||||||
|
<n:excludeDisplayedNews newsItem="{newsItem}" />
|
||||||
|
<f:if condition="{settings.detail.showMetaTags}">
|
||||||
|
<f:render partial="Detail/Opengraph" arguments="{newsItem: newsItem, settings:settings}" />
|
||||||
|
</f:if>
|
||||||
|
<f:if condition="{newsItem.alternativeTitle}">
|
||||||
|
<f:then>
|
||||||
|
<n:titleTag>
|
||||||
|
<f:format.htmlentitiesDecode>{newsItem.alternativeTitle}</f:format.htmlentitiesDecode>
|
||||||
|
</n:titleTag>
|
||||||
|
</f:then>
|
||||||
|
<f:else>
|
||||||
|
<n:titleTag>
|
||||||
|
<f:format.htmlentitiesDecode>{newsItem.title}</f:format.htmlentitiesDecode>
|
||||||
|
</n:titleTag>
|
||||||
|
</f:else>
|
||||||
|
</f:if>
|
||||||
|
</n:format.nothing>
|
||||||
|
<f:if condition="{settings.detail.showPrevNext}">
|
||||||
|
<n:simplePrevNext pidList="{newsItem.pid}" news="{newsItem}" as="paginated" sortField="datetime">
|
||||||
|
<f:if condition="{paginated}">
|
||||||
|
<ul class="pager">
|
||||||
|
<f:if condition="{paginated.prev}">
|
||||||
|
<li class="previous">
|
||||||
|
<n:link newsItem="{paginated.prev}" settings="{settings}">
|
||||||
|
<span aria-hidden="true">← </span>{paginated.prev.title}
|
||||||
|
</n:link>
|
||||||
|
</li>
|
||||||
|
</f:if>
|
||||||
|
<f:if condition="{paginated.next}">
|
||||||
|
<li class="next">
|
||||||
|
<n:link newsItem="{paginated.next}" settings="{settings}" class="next">
|
||||||
|
{paginated.next.title} <span aria-hidden="true"> →</span>
|
||||||
|
</n:link>
|
||||||
|
</li>
|
||||||
|
</f:if>
|
||||||
|
</ul>
|
||||||
|
</f:if>
|
||||||
|
</n:simplePrevNext>
|
||||||
|
</f:if>
|
||||||
|
<div class="header">
|
||||||
|
<h1 itemprop="headline">{newsItem.title}</h1>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<p>
|
||||||
|
<!-- date -->
|
||||||
|
<span class="news-list-date">
|
||||||
|
<time itemprop="datePublished" datetime="{f:format.date(date:newsItem.datetime, format:'Y-m-d')}">
|
||||||
|
<f:format.date format="{f:translate(key:'dateFormat')}">{newsItem.datetime}</f:format.date>
|
||||||
|
</time>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<f:if condition="{newsItem.categories}">
|
||||||
|
<f:render partial="Category/Items" arguments="{categories:newsItem.categories, settings:settings}" />
|
||||||
|
</f:if>
|
||||||
|
|
||||||
|
<f:if condition="{newsItem.tags}">
|
||||||
|
<!-- Tags -->
|
||||||
|
<span class="news-list-tags" itemprop="keywords">
|
||||||
|
<f:for each="{newsItem.tags}" as="tag">
|
||||||
|
{tag.title}
|
||||||
|
</f:for>
|
||||||
|
</span>
|
||||||
|
</f:if>
|
||||||
|
|
||||||
|
<f:if condition="{newsItem.author}">
|
||||||
|
<!-- author -->
|
||||||
|
<span class="news-list-author" itemprop="author" itemscope="itemscope" itemtype="http://schema.org/Person">
|
||||||
|
<f:translate key="author_simple" /> <span itemprop="name">{newsItem.author}</span>
|
||||||
|
</span>
|
||||||
|
</f:if>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<n:renderMedia news="{newsItem}" imgClass="img-responsive" videoClass="video-wrapper" audioClass="audio-wrapper">
|
||||||
|
<f:if condition="{newsItem.contentElements}">
|
||||||
|
<!-- content elements -->
|
||||||
|
<f:cObject typoscriptObjectPath="lib.tx_news.contentElementRendering">{newsItem.contentElementIdList}</f:cObject>
|
||||||
|
</f:if>
|
||||||
|
|
||||||
|
<f:if condition="{newsItem.falMedia -> f:count()} > 1">
|
||||||
|
<f:render partial="Detail/MediaContainer" arguments="{media: newsItem.mediaNonPreviews, settings:settings}" />
|
||||||
|
</f:if>
|
||||||
|
|
||||||
|
<!-- main text -->
|
||||||
|
<div class="news-text-wrap" itemprop="articleBody">
|
||||||
|
<f:format.html>{newsItem.bodytext}</f:format.html>
|
||||||
|
</div>
|
||||||
|
</n:renderMedia>
|
||||||
|
|
||||||
|
<f:if condition="{settings.backPid}">
|
||||||
|
<!-- Link Back -->
|
||||||
|
<div class="news-backlink-wrap">
|
||||||
|
<f:link.page pageUid="{settings.backPid}">
|
||||||
|
<f:translate key="back-link" />
|
||||||
|
</f:link.page>
|
||||||
|
</div>
|
||||||
|
</f:if>
|
||||||
|
|
||||||
|
<f:if condition="{settings.detail.showSocialShareButtons}">
|
||||||
|
<f:comment>
|
||||||
|
Care about the privacy of your readers?
|
||||||
|
Checkout https://typo3.org/extensions/repository/view/rx_shariff
|
||||||
|
and it will be used automatically!
|
||||||
|
</f:comment>
|
||||||
|
<n:extensionLoaded extensionKey="rx_shariff">
|
||||||
|
<f:render partial="Detail/Shariff" />
|
||||||
|
</n:extensionLoaded>
|
||||||
|
</f:if>
|
||||||
|
|
||||||
|
<!-- related things -->
|
||||||
|
<div class="news-related-wrap">
|
||||||
|
<f:comment>
|
||||||
|
Various options exist to fetch different related information:
|
||||||
|
- {newsItem.allRelatedSorted}: all related news, related und related from, sorted by date
|
||||||
|
- {newsItem.related}: all related
|
||||||
|
- {newsItem.relatedSorted}: all related, sorted by date
|
||||||
|
- {newsItem.relatedFrom}: all related from
|
||||||
|
- {newsItem.relatedFromSortedByForeign}: all related from sorted by foreign sorting
|
||||||
|
- {newsItem.relatedFromSorted}: all related from, sorted by date
|
||||||
|
</f:comment>
|
||||||
|
|
||||||
|
<f:if condition="{newsItem.allRelatedSorted}">
|
||||||
|
<!-- Related news records -->
|
||||||
|
<div class="news-related news-related-news">
|
||||||
|
<h4>
|
||||||
|
<f:translate key="related-news" />
|
||||||
|
</h4>
|
||||||
|
<ul>
|
||||||
|
<f:for each="{newsItem.allRelatedSorted}" as="related">
|
||||||
|
<li>
|
||||||
|
<span class="news-related-news-date"><f:format.date format="{f:translate(key:'dateFormat')}">{related.datetime}</f:format.date></span>
|
||||||
|
<n:link newsItem="{related}" settings="{settings}" title="{related.title}">
|
||||||
|
{related.title}
|
||||||
|
</n:link>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</f:for>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</f:if>
|
||||||
|
|
||||||
|
<f:if condition="{newsItem.relatedFiles}">
|
||||||
|
<!-- related files -->
|
||||||
|
<div class="news-related news-related-files">
|
||||||
|
<h4>
|
||||||
|
<f:translate key="related-files" />
|
||||||
|
</h4>
|
||||||
|
<ul>
|
||||||
|
<f:for each="{newsItem.relatedFiles}" as="relatedFile">
|
||||||
|
<li>
|
||||||
|
<span class="news-related-files-link">
|
||||||
|
<a href="{relatedFile.originalResource.publicUrl -> f:format.htmlspecialchars()}" target="_blank">
|
||||||
|
{f:if(condition:relatedFile.originalResource.title, then:relatedFile.originalResource.title, else:relatedFile.originalResource.name)}
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
<span class="news-related-files-size">
|
||||||
|
{relatedFile.originalResource.size -> f:format.bytes()}
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
</f:for>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</f:if>
|
||||||
|
|
||||||
|
<f:if condition="{newsItem.relatedLinks}">
|
||||||
|
<!-- Related links -->
|
||||||
|
<div class="news-related news-related-links">
|
||||||
|
<h4>
|
||||||
|
<f:translate key="related-links" />
|
||||||
|
</h4>
|
||||||
|
<ul>
|
||||||
|
<f:for each="{newsItem.relatedLinks}" as="relatedLink">
|
||||||
|
<li>
|
||||||
|
<f:link.typolink parameter="{relatedLink.uri}" title="{relatedLink.title}" target="{n:targetLink(link:relatedLink.uri)}">{f:if(condition: relatedLink.title, then: relatedLink.title, else: relatedLink.uri)}</f:link.typolink>
|
||||||
|
<f:if condition="{relatedLink.description}"><span>{relatedLink.description}</span></f:if>
|
||||||
|
</li>
|
||||||
|
</f:for>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</f:if>
|
||||||
|
</div>
|
||||||
|
</f:then>
|
||||||
|
<f:else>
|
||||||
|
|
||||||
|
</f:else>
|
||||||
|
</f:if>
|
||||||
|
</f:section>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||||
|
xmlns:n="http://typo3.org/ns/GeorgRinger/News/ViewHelpers"
|
||||||
|
data-namespace-typo3-fluid="true">
|
||||||
|
<f:layout name="General" />
|
||||||
|
<!--
|
||||||
|
=====================
|
||||||
|
Templates/News/List.html
|
||||||
|
-->
|
||||||
|
|
||||||
|
<f:section name="content">
|
||||||
|
<!--TYPO3SEARCH_end-->
|
||||||
|
<f:if condition="{news}">
|
||||||
|
<f:then>
|
||||||
|
<div class="news-list-view news-list-{settings.templateLayout}" id="news-container-{contentObjectData.uid}">
|
||||||
|
<f:if condition="{settings.hidePagination}">
|
||||||
|
<f:then>
|
||||||
|
<f:for each="{news}" as="newsItem" iteration="iterator">
|
||||||
|
<f:render partial="List/Item" arguments="{newsItem: newsItem,settings:settings,iterator:iterator}" />
|
||||||
|
</f:for>
|
||||||
|
</f:then>
|
||||||
|
<f:else>
|
||||||
|
<f:if condition="{settings.list.paginate.insertAbove}">
|
||||||
|
<f:render partial="List/Pagination" arguments="{pagination: pagination.pagination, paginator: pagination.paginator}" />
|
||||||
|
</f:if>
|
||||||
|
<f:if condition="{settings.templateLayout} == 1">
|
||||||
|
<f:then>
|
||||||
|
<f:for each="{pagination.paginator.paginatedItems}" as="newsItem" iteration="iterator">
|
||||||
|
<f:render partial="List/ZahlItem" arguments="{newsItem: newsItem,settings:settings,iterator:iterator}" />
|
||||||
|
</f:for>
|
||||||
|
</f:then>
|
||||||
|
<f:else>
|
||||||
|
<f:for each="{pagination.paginator.paginatedItems}" as="newsItem" iteration="iterator">
|
||||||
|
<f:render partial="List/Item" arguments="{newsItem: newsItem,settings:settings,iterator:iterator}" />
|
||||||
|
</f:for>
|
||||||
|
</f:else>
|
||||||
|
</f:if>
|
||||||
|
<f:if condition="{settings.list.paginate.insertBelow}">
|
||||||
|
<f:render partial="List/Pagination" arguments="{pagination: pagination.pagination, paginator: pagination.paginator}" />
|
||||||
|
</f:if>
|
||||||
|
</f:else>
|
||||||
|
</f:if>
|
||||||
|
</div>
|
||||||
|
</f:then>
|
||||||
|
<f:else>
|
||||||
|
<div class="no-news-found">
|
||||||
|
<f:translate key="list_nonewsfound" />
|
||||||
|
</div>
|
||||||
|
</f:else>
|
||||||
|
</f:if>
|
||||||
|
<!--TYPO3SEARCH_begin-->
|
||||||
|
</f:section>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
|
||||||
|
<f:layout name="Default" />
|
||||||
|
<f:section name="Border">
|
||||||
|
|
||||||
|
<f:cObject typoscriptObjectPath="lib.dynamicContent" data="{pageUid: '{data.uid}', colPos: '3', slide: '{theme.pagelayout.{pagelayout}.colPos.3.slide}'}" />
|
||||||
|
|
||||||
|
</f:section>
|
||||||
|
<f:section name="Main">
|
||||||
|
|
||||||
|
<f:cObject typoscriptObjectPath="lib.dynamicContent" data="{pageUid: '{data.uid}', colPos: '8', slide: '{theme.pagelayout.{pagelayout}.colPos.8.slide}'}" />
|
||||||
|
|
||||||
|
<div class="section section-default">
|
||||||
|
<f:cObject typoscriptObjectPath="lib.dynamicContent" data="{pageUid: '{data.uid}', colPos: '0', slide: '{theme.pagelayout.{pagelayout}.colPos.0.slide}'}" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<f:cObject typoscriptObjectPath="lib.dynamicContent" data="{pageUid: '{data.uid}', colPos: '9', slide: '{theme.pagelayout.{pagelayout}.colPos.9.slide}'}" />
|
||||||
|
|
||||||
|
</f:section>
|
||||||
|
<f:section name="Footer">
|
||||||
|
|
||||||
|
<f:render partial="Structure/FooterContent" arguments="{_all}" />
|
||||||
|
|
||||||
|
</f:section>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||||
|
xmlns:kesearch="http://typo3.org/ns/Tpwd/KeSearch/ViewHelpers" data-namespace-typo3-fluid="true">
|
||||||
|
|
||||||
|
<f:layout name="General" />
|
||||||
|
<f:comment>
|
||||||
|
<!--
|
||||||
|
=====================
|
||||||
|
Templates/SearchForm.html
|
||||||
|
-->
|
||||||
|
</f:comment>
|
||||||
|
<f:section name="content">
|
||||||
|
<form method="get" id="form_kesearch_pi1" name="form_kesearch_pi1" action="{f:uri.page(pageUid: targetpage)}">
|
||||||
|
<f:comment>
|
||||||
|
<!-- Replace the URL with the speaking URL -->
|
||||||
|
</f:comment>
|
||||||
|
<f:if condition="{isEmptySearch} == FALSE ">
|
||||||
|
<f:if condition="{conf.searchWordParameter} == 'tx_kesearch_pi1[sword]'">
|
||||||
|
<f:format.raw>
|
||||||
|
<script>history.replaceState(null, '', '</f:format.raw><kesearch:link keepPiVars="1" uriOnly="1" /><f:format.raw>');</script>
|
||||||
|
</f:format.raw>
|
||||||
|
</f:if>
|
||||||
|
</f:if>
|
||||||
|
|
||||||
|
<fieldset class="kesearch_searchbox">
|
||||||
|
<f:if condition="{lparam}">
|
||||||
|
<input type="hidden" name="L" value="{lparam}" />
|
||||||
|
</f:if>
|
||||||
|
<f:if condition="{mpparam}">
|
||||||
|
<input type="hidden" name="MP" value="{mpparam}" />
|
||||||
|
</f:if>
|
||||||
|
<f:if condition="{typeparam}">
|
||||||
|
<input type="hidden" name="type" value="{typeparam}" />
|
||||||
|
</f:if>
|
||||||
|
|
||||||
|
<div class="kesearchbox">
|
||||||
|
<div class="inputwrapper">
|
||||||
|
<div class="input">
|
||||||
|
<input type="search" id="ke_search_sword" name="tx_kesearch_pi1[sword]"
|
||||||
|
value="{searchword -> f:format.raw()}" placeholder="{searchwordDefault}"
|
||||||
|
{f:if(condition: '{extConf.allowEmptySearch} == 0' , then: 'required' )}
|
||||||
|
minlength="{extConf.searchWordLength}" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="reset hidden"
|
||||||
|
title="{f:translate(key: 'LLL:EXT:ke_search/Resources/Private/Language/locallang_searchbox.xlf:reset_button')}">
|
||||||
|
<svg fill="currentColor" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 512 512">
|
||||||
|
<path
|
||||||
|
d="M437.5 386.6L306.9 256l130.6-130.6c14.1-14.1 14.1-36.8 0-50.9-14.1-14.1-36.8-14.1-50.9 0L256 205.1 125.4 74.5c-14.1-14.1-36.8-14.1-50.9 0-14.1 14.1-14.1 36.8 0 50.9L205.1 256 74.5 386.6c-14.1 14.1-14.1 36.8 0 50.9 14.1 14.1 36.8 14.1 50.9 0L256 306.9l130.6 130.6c14.1 14.1 36.8 14.1 50.9 0 14-14.1 14-36.9 0-50.9z" />
|
||||||
|
</svg>
|
||||||
|
<div class="spacer"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<button class="submit" type="submit"
|
||||||
|
title="{f:translate(key: 'LLL:EXT:ke_search/Resources/Private/Language/locallang_searchbox.xlf:submit')}">
|
||||||
|
<svg fill="currentColor" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 512 512">
|
||||||
|
<path
|
||||||
|
d="M344.5 298c15-23.6 23.8-51.6 23.8-81.7 0-84.1-68.1-152.3-152.1-152.3C132.1 64 64 132.2 64 216.3c0 84.1 68.1 152.3 152.1 152.3 30.5 0 58.9-9 82.7-24.4l6.9-4.8L414.3 448l33.7-34.3-108.5-108.6 5-7.1zm-43.1-166.8c22.7 22.7 35.2 52.9 35.2 85s-12.5 62.3-35.2 85c-22.7 22.7-52.9 35.2-85 35.2s-62.3-12.5-85-35.2c-22.7-22.7-35.2-52.9-35.2-85s12.5-62.3 35.2-85c22.7-22.7 52.9-35.2 85-35.2s62.3 12.5 85 35.2z" />
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<f:if condition="{page}">
|
||||||
|
<input id="kesearchpagenumber" type="hidden" name="tx_kesearch_pi1[page]" value="{page}" />
|
||||||
|
</f:if>
|
||||||
|
<input id="resetFilters" type="hidden" name="tx_kesearch_pi1[resetFilters]" value="0" />
|
||||||
|
<f:if condition="{sortByField}">
|
||||||
|
<input id="sortByField" type="hidden" name="tx_kesearch_pi1[sortByField]" value="{sortByField}" />
|
||||||
|
</f:if>
|
||||||
|
<f:if condition="{sortByDir}">
|
||||||
|
<input id="sortByDir" type="hidden" name="tx_kesearch_pi1[sortByDir]" value="{sortByDir}" />
|
||||||
|
</f:if>
|
||||||
|
|
||||||
|
<f:if condition="{filters}">
|
||||||
|
<div id="kesearch_filters">
|
||||||
|
<f:render partial="Filters"
|
||||||
|
arguments="{conf: conf, numberofresults: numberofresults, resultrows: resultrows, filters: filters}" />
|
||||||
|
</div>
|
||||||
|
</f:if>
|
||||||
|
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
</f:section>
|
||||||
|
|
||||||
|
</html>
|
||||||
BIN
packages/base-design/Resources/Public/Fonts/Geogrotesque-Lt.eot
Normal file
BIN
packages/base-design/Resources/Public/Fonts/Geogrotesque-Lt.eot?
Normal file
4999
packages/base-design/Resources/Public/Fonts/Geogrotesque-Lt.svg
Normal file
|
After Width: | Height: | Size: 299 KiB |
BIN
packages/base-design/Resources/Public/Fonts/Geogrotesque-Lt.ttf
Normal file
BIN
packages/base-design/Resources/Public/Fonts/Geogrotesque-Lt.woff
Normal file
5205
packages/base-design/Resources/Public/Fonts/Geogrotesque-LtIt.svg
Normal file
|
After Width: | Height: | Size: 322 KiB |
BIN
packages/base-design/Resources/Public/Fonts/Geogrotesque-Md.eot
Normal file
4222
packages/base-design/Resources/Public/Fonts/Geogrotesque-Md.svg
Normal file
|
After Width: | Height: | Size: 269 KiB |
BIN
packages/base-design/Resources/Public/Fonts/Geogrotesque-Md.ttf
Normal file
BIN
packages/base-design/Resources/Public/Fonts/Geogrotesque-Md.woff
Normal file
5036
packages/base-design/Resources/Public/Fonts/Geogrotesque-SmBd.svg
Normal file
|
After Width: | Height: | Size: 305 KiB |
5222
packages/base-design/Resources/Public/Fonts/Geogrotesque-SmBdIt.svg
Normal file
|
After Width: | Height: | Size: 326 KiB |
BIN
packages/base-design/Resources/Public/Images/favicon.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
packages/base-design/Resources/Public/Images/logo.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
12
packages/base-design/Resources/Public/JavaScript/Dist/bootstrap-datepicker.min.js
vendored
Normal file
2
packages/base-design/Resources/Public/JavaScript/Dist/jquery-3.7.1.min.js
vendored
Normal file
1166
packages/base-design/Resources/Public/JavaScript/Dist/jquery.powertip.min.js
vendored
Normal file
11
packages/base-design/Resources/Public/JavaScript/matomo.js
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
var _paq = window._paq = window._paq || [];
|
||||||
|
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
|
||||||
|
_paq.push(['trackPageView']);
|
||||||
|
_paq.push(['enableLinkTracking']);
|
||||||
|
(function() {
|
||||||
|
var u="https://matomo.cloonar.com/";
|
||||||
|
_paq.push(['setTrackerUrl', u+'matomo.php']);
|
||||||
|
_paq.push(['setSiteId', '6']);
|
||||||
|
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
||||||
|
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
|
||||||
|
})();
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
(function($) {
|
||||||
|
console.log("test");
|
||||||
|
$('#meta_menu').click(function (e) {
|
||||||
|
console.log("test");
|
||||||
|
$('#meta_menu').toggleClass('opened');
|
||||||
|
});
|
||||||
|
}(jQuery || $));
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
document.querySelectorAll('.f3-widget-paginator a').forEach(function (el) {
|
||||||
|
el.addEventListener('click', newsAjaxHandler);
|
||||||
|
});
|
||||||
|
|
||||||
|
function newsAjaxHandler(e) {
|
||||||
|
var ajaxUrl = e.target.getAttribute('href');
|
||||||
|
if (ajaxUrl !== undefined && ajaxUrl !== '') {
|
||||||
|
e.preventDefault();
|
||||||
|
history.pushState(null, '', ajaxUrl.split('?')[0]);
|
||||||
|
var container = e.target.closest('.frame').getAttribute('id');
|
||||||
|
document.getElementById(container).classList.add('loading');
|
||||||
|
var xhr = new XMLHttpRequest();
|
||||||
|
xhr.open('GET', ajaxUrl, true);
|
||||||
|
xhr.onreadystatechange = function() {
|
||||||
|
if (xhr.readyState === 4 && xhr.status === 200) {
|
||||||
|
var parser = new DOMParser();
|
||||||
|
var result = parser.parseFromString(xhr.responseText, 'text/html');
|
||||||
|
var ajaxDom = result.getElementById(container);
|
||||||
|
ajaxDom.querySelectorAll('.f3-widget-paginator a').forEach(function (el) {
|
||||||
|
el.addEventListener('click', newsAjaxHandler);
|
||||||
|
});
|
||||||
|
document.getElementById(container).replaceWith(ajaxDom);
|
||||||
|
window.scrollTo({
|
||||||
|
top: document.getElementById(container).offsetTop - 111,
|
||||||
|
behavior: 'smooth'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
xhr.send();
|
||||||
|
}
|
||||||
|
}
|
||||||
15
packages/base-design/Resources/Public/JavaScript/search.js
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
const searchButton = document.querySelector(".search-wrap button");
|
||||||
|
searchButton.addEventListener("click", function (e) {
|
||||||
|
if(window.innerWidth < 992) return;
|
||||||
|
e.preventDefault();
|
||||||
|
if (!searchButton.parentElement.parentElement.parentElement.classList.contains('opened')) {
|
||||||
|
searchButton.parentElement.parentElement.parentElement.classList.add('opened');
|
||||||
|
searchButton.parentElement.previousElementSibling.focus();
|
||||||
|
} else {
|
||||||
|
if (searchButton.parentElement.previousElementSibling.value != '') {
|
||||||
|
searchButton.closest('form').submit();
|
||||||
|
} else {
|
||||||
|
searchButton.parentElement.parentElement.parentElement.classList.remove('opened');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
body {
|
||||||
|
font-family: 'sans-serif'
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
:root {
|
||||||
|
--frame-outer-spacing-variant-zero: 0;
|
||||||
|
--frame-outer-spacing-variant-none: 2rem;
|
||||||
|
--frame-outer-spacing-variant-extra-large: 10rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.frame-space-after-none {
|
||||||
|
--frame-outer-spacing-after: var(--frame-outer-spacing-variant-none) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.frame-space-before-none {
|
||||||
|
--frame-outer-spacing-before: var(--frame-outer-spacing-variant-none) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.frame-space-after-zero {
|
||||||
|
--frame-outer-spacing-after: var(--frame-outer-spacing-variant-zero);
|
||||||
|
}
|
||||||
|
|
||||||
|
.frame-space-before-zero {
|
||||||
|
--frame-outer-spacing-before: var(--frame-outer-spacing-variant-zero);
|
||||||
|
}
|
||||||
35
packages/base-design/Resources/Public/Scss/Layout/_text.scss
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
font-weight: 500;
|
||||||
|
color: $primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
.frame-background-primary {
|
||||||
|
color: $white;
|
||||||
|
|
||||||
|
.btn-primary {
|
||||||
|
background: $white;
|
||||||
|
color: $primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
color: $white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.frame-background-light {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
border-radius: 0;
|
||||||
|
border: none;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-primary {
|
||||||
|
color: $white;
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
@import "fonts";
|
||||||
|
@import "footer";
|
||||||
|
@import "form";
|
||||||
|
@import "frame";
|
||||||
|
@import "search";
|
||||||
|
@import "text";
|
||||||
22
packages/base-design/Resources/Public/Scss/main.scss
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
@import "../../../../../vendor/bk2k/bootstrap-package/Resources/Public/Scss/bootstrap5/theme.scss";
|
||||||
|
|
||||||
|
@import "Layout/layout";
|
||||||
|
@import "Elements/elements";
|
||||||
|
|
||||||
|
.frame {
|
||||||
|
&.loading {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
&:before {
|
||||||
|
content: ' ';
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
z-index: 1;
|
||||||
|
background: rgba(255, 255, 255, .5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
32
packages/base-design/composer.json
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"name": "cloonar-typo3/base-design",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Dominik Polakovics",
|
||||||
|
"role": "Developer",
|
||||||
|
"homepage": "https://www.cloonar.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type": "typo3-cms-extension",
|
||||||
|
"description": "Template for Typo3 extending bootstrap package",
|
||||||
|
"homepage": "https://www.cloonar.com",
|
||||||
|
"require": {
|
||||||
|
"bk2k/bootstrap-package": "^15.0"
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Cloonar\\BaseDesign\\": "Classes"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"typo3/cms": {
|
||||||
|
"extension-key": "base_design"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"config": {
|
||||||
|
"allow-plugins": {
|
||||||
|
"typo3/cms-composer-installers": true,
|
||||||
|
"typo3/class-alias-loader": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
20
packages/base-design/ext_emconf.php
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
$EM_CONF[$_EXTKEY] = array(
|
||||||
|
'title' => 'Base Design Package',
|
||||||
|
'description' => 'Base Design Customization.',
|
||||||
|
'category' => 'templates',
|
||||||
|
'autoload' => [
|
||||||
|
'psr-4' => [
|
||||||
|
'Cloonar\\BaseDesign\\' => 'Classes'
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'state' => 'stable',
|
||||||
|
'uploadfolder' => true,
|
||||||
|
'createDirs' => '',
|
||||||
|
'clearCacheOnLoad' => 1,
|
||||||
|
'author' => 'Dominik Polakovics',
|
||||||
|
'author_email' => 'dominik.polakovics@cloonar.com',
|
||||||
|
'author_company' => 'private',
|
||||||
|
'version' => '1.0.0',
|
||||||
|
);
|
||||||
39
packages/base-design/ext_localconf.php
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
<?php
|
||||||
|
if (!defined('TYPO3')) {
|
||||||
|
die('Access denied.');
|
||||||
|
}
|
||||||
|
|
||||||
|
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
|
||||||
|
|
||||||
|
ExtensionManagementUtility::addTypoScriptSetup(
|
||||||
|
'module.tx_form {
|
||||||
|
settings {
|
||||||
|
yamlConfigurations {
|
||||||
|
1681331285 = EXT:base_design/Configuration/Yaml/Finishers/GetResponse.yaml
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}'
|
||||||
|
);
|
||||||
|
|
||||||
|
ExtensionManagementUtility::addPageTSConfig(
|
||||||
|
"@import 'EXT:base_design/Configuration/TSconfig/News.tsconfig'"
|
||||||
|
);
|
||||||
|
|
||||||
|
if (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('form')) {
|
||||||
|
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptSetup(trim('
|
||||||
|
module.tx_form {
|
||||||
|
settings {
|
||||||
|
yamlConfigurations {
|
||||||
|
1727355960 = EXT:base_design/Configuration/Form/Setup.yaml
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
plugin.tx_form {
|
||||||
|
settings {
|
||||||
|
yamlConfigurations {
|
||||||
|
1727355960 = EXT:base_design/Configuration/Form/Setup.yaml
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
'));
|
||||||
|
}
|
||||||
24
renovate.json
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||||
|
"extends": [
|
||||||
|
"config:base"
|
||||||
|
],
|
||||||
|
"enabledManagers": ["composer"],
|
||||||
|
"ignoreTests": true,
|
||||||
|
"lockFileMaintenance": {
|
||||||
|
"enabled": true,
|
||||||
|
"automerge": true
|
||||||
|
},
|
||||||
|
"packageRules": [
|
||||||
|
{
|
||||||
|
"matchPackagePrefixes": ["typo3/cms-"],
|
||||||
|
"groupName": "typo3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matchUpdateTypes": ["minor", "patch", "pin", "digest"],
|
||||||
|
"matchCurrentVersion": "!/^0/",
|
||||||
|
"automerge": true,
|
||||||
|
"automergeType": "branch"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||