TYPO3 8.7 - TypoScript и разные наработки

09 сентября 2017, 00:56

TYPO3 пользуется бешеной популярностью в Европе (по моему мнению не заслужено) и в частности в Германии. Собой это творение инженерной мысли представляет фреймворк для корпоративных сайтов. По работе пришлось погрузиться в его недры. Многое кажется до абсурда перекручено, движок очень не поворотливый, каждое действие требует частого обновления кэша, которое длится в течении минуты. А сам TypoScript отбивает всё желание что-то творить. Тем не менее пока работы с Laravel и MODX в Германии я не нашёл приходится разбираться и погружаться в дебри. Хочется заметить, что документация там очень скудная, поиск какой-либо информации на русском датирована аж 2011ого года. Это самое свежее что я находил. Видимо русскоязычное сообщество отмело TYPO3 за необоснованную сложность работы. На этом лирическое отступление хочу закончить.

Как-нибудь сяду и с нуля попробую создать простенький сайтик, показав как это не просто. Хотя на практике в одной довольно известной (в узких кругах) веб-студии, делал вот такую вот поделку.

Что примечательно, систему ЧПУ написал русский программист =)

Здесь будет свалка всего того, что мне в последствии пригодится при дальнейшей работе с этим движком, наверное самая ценная часть из этого, так это сам TypoScript (основа основ).

Plugins

После установки ke_ search

News
Из папки с плагином, который находится по адресу:

/html/typo3/typo3conf/ext/news/Resources/Private

перенести нужные папки в папку

/fileadmin/templates/ext/news/

и затем добавить в файл constants.ts пути по умолчанию

plugin.tx_news.view.templateRootPath = fileadmin/templates/news/Templates
plugin.tx_news.view.partialRootPath = fileadmin/templates/ext/news/Partials
plugin.tx_news.view.layoutRootPath = fileadmin/templates/ext/news/Layouts

Debug mode
<f:debug>{newsItem}</f:debug>


Default setup.ts (TypoScript)

