Typo3 (или в превод - Тъпо 3)
По злощастно стечение на обстоятелствата се наложи да науча и това. Тъй заради него се наложи да жертвам от безценното си време за мързел и спане, надявам се да успея да спестя това на някой друг.
Typo3 е web content management система писана на
PHP, използва
MySQL. С нея може да се направи всичко и затова не е от най-лесните. Има
много модули и досега не ми се е налагало да включвам мой код, освен от време на време да оправя по някой бъгав модул. Най-много се гордея с промените по
Drop-Down sitemap, за да стане
това :)
Ето и най-важното:
- Създаване структурата на сайта:
- меню "Page"
- клик бърху иконката на "Blank Dummy". Появава се меню, избира се "New"
- от опциите в дясно се избира Page - Click here for wizard
- задават се настройки за новата страница: махане на checkbox "Hide", за да не е скрита страницата и т.н. Тази страница ще бъде root и съответно homepage на сайта. Всички подстраници трябва да се въведат под нея.
- след това със клик върху инконката на всяка създадена страница по аналогичен начин може да се създаде структурата на сайта.
-
Създаване на темплейт:
По този начин се обозначават динамичните места в страницата:
<!--###SOME_NAME### begin -->
<!--###SOME_NAME### end -->
При по-голяма страница обаче е по-лесно да се използва plugin Automaketemplate (tx_automaketemplate_pi1). Тогава таговете, които имат параметър ID или CLASS автоматично се маркират. Точно при кои тагове да става това се казва в Setup на темплейта. Например:
plugin.tx_automaketemplate_pi1 {
elements {
  TD.all = 1
  TR.all = 1
  DIV.all = 1
  A.all = 1
}
}
Примерен темплейт.
- Добавяне на темплейт:
- меню "Template"
- избира се root страницата
- "Create template for a new site"
- Click here to edit whole template record
Примерен Setup за горния темплейт.
page = PAGE
page.meta.DESCRIPTION = Meta Tag - Description
page.meta.KEYWORDS = Meta Tag - Keywords
# За модула Indexed Seach
page.config.index_enable = 1
page.config.index_externals = 1
# Настойки за езика:
config.language = bg
# Настойка на locale - ако има такъв инсталиран на системата
config.locale_all = bg
# Дали да показва админ панел ако потребителя е логнат в backend администрацията. С посочения пример показва само иконките за редактиране, не целия панел.
config.admPanel = 0
admPanel {
enable.edit = 1
}
# Новини
plugin.tt_news {
latestLimit = 2
latestHeader = 0
pid_list = 100
singlePid = 111
backPid = 100
defaultCode = LATEST
# Ако случайно не ви допада подреждането по datetime, ето как да се промени на, примерно, title.
# би трябвало да работи, ако не беше това беузмие.
listOrderBy = title desc
_CSS_DEFAULT_STYLE =
templateFile = fileadmin/template/main/tt_news_v2_template.html
displayLatest.date_stdWrap.strftime= %e. %B %Y
displayLatest.subheader_stdWrap.wrap = <p class="newsblock">|</p>
displayList.date_stdWrap.strftime= %e. %B %Y
displayList.title_stdWrap.wrap = |
displayList.author_stdWrap.wrap = |
displayList.content_stdWrap.wrap = |
displaySingle.date_stdWrap.strftime= %e. %B %Y
displaySingle.title_stdWrap.wrap = |
}
temp.news < plugin.tt_news
temp.main_navigation = HMENU
temp.main_navigation.maxItems = 6
temp.main_navigation.1 = TMENU
temp.main_navigation.1 {
NO = 0
NO.allWrap = <div class="menu">|</div>
ACT = 0
ACT.allWrap = <div class="menu">|</div>
}
temp.bottom_navigation1 = HMENU
temp.bottom_navigation1.begin = 7
temp.bottom_navigation1.1 = TMENU
temp.bottom_navigation1.1 {
# | е кода за права черта
NO = 0
NO.allWrap = | |
ACT = 0
ACT.allWrap = | |
}
# Показват се до 3 нива надолу по навигацията.
temp.secondary_navigation = HMENU
temp.secondary_navigation.entryLevel = 1
temp.secondary_navigation.1 = TMENU
temp.secondary_navigation.1 {
NO = 0
NO.allWrap = <div class="fst">|</div>
}
temp.secondary_navigation.2 = TMENU
temp.secondary_navigation.2 {
NO = 0
NO.allWrap = <div class="sec">|</div>
}
temp.secondary_navigation.3 = TMENU
temp.secondary_navigation.3 {
NO = 0
NO.allWrap = <div class="third">· |</div>
}
temp.rootline = HMENU
temp.rootline.special = rootline
temp.rootline.1 = TMENU
temp.rootline.1 {
NO.allWrap = | > |*||*| |
}
# Подменю на страницата с id 74
temp.bottom_navigation2 = HMENU
temp.bottom_navigation2.special = directory
temp.bottom_navigation2.special.value = 74
temp.bottom_navigation2.1 = TMENU
temp.bottom_navigation2.1 {
NO = 0
NO.allWrap = <div class="fst">|</div>
}
# Configuring the Auto-Parser:
plugin.tx_automaketemplate_pi1 {
# Read the template file:
content = FILE
content.file = fileadmin/template/main/template_2.html
# Here we define which elements in the HTML that
# should be wrapped in subpart-comments:
elements {
BODY.all = 1
BODY.all.subpartMarker = DOCUMENT_BODY
HEAD.all = 1
HEAD.all.subpartMarker = DOCUMENT_HEADER
HEAD.rmTagSections = title
TD.all = 1
TR.all = 1
DIV.all = 1
A.all = 1
UL.all = 1
}
# Prefix all relative paths with this value:
relPathPrefix = fileadmin/template/main/
}
temp.mainTemplate = TEMPLATE
temp.mainTemplate {
template =< plugin.tx_automaketemplate_pi1
subparts.main_navigation < temp.mainNav
subparts.secondary_navigation < temp.subNav
subparts.rootline < temp.rootline
# Зависи къде е сложено съдържанието в страницата, може да бъде styles.content.getLeft, styles.content.get, styles.content.getRight
subparts.content < styles.content.get
subparts.bottom_navigation1 < temp.bottom_navigation1
subparts.bottom_navigation2 < temp.bottom_navigation2
subparts.news < temp.news
subparts.somelink = HTML
subparts.somelink.value = <a href="index.php?id=88">Линк някакъв</a>
}
temp.Template_96 = TEMPLATE
temp.Template_96 {
# Тук може да се случва нещо различно
# ....
}
# typeNum дава още един начин на различни места да се правят различни неща
page.typeNum = 0
# Ако настоящата страница е с ID 96, прави друго.
[globalVar = TSFE:id = 96]
page.10 < temp.Template_96
[else]
page.10 < temp.mainTemplate
[end]
« скрий
- Редакция:
Typo3 кешира страниците, затова когато направите промяна, която се отразява не само на редактираната страница, а и на други (например промяна в темплейта), най-добре е да се избере "Clear all cache".
- Странни неща:
- Ако в темплейта има следния div, в който трябва да има динамично съдържание: <div id="divname"></div> - няма да работи, тъй като трябва да има нов ред между отварящия и затварящия таг:
<div id="divname">
</div>
-
Подреждане в tt_news
Това тук е комбинация между странни разбирания за живота, вселената и всичко останало и от страна на Typo 3, и от страна на MySQL 5. Интересно защо, в tt_news се групира по tt_news.uid ако нищо друго не е указано изрично. MySQL пък са решили от версия 5 нагоре, при използване на GROUP BY да сортират по ключа, по който се групира, а не по ORDER BY клаузата. Резултатът е, че трябва или в setup да се укаже groupBy, в който да участва и това, по което искате да подредите резултатите (примерно в стандартния случай - datetime), или да се промени следното в class.tx_ttnews.php:
if ($this->config['groupBy']) {
$selectConf['groupBy'] = $this->config['groupBy'];
} else {
$selectConf['groupBy'] = 'tt_news.uid';
}
да стане така:
if ($this->config['groupBy']) {
$selectConf['groupBy'] = $this->config['groupBy'];
} else {
$selectConf['groupBy'] = '';
}
- Extensions
- Indexed Search (indexed_search)
Още един бъг, който ми скапа половин ден :( Функцията за премахване на нежеланите HTML секции (т.е. <script></script> и <style></style>) не работи правилно когато имам по няколко такива секции. Затова изтеглете оттук коригирания модул. Само подменете файла class.indexer.php в директорията на модула (обикновено typo3conf/ext/indexed_search).
За да индексира страниците в Setup на темплейта трябва да има следното:
page.config.index_enable = 1
За да индексира външните фаийлове като PDF и Word, трябва да има следното:
page.config.index_externals = 1
- Index Searched Statistics (mv_index_searched_statistics)
Статистика за търсените думи - backend модул, добавя си линк "IS statistics" в меню-то на администрацията.
- Job Offers (cl_joboffers)
Не знам дали не работи при мен, защото е правено за друга версия на Typo3 или заради нещо друго, но от тук можете да изтеглите работеща версия за Typo3 3.7.0. Само подменете файла class.tx_cljoboffers_pi1.php в директорията на модула (обикновено typo3conf/ext/cl_joboffers/cl_joboffers/pi1).
- Make Print Link (make_printlink)
Много полезно и много лесно за инсталиране. Прави подходящ за разпечатване вариант на всяка страница, дори и страници с POST променливи.
- Tip-a-friend (tipafriend)
Препоръчай на приятел.
Setup - настройки и генериране на линка, който ще стои на всяка страница
plugin.tipafriend {
templateFile = fileadmin/template/main/tipafriend_template.tmpl
wrap1.wrap = |
wrap2.wrap = |
color1.wrap =
color2.wrap =
color3.wrap =
htmlmail = 1
htmlMail = 1
notify_to_email = name@domain.com
notify_to_name = My Name
notify_from_email = name@domain.com
notify_from_name = My Name
}
temp.tipafriend = USER
temp.tipafriend {
userFunc = tx_tipafriend->main_tipafriend
templateFile = fileadmin/template/main/tipafriend_template.tmpl
code = TIPLINK
typolink.parameter = 128 _top # uid of page where Tip-a-Friend plugin is inserted
}
« скрий
- Полезно
- Frontend edit
Ако потребителя е логнат в backend администрацията, може да редактира съдържанието на страницата директно докато разглежда сайта. Трябва само да се добави следното в Setup на темплейта:
config.admPanel = 1
admPanel {
enable.edit = 1
}
Може да се махне административния панел (config.admPanel = 0) и да се виждат само иконите за редактиране на съдържанието.
- Rich Text Editor
Може да се правят настройки на RTE на админситрацията. Слага се в "TSconfig" на страницата (Edit page header).
Пример
RTE.config.tt_content.bodytext.proc.overruleMode = ts_css
RTE >
RTE.default {
dontConvBRtoParagraph = 1
proc.overruleMode = ts_css
proc.dontConvBRtoParagraph = 1
showButtons=textcolor,class
disableColorPicker = 0
colors = red, noColor
classesCharacter = bodytext, redbodytext
}
RTE.classes {
bodytext {
name = Body Text (Primary)
value = color: #000000;
}
redbodytext {
name = red
value = #8C0010;
}
}
RTE.colors {
red {
name = Red
value = #8C0010
}
noColor {
name = No color
value =
}
}
}
« скрий
- Login Form
За да се сложи формата в страница: New content -> Login form
Списъка с потребители се вкарва във SysFolder
За да се каже ID на SysFolder-а с потребителите - в Constants на темплейта се слага следното: styles.content.loginform.pid = ID
За да се каже коя страница е защитена с парола - Visibility settings.
- Препоръки
Преди да решите да използвате Typo3, посетете този сайт: opensourcecms.com. Може да се окаже че нещо по-просто също ще ви свърши работа :)
оl>