From eba8de0dd7c7baac6dba414a24ca1515bcbe4b8c Mon Sep 17 00:00:00 2001 From: Alexander Bigga Date: Fri, 24 Sep 2021 17:35:36 +0200 Subject: [PATCH 1/2] Feature to use content elements like in news extensions --- Classes/Domain/Model/Event.php | 98 +++- Classes/Domain/Model/TtContent.php | 524 ++++++++++++++++++ .../TCA/tx_slubevents_domain_model_event.php | 33 +- Configuration/TypoScript/setup.typoscript | 8 + .../Private/Language/de.locallang_db.xlf | 6 +- Resources/Private/Language/locallang_db.xlf | 3 + Resources/Private/Templates/Event/Show.html | 5 + ext_tables.sql | 9 + ext_typoscript_setup.txt | 18 + 9 files changed, 687 insertions(+), 17 deletions(-) create mode 100644 Classes/Domain/Model/TtContent.php create mode 100644 ext_typoscript_setup.txt diff --git a/Classes/Domain/Model/Event.php b/Classes/Domain/Model/Event.php index 5abb8254..3bdaaaee 100755 --- a/Classes/Domain/Model/Event.php +++ b/Classes/Domain/Model/Event.php @@ -100,6 +100,12 @@ class Event extends AbstractEntity */ protected $description; + /** + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Slub\SlubEvents\Domain\Model\TtContent> + * @TYPO3\CMS\Extbase\Annotation\ORM\Lazy + */ + protected $contentElements; + /** * Minimum of Subscribers * @@ -229,6 +235,36 @@ class Event extends AbstractEntity */ protected $recurringEndDateTime; + /** + * Event constructor. + */ + public function __construct() + { + //Do not remove the next line: It would break the functionality + $this->initStorageObjects(); + } + + /** + * Initializes all Tx_Extbase_Persistence_ObjectStorage properties. + * + * @return void + */ + protected function initStorageObjects() + { + /** + * Do not modify this method! + * It will be rewritten on each save in the extension builder + * You may modify the constructor of this class instead + */ + $this->categories = new ObjectStorage(); + + $this->contentElements = new ObjectStorage(); + + $this->discipline = new ObjectStorage(); + + $this->subscribers = new ObjectStorage(); + } + /** * Returns hidden * @@ -310,31 +346,63 @@ public function setDescription($description) } /** - * Event constructor. + * Get content elements + * + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage */ - public function __construct() + public function getContentElements() { - //Do not remove the next line: It would break the functionality - $this->initStorageObjects(); + return $this->contentElements; } /** - * Initializes all Tx_Extbase_Persistence_ObjectStorage properties. + * Set content element list * - * @return void + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage $contentElements content elements */ - protected function initStorageObjects() + public function setContentElements($contentElements) { - /** - * Do not modify this method! - * It will be rewritten on each save in the extension builder - * You may modify the constructor of this class instead - */ - $this->categories = new ObjectStorage(); + $this->contentElements = $contentElements; + } - $this->discipline = new ObjectStorage(); + /** + * Get id list of content elements + * + * @return string + */ + public function getContentElementIdList() + { + return $this->getIdOfContentElements(); + } - $this->subscribers = new ObjectStorage(); + /** + * Get translated id list of content elements + * + * @return string + */ + public function getTranslatedContentElementIdList() + { + return $this->getIdOfContentElements(false); + } + + /** + * Collect id list + * + * @param bool $original + * @return string + */ + protected function getIdOfContentElements($original = true) + { + $idList = []; + $contentElements = $this->getContentElements(); + if ($contentElements) { + foreach ($this->getContentElements() as $contentElement) { + if ($contentElement->getColPos() >= 0) { + $idList[] = $original ? $contentElement->getUid() : $contentElement->_getProperty('_localizedUid'); + } + } + } + return implode(',', $idList); } /** diff --git a/Classes/Domain/Model/TtContent.php b/Classes/Domain/Model/TtContent.php new file mode 100644 index 00000000..d8f7b605 --- /dev/null +++ b/Classes/Domain/Model/TtContent.php @@ -0,0 +1,524 @@ +crdate; + } + + /** + * @param \DateTime $crdate + */ + public function setCrdate($crdate) + { + $this->crdate = $crdate; + } + + /** + * @return \DateTime + */ + public function getTstamp() + { + return $this->tstamp; + } + + /** + * @param \DateTime $tstamp + */ + public function setTstamp($tstamp) + { + $this->tstamp = $tstamp; + } + + /** + * @return string + */ + public function getCType() + { + return $this->CType; + } + + /** + * @param $ctype + */ + public function setCType($ctype) + { + $this->CType = $ctype; + } + + /** + * @return string + */ + public function getHeader() + { + return $this->header; + } + + /** + * @param $header + */ + public function setHeader($header) + { + $this->header = $header; + } + + /** + * @return string + */ + public function getHeaderPosition() + { + return $this->headerPosition; + } + + /** + * @param $headerPosition + */ + public function setHeaderPosition($headerPosition) + { + $this->headerPosition = $headerPosition; + } + + /** + * @return string + */ + public function getBodytext() + { + return $this->bodytext; + } + + /** + * @param $bodytext + */ + public function setBodytext($bodytext) + { + $this->bodytext = $bodytext; + } + + /** + * Get the colpos + * + * @return int + */ + public function getColPos() + { + return (int)$this->colPos; + } + + /** + * Set colpos + * + * @param int $colPos + */ + public function setColPos($colPos) + { + $this->colPos = $colPos; + } + + /** + * @return string + */ + public function getImage() + { + return $this->image; + } + + /** + * @param $image + */ + public function setImage($image) + { + $this->image = $image; + } + + /** + * @return int + */ + public function getImagewidth() + { + return $this->imagewidth; + } + + /** + * @param $imagewidth + */ + public function setImagewidth($imagewidth) + { + $this->imagewidth = $imagewidth; + } + + /** + * @return int + */ + public function getImageorient() + { + return $this->imageorient; + } + + /** + * @param $imageorient + */ + public function setImageorient($imageorient) + { + $this->imageorient = $imageorient; + } + + /** + * @return string + */ + public function getImagecaption() + { + return $this->imagecaption; + } + + /** + * @param $imagecaption + */ + public function setImagecaption($imagecaption) + { + $this->imagecaption = $imagecaption; + } + + /** + * @return int + */ + public function getImagecols() + { + return $this->imagecols; + } + + /** + * @param $imagecols + */ + public function setImagecols($imagecols) + { + $this->imagecols = $imagecols; + } + + /** + * @return int + */ + public function getImageborder() + { + return $this->imageborder; + } + + /** + * @param $imageborder + */ + public function setImageborder($imageborder) + { + $this->imageborder = $imageborder; + } + + /** + * @return string + */ + public function getMedia() + { + return $this->media; + } + + /** + * @param $media + */ + public function setMedia($media) + { + $this->media = $media; + } + + /** + * @return string + */ + public function getLayout() + { + return $this->layout; + } + + /** + * @param $layout + */ + public function setLayout($layout) + { + $this->layout = $layout; + } + + /** + * @return int + */ + public function getCols() + { + return $this->cols; + } + + /** + * @param $cols + */ + public function setCols($cols) + { + $this->cols = $cols; + } + + /** + * @return string + */ + public function getSubheader() + { + return $this->subheader; + } + + /** + * @param $subheader + */ + public function setSubheader($subheader) + { + $this->subheader = $subheader; + } + + /** + * @return string + */ + public function getHeaderLink() + { + return $this->headerLink; + } + + /** + * @param $headerLink + */ + public function setHeaderLink($headerLink) + { + $this->headerLink = $headerLink; + } + + /** + * @return string + */ + public function getImageLink() + { + return $this->imageLink; + } + + /** + * @param $imageLink + */ + public function setImageLink($imageLink) + { + $this->imageLink = $imageLink; + } + + /** + * @return string + */ + public function getImageZoom() + { + return $this->imageZoom; + } + + /** + * @param $imageZoom + */ + public function setImageZoom($imageZoom) + { + $this->imageZoom = $imageZoom; + } + + /** + * @return string + */ + public function getAltText() + { + return $this->altText; + } + + /** + * @param $altText + */ + public function setAltText($altText) + { + $this->altText = $altText; + } + + /** + * @return string + */ + public function getTitleText() + { + return $this->titleText; + } + + /** + * @param $titleText + */ + public function setTitleText($titleText) + { + $this->titleText = $titleText; + } + + /** + * @return string + */ + public function getHeaderLayout() + { + return $this->headerLayout; + } + + /** + * @param $headerLayout + */ + public function setHeaderLayout($headerLayout) + { + $this->headerLayout = $headerLayout; + } + + /** + * @return string + */ + public function getListType() + { + return $this->listType; + } + + /** + * @param $listType + */ + public function setListType($listType) + { + $this->listType = $listType; + } +} diff --git a/Configuration/TCA/tx_slubevents_domain_model_event.php b/Configuration/TCA/tx_slubevents_domain_model_event.php index 3111884f..6fa0a24f 100755 --- a/Configuration/TCA/tx_slubevents_domain_model_event.php +++ b/Configuration/TCA/tx_slubevents_domain_model_event.php @@ -25,7 +25,7 @@ 'iconfile' => 'EXT:slub_events/Resources/Public/Icons/tx_slubevents_domain_model_event.gif', ], 'interface' => [ - 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, title, start_date_time, all_day, end_date_time, sub_end_date_time, teaser, description, min_subscriber, max_subscriber, audience, sub_end_date_info_sent, no_search, genius_bar, parent, recurring, recurring_options, recurring_end_date_time, cancelled, categories, subscribers, location, discipline, contact', + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, title, start_date_time, all_day, end_date_time, sub_end_date_time, teaser, description, content_elements, min_subscriber, max_subscriber, audience, sub_end_date_info_sent, no_search, genius_bar, parent, recurring, recurring_options, recurring_end_date_time, cancelled, categories, subscribers, location, discipline, contact', ], 'types' => [ // Single event @@ -38,6 +38,8 @@ 'location,' . 'teaser,' . 'description,' . + '--div--;' . $LL . 'tx_slubevents_domain_model_event.content_elements,' . + 'content_elements,' . '--div--;Anmeldebedingungen,' . 'contact,' . 'external_registration,' . @@ -314,6 +316,35 @@ 'enableRichtext' => true, ], ], + 'content_elements' => [ + 'exclude' => true, + 'label' => $LL . 'tx_slubevents_domain_model_event.content_elements', + 'config' => [ + 'type' => 'inline', + 'allowed' => 'tt_content', + 'foreign_table' => 'tt_content', + 'foreign_sortby' => 'sorting', + 'foreign_field' => 'tx_slubevents_related_content', + 'minitems' => 0, + 'maxitems' => 99, + 'appearance' => [ + 'collapseAll' => true, + 'expandSingle' => true, + 'levelLinksPosition' => 'bottom', + 'useSortable' => true, + 'showPossibleLocalizationRecords' => true, + 'showRemovedLocalizationRecords' => true, + 'showAllLocalizationLink' => true, + 'showSynchronizationLink' => true, + 'enabledControls' => [ + 'info' => false, + ] + ], + 'behaviour' => [ + 'allowLanguageSynchronization' => true, + ], + ] + ], 'min_subscriber' => [ 'displayCond' => 'FIELD:external_registration:REQ:false', 'exclude' => 0, diff --git a/Configuration/TypoScript/setup.typoscript b/Configuration/TypoScript/setup.typoscript index dfabfb45..159505b5 100755 --- a/Configuration/TypoScript/setup.typoscript +++ b/Configuration/TypoScript/setup.typoscript @@ -77,6 +77,14 @@ plugin.tx_slubevents { } } +# Rendering of content elements in detail view +lib.tx_slubevents.contentElementRendering = RECORDS +lib.tx_slubevents.contentElementRendering { + tables = tt_content + source.current = 1 + dontCheckPid = 1 +} + module.tx_slubevents < plugin.tx_slubevents module.tx_slubevents { # view { diff --git a/Resources/Private/Language/de.locallang_db.xlf b/Resources/Private/Language/de.locallang_db.xlf index 36e6e40f..73fa0678 100755 --- a/Resources/Private/Language/de.locallang_db.xlf +++ b/Resources/Private/Language/de.locallang_db.xlf @@ -105,6 +105,10 @@ + + + + @@ -303,4 +307,4 @@ - \ No newline at end of file + diff --git a/Resources/Private/Language/locallang_db.xlf b/Resources/Private/Language/locallang_db.xlf index 3380ffc4..580bd27a 100755 --- a/Resources/Private/Language/locallang_db.xlf +++ b/Resources/Private/Language/locallang_db.xlf @@ -80,6 +80,9 @@ Categories + + Contente Elements + Contact diff --git a/Resources/Private/Templates/Event/Show.html b/Resources/Private/Templates/Event/Show.html index 64c571db..44796d7b 100644 --- a/Resources/Private/Templates/Event/Show.html +++ b/Resources/Private/Templates/Event/Show.html @@ -14,6 +14,11 @@

{event.title}

{event.description} + + + {event.contentElementIdList} + +
diff --git a/ext_tables.sql b/ext_tables.sql index 1a11a3b3..fac95f60 100755 --- a/ext_tables.sql +++ b/ext_tables.sql @@ -14,6 +14,7 @@ CREATE TABLE tx_slubevents_domain_model_event ( sub_end_date_time int(11) DEFAULT '0' NOT NULL, teaser text NOT NULL, description text NOT NULL, + content_elements int(11) DEFAULT '0' NOT NULL, min_subscriber int(11) DEFAULT '0' NOT NULL, max_subscriber int(11) DEFAULT '0' NOT NULL, max_number int(11) DEFAULT '0' NOT NULL, @@ -302,3 +303,11 @@ CREATE TABLE tx_slubevents_event_discipline_mm ( KEY uid_local (uid_local), KEY uid_foreign (uid_foreign) ); + +# +# Table structure for table 'tt_content' +# +CREATE TABLE tt_content ( + tx_slubevents_related_content int(11) DEFAULT '0' NOT NULL, + KEY index_eventscontent (tx_slubevents_related_content) +); diff --git a/ext_typoscript_setup.txt b/ext_typoscript_setup.txt new file mode 100644 index 00000000..15135f25 --- /dev/null +++ b/ext_typoscript_setup.txt @@ -0,0 +1,18 @@ + +# ============================================== +# Persistence object mapping configuration +# ============================================== +config.tx_extbase.persistence.classes { + + Slub\SlubEvents\Domain\Model\TtContent { + mapping { + tableName = tt_content + columns { + altText.mapOnProperty = altText + titleText.mapOnProperty = titleText + colPos.mapOnProperty = colPos + CType.mapOnProperty = CType + } + } + } +} From 50032b720620dc1cdb4eb751969b58df975c5743 Mon Sep 17 00:00:00 2001 From: Alexander Bigga Date: Tue, 28 Sep 2021 10:30:18 +0200 Subject: [PATCH 2/2] Add new field for social media image. --- Classes/Domain/Model/Event.php | 36 ++++++- Classes/ViewHelpers/MetaTagViewHelper.php | 94 +++++++++++++++++++ .../TCA/tx_slubevents_domain_model_event.php | 24 ++++- ...g_csh_tx_slubevents_domain_model_event.xlf | 8 +- .../Private/Language/de.locallang_db.xlf | 4 + ...g_csh_tx_slubevents_domain_model_event.xlf | 9 +- Resources/Private/Language/locallang_db.xlf | 9 +- .../Private/Partials/Event/Opengraph.html | 22 +++++ Resources/Private/Templates/Event/Show.html | 4 +- ext_tables.sql | 1 + 10 files changed, 197 insertions(+), 14 deletions(-) create mode 100644 Classes/ViewHelpers/MetaTagViewHelper.php create mode 100644 Resources/Private/Partials/Event/Opengraph.html diff --git a/Classes/Domain/Model/Event.php b/Classes/Domain/Model/Event.php index 3bdaaaee..76eecbf1 100755 --- a/Classes/Domain/Model/Event.php +++ b/Classes/Domain/Model/Event.php @@ -106,24 +106,32 @@ class Event extends AbstractEntity */ protected $contentElements; + /** + * Fal media items + * + * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + protected $image; + + /** * Minimum of Subscribers * - * @var integer + * @var int */ protected $minSubscriber = 0; /** * Maximum of Subscribers * - * @var integer + * @var int */ protected $maxSubscriber = 0; /** * Maximum amount of Persons per Subscription * - * @var integer + * @var int */ protected $maxNumber = 0; @@ -131,7 +139,7 @@ class Event extends AbstractEntity * Target Audience * * @Extbase\Validate("NotEmpty") - * @var integer + * @var int */ protected $audience = 0; @@ -405,6 +413,26 @@ protected function getIdOfContentElements($original = true) return implode(',', $idList); } + /** + * Returns the image + * + * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference $image + */ + public function getImage() + { + return $this->image; + } + + /** + * Sets the image + * + * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $image + */ + public function setImage($image) + { + $this->image = $image; + } + /** * Returns the parent * diff --git a/Classes/ViewHelpers/MetaTagViewHelper.php b/Classes/ViewHelpers/MetaTagViewHelper.php new file mode 100644 index 00000000..397cd0ab --- /dev/null +++ b/Classes/ViewHelpers/MetaTagViewHelper.php @@ -0,0 +1,94 @@ + + * + * + * + * + * + * + * # Example: Force the attribute "name" + * + * + * + * + * + * + */ +class MetaTagViewHelper extends AbstractViewHelper +{ + use CompileWithRenderStatic; + + /** + * Arguments initialization + * + */ + public function initializeArguments() + { + $this->registerArgument('property', 'string', 'Property of meta tag', false, '', false); + $this->registerArgument('name', 'string', 'Content of meta tag using the name attribute', false, '', false); + $this->registerArgument('content', 'string', 'Content of meta tag', true, null, false); + $this->registerArgument('useCurrentDomain', 'boolean', 'Use current domain', false, false); + $this->registerArgument('forceAbsoluteUrl', 'boolean', 'Force absolut domain', false, false); + } + + public static function renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext) + { + // Skip if current record is part of tt_content CType shortcut + if (!empty($GLOBALS['TSFE']->recordRegister) + && is_array($GLOBALS['TSFE']->recordRegister) + && strpos(array_keys($GLOBALS['TSFE']->recordRegister)[0], 'tt_content:') !== false + && !empty($GLOBALS['TSFE']->currentRecord) + && strpos($GLOBALS['TSFE']->currentRecord, 'tx_news_domain_model_news:') !== false + ) { + return; + } + + $useCurrentDomain = $arguments['useCurrentDomain']; + $forceAbsoluteUrl = $arguments['forceAbsoluteUrl']; + $content = (string)$arguments['content']; + + // set current domain + if ($useCurrentDomain) { + $content = GeneralUtility::getIndpEnv('TYPO3_REQUEST_URL'); + } + + // prepend current domain + if ($forceAbsoluteUrl) { + $parsedPath = parse_url($content); + if (is_array($parsedPath) && !isset($parsedPath['host'])) { + $content = + rtrim(GeneralUtility::getIndpEnv('TYPO3_SITE_URL'), '/') + . '/' + . ltrim($content, '/'); + } + } + + if ($content !== '') { + $pageRenderer = GeneralUtility::makeInstance(PageRenderer::class); + if ($arguments['property']) { + $pageRenderer->setMetaTag('property', $arguments['property'], $content); + } elseif ($arguments['name']) { + $pageRenderer->setMetaTag('property', $arguments['name'], $content); + } + } + } +} diff --git a/Configuration/TCA/tx_slubevents_domain_model_event.php b/Configuration/TCA/tx_slubevents_domain_model_event.php index 6fa0a24f..bbf8cacf 100755 --- a/Configuration/TCA/tx_slubevents_domain_model_event.php +++ b/Configuration/TCA/tx_slubevents_domain_model_event.php @@ -25,7 +25,7 @@ 'iconfile' => 'EXT:slub_events/Resources/Public/Icons/tx_slubevents_domain_model_event.gif', ], 'interface' => [ - 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, title, start_date_time, all_day, end_date_time, sub_end_date_time, teaser, description, content_elements, min_subscriber, max_subscriber, audience, sub_end_date_info_sent, no_search, genius_bar, parent, recurring, recurring_options, recurring_end_date_time, cancelled, categories, subscribers, location, discipline, contact', + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, title, start_date_time, all_day, end_date_time, sub_end_date_time, teaser, description, content_elements, image, min_subscriber, max_subscriber, audience, sub_end_date_info_sent, no_search, genius_bar, parent, recurring, recurring_options, recurring_end_date_time, cancelled, categories, subscribers, location, discipline, contact', ], 'types' => [ // Single event @@ -40,6 +40,7 @@ 'description,' . '--div--;' . $LL . 'tx_slubevents_domain_model_event.content_elements,' . 'content_elements,' . + 'image,' . '--div--;Anmeldebedingungen,' . 'contact,' . 'external_registration,' . @@ -345,6 +346,27 @@ ], ] ], + 'image' => [ + 'exclude' => true, + 'label' => $LL . 'tx_slubevents_domain_model_event.image', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'image', + [ + 'maxitems' => 1, + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference', + 'fileUploadAllowed' => false + ], + 'foreign_match_fields' => [ + 'fieldname' => 'image', + 'tablenames' => 'tx_slubevents_domain_model_event', + 'table_local' => 'sys_file', + ], + 'default' => 0, + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ) + ], 'min_subscriber' => [ 'displayCond' => 'FIELD:external_registration:REQ:false', 'exclude' => 0, diff --git a/Resources/Private/Language/de.locallang_csh_tx_slubevents_domain_model_event.xlf b/Resources/Private/Language/de.locallang_csh_tx_slubevents_domain_model_event.xlf index 082d7626..07d4b4b0 100755 --- a/Resources/Private/Language/de.locallang_csh_tx_slubevents_domain_model_event.xlf +++ b/Resources/Private/Language/de.locallang_csh_tx_slubevents_domain_model_event.xlf @@ -67,7 +67,7 @@ Is this a recurring event? On activating this option you configure the recurring interval and create child events. - Ist dies eine Termin-Serie? + Ist dies eine Termin-Serie? Mit Aktivierung dieser Option können Sie die Wiederholungseinstellungen bearbeiten und legen die Einzelveranstaltungen der Serie an. @@ -110,6 +110,10 @@ Mit Aktivierung dieser Option können Sie die Wiederholungseinstellungen bearbei Title Titel der Veranstaltung + + Image to be used in social media sharing + Bild zur Verwendung beim Teilen in Social Media + - \ No newline at end of file + diff --git a/Resources/Private/Language/de.locallang_db.xlf b/Resources/Private/Language/de.locallang_db.xlf index 73fa0678..e1533df3 100755 --- a/Resources/Private/Language/de.locallang_db.xlf +++ b/Resources/Private/Language/de.locallang_db.xlf @@ -149,6 +149,10 @@ + + + + diff --git a/Resources/Private/Language/locallang_csh_tx_slubevents_domain_model_event.xlf b/Resources/Private/Language/locallang_csh_tx_slubevents_domain_model_event.xlf index cf29a396..db85eb21 100755 --- a/Resources/Private/Language/locallang_csh_tx_slubevents_domain_model_event.xlf +++ b/Resources/Private/Language/locallang_csh_tx_slubevents_domain_model_event.xlf @@ -74,15 +74,18 @@ Title - + Is this a recurring event? On activating this option you configure the recurring interval and create child events. - + This event get's cloned multiple times depending on the recurring settings below. - + The recurring ends on the given date. + + Image to be used in social media sharing + diff --git a/Resources/Private/Language/locallang_db.xlf b/Resources/Private/Language/locallang_db.xlf index 580bd27a..deb6a193 100755 --- a/Resources/Private/Language/locallang_db.xlf +++ b/Resources/Private/Language/locallang_db.xlf @@ -107,16 +107,19 @@ External Registration Link + + Event Image + Knowledge Bar - + Parent Event - + Recurring Event - + Recurring Events diff --git a/Resources/Private/Partials/Event/Opengraph.html b/Resources/Private/Partials/Event/Opengraph.html new file mode 100644 index 00000000..bfe5e3ee --- /dev/null +++ b/Resources/Private/Partials/Event/Opengraph.html @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + diff --git a/Resources/Private/Templates/Event/Show.html b/Resources/Private/Templates/Event/Show.html index 44796d7b..604e8ecb 100644 --- a/Resources/Private/Templates/Event/Show.html +++ b/Resources/Private/Templates/Event/Show.html @@ -6,7 +6,9 @@
-

{event.title}

+ + +

{event.title}

, diff --git a/ext_tables.sql b/ext_tables.sql index fac95f60..2d76fea5 100755 --- a/ext_tables.sql +++ b/ext_tables.sql @@ -14,6 +14,7 @@ CREATE TABLE tx_slubevents_domain_model_event ( sub_end_date_time int(11) DEFAULT '0' NOT NULL, teaser text NOT NULL, description text NOT NULL, + image int(11) unsigned DEFAULT '0', content_elements int(11) DEFAULT '0' NOT NULL, min_subscriber int(11) DEFAULT '0' NOT NULL, max_subscriber int(11) DEFAULT '0' NOT NULL,