config.simulateStaticDocuments = 0
	config.baseURL = http://typo3.p392460.webspaceconfig.de/
	config.tx_realurl_enable = 1
	
    page = PAGE
	page {
		typeNum = 0
		config.doctype = html5
		meta.author.field = author
		meta.description.field = description
		meta.viewport = width=device-width, initial-scale=1
		
		includeCSS {
			f1 = fileadmin/templates/main/css/bootstrap.min.css
			f2 = fileadmin/templates/main/css/font-awesome.min.css
			f3 = fileadmin/templates/main/css/style.css
			f4 = https://fonts.googleapis.com/css?family=Open+Sans:400,700
		}
		
		includeJS {
			f1 = fileadmin/templates/main/js/jquery.min.js
			f2 = fileadmin/templates/main/js/bootstrap.min.js
			f3 = fileadmin/templates/main/js/main.js
		}
		
		10 = FLUIDTEMPLATE
		10{
			file = fileadmin/templates/main/index.html
			variables.mainmenu = HMENU
			variables.mainmenu {
				wrap=|
				special = directory
				special.value = 6
				1 = TMENU
				1 {
					wrap = <div class="menu menuMain">|</div>
					expAll = 1

					NO {
						stdWrap.cObject = TEXT
						stdWrap.cObject {
							value.field = title
							stdWrap.wrap = <span>|</span>
						}
						stdWrap.postCObject = TEXT 
						stdWrap.postCObject.field = subtitle 

						ATagParams = class="class" alt="{field:subtitle}" title="{field:title}"
						ATagParams.insertData = 1
						wrapItemAndSub = <div class="col-md-3 col-sm-6 col-xs-12 col-md-height">|</div>
					}

					CUR < .NO
					CUR = 1
					CUR {
						wrapItemAndSub = <div class="col-md-3 col-sm-6 col-xs-12 col-md-height active current">|</div>
						stdWrap.postCObject >
					}
					
					ACT < .NO
					ACT = 1
					ACT {
						wrapItemAndSub = <div class="col-md-3 col-sm-6 col-xs-12 col-md-height active">|</div>
						stdWrap.postCObject >
					}
				}
				
				2 < .1
				2 {
					wrap = <ul>|</ul>
					NO {
						wrapItemAndSub = <li>|</li>
						stdWrap.postCObject >
					}
					
					CUR {
						wrapItemAndSub = <li class="active current">|</li>
					}

					ACT {
						wrapItemAndSub = <li class="active">|</li>
					}
				}
			}

			variables.secondmenu < .variables.mainmenu
			variables.secondmenu {
				1 {
					NO {
						stdWrap.postCObject >
					}
				}
			}

			variables.footermenu = HMENU
			variables.footermenu {
				special = directory
				special.value = 12
				1 = TMENU
				1 {
					wrap = <ul class="col-md-9 menu">|</ul>
					expAll = 0
					NO.allWrap = <li>|</li>
					RO < .NO
					RO = 0
					linkWrap = <span>|</span>
					CUR < .NO
					CUR = 0
					CUR.allWrap = <li class="active">|</li>
					ACT < .CUR
				}
			}
			
			variables.products = HMENU
			variables.products {
				special = directory
				special.value = 8
				1 = TMENU
				1 {
					wrap = <ul class="col-md-9 menu">|</ul>
					expAll = 0
					NO.allWrap = <li>|</li>
					RO < .NO
					RO = 0
					linkWrap = <span>|</span>
					CUR < .NO
					CUR = 0
					CUR.allWrap = <li class="active">|</li>
					ACT < .CUR
				}
			}
			variables.maincontent = CONTENT
			variables.maincontent < styles.content.get
			variables.maincontent {
				table = tt_content
				select {
					where = colPos = 0
					orderBy = sorting
					languageField = sys_language_uid
				}
			}
			
			variables.rightside = CONTENT
			variables.rightside < styles.content.get
			variables.rightside {
				table = tt_content
				select {
					where = colPos = 1
					orderBy = sorting
					languageField = sys_language_uid
				}
			}
			
			variables.search = CONTENT
			variables.search < styles.content.get
			variables.search {
				colPos = 0
			}
		}
	}
	lib.searchbox_plugin = COA_INT
	lib.searchbox_plugin {
		10 < plugin.tx_kesearch_pi1

		10.resultPage = 15
		10.cssFile = EXT:ke_search/res/ke_search_pi1.css
		10.loadFlexformsFromOtherCE = 24
	}
	lib.searchbox_html.searchbox = COA
	lib.searchbox_html.searchbox {
		10.loadFlexformsFromOtherCE = 29
		10 = LOAD_REGISTER
		10 {
			url.cObject = TEXT
			url.cObject {
				typolink.parameter = 29
				typolink.returnLast = url
			}
		}
		20 = TEXT
		20 {
			value (
			<form method="get" id="form_kesearch_searchfield" name="form_kesearch_searchfield" action="{register:url}">
				<input type="text" id="ke_search_searchfield_sword" name="tx_kesearch_pi1[sword]" placeholder="Was suchen Sie?" />
				<input type="submit" id="ke_search_searchfield_submit" alt="Find" value="// Suchen" />
			</form>
			)
			insertData = 1
		}
	}
	
	lib.header = TEXT
	lib.header {
		data = page:title
		override {
			data = page:title
			if.isTrue.data = page:title
		}
	}
	
	lib.products = COA
	lib.products {
		10 = HMENU
		10 {
			special = directory
			special.data = TSFE:id

			1 = TMENU
			1 {
				NO {
					stdWrap.cObject = COA
					stdWrap.cObject {
						10 = TEXT
						10 {
							field = title
							wrap = <span class="headline">|</span>
						}
						
						20 = FILES
						20 {
							references {
								table = pages
								uid.data = uid
								fieldName = media
							}
							renderObj = IMAGE
							renderObj.file.import.data = file:current:publicUrl
						}
					}
					
					wrapItemAndSub = <li class="product col-md-2 col-sm-3 col-xs-6">|</li>
				}
			}
			
			wrap = <ul>|</ul>
		}
	}

	lib.breadcrumb=COA
	lib.breadcrumb {
		10 = TEXT
		10 {
			typolink.parameter = 1
			wrap = <li>|</li>
		}
		
		20 = HMENU
		20 {
			special = rootline
			special.range = 0|-1
			1 = TMENU
			1.noBlur = 1
			1.target = _self
			1.NO {
				stdWrap.field = title
				ATagTitle.field = nav_title // title
				allWrap = <li>|</li>
			}
			1.CUR = 1
			1.CUR {
				stdWrap.field = title
				doNotLinkIt = 1
				allWrap = <li>|</li>
			}
		}
		
		wrap = <ul>|</ul>
	}
	
	plugin.tx_news {
        settings {
            link {
                skipControllerAndAction = 1
            }
        }
	}
	
	plugin.tx_products_products {
        settings {
            link {
                skipControllerAndAction = 1
            }
        }
	}
	
	plugin.tx_kesearch_pi1.templateRootPaths.2 = {$plugin.tx_kesearch.view.templateRootPath}
	plugin.tx_kesearch_pi1.partialRootPaths.2 = {$plugin.tx_kesearch.view.partialRootPath}
	plugin.tx_kesearch_pi1.layoutRootPaths.2 = {$plugin.tx_kesearch.view.layoutRootPath}
	
	plugin.tx_kesearch_pi2.templateRootPaths.2 = {$plugin.tx_kesearch.view.templateRootPath}
	plugin.tx_kesearch_pi2.partialRootPaths.2 = {$plugin.tx_kesearch.view.partialRootPath}
	plugin.tx_kesearch_pi2.layoutRootPaths.2 = {$plugin.tx_kesearch.view.layoutRootPath}
	
	plugin.tx_kesearch_pi3.templateRootPaths.2 = {$plugin.tx_kesearch.view.templateRootPath}
	plugin.tx_kesearch_pi3.partialRootPaths.2 = {$plugin.tx_kesearch.view.partialRootPath}
	plugin.tx_kesearch_pi3.layoutRootPaths.2 = {$plugin.tx_kesearch.view.layoutRootPath}

second.ts

page {
		10.file = fileadmin/templates/main/second.html
	}

constants.ts

domain = http://typo3.p392460.webspaceconfig.de/
PathToFiles = fileadmin/templates/

plugin.tx_news.view.templateRootPath = fileadmin/templates/ext/news/Templates
plugin.tx_news.view.partialRootPath = fileadmin/templates/ext/news/Partials
plugin.tx_news.view.layoutRootPath = fileadmin/templates/ext/news/Layouts

plugin.tx_kesearch.view.templateRootPath = fileadmin/templates/ext/ke_search/Templates
plugin.tx_kesearch.view.partialRootPath = fileadmin/templates/ext/ke_search/Partials
plugin.tx_kesearch.view.layoutRootPath = fileadmin/templates/ext/ke_search/Layouts


Первичные настройки

Template->Home->Neue Template

Konstanten:

<INCLUDE_TYPOSCRIPT: source="FILE: fileadmin/templates/main/ts/constants.ts">

Setup:

<INCLUDE_TYPOSCRIPT: source="FILE: fileadmin/templates/main/ts/setup.ts">


Objekte in Backend

В глобальный шаблон от Home нужно добавить используемый объект:

Liste -> main (Template) -> Enthält

von Verfügbare Objekte in Ausgewählte Objekte

tsref
Андрей Копп
0    411    0
+1

Комментарии ()

    Вы должны авторизоваться, чтобы оставлять комментарии.

    Топики

    Андрей Копп 03 октября 2018, 11:55
    Компоненты MODX Обзор компонента SEO Pro 0
    Андрей Копп 02 октября 2018, 11:18
    MODX Настройка MySQL 5.7 для работы pdoTools 0
    Андрей Копп 27 сентября 2018, 20:49
    MODX MinifyX в Fenom 0
    Андрей Копп 01 июля 2018, 15:13
    Другое Fenom в MODX (шпаргалки) 0

    Комментарии

    Андрей Копп 02 октября 2018, 09:04
    ComboBox с данными из другой таблицы modExtra 1
    Андрей Копп 08 сентября 2017, 20:24
    Всевозможная очистка кэша в Laravel 5 1