<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6052981997157873285</id><updated>2012-02-13T21:32:39.270+02:00</updated><category term='install'/><category term='русский'/><category term='irre'/><category term='indexed_search'/><category term='newslist_ext'/><category term='temp'/><category term='сео'/><category term='rgtabs'/><category term='even'/><category term='алиас'/><category term='newsFiles'/><category term='картинки'/><category term='paragraph'/><category term='optionsplit'/><category term='контент'/><category term='perfectlightbox'/><category term='suse'/><category term='якоря'/><category term='css'/><category term='мультиязычность'/><category term='class'/><category term='typo3'/><category term='jfmulticontent'/><category term='link'/><category term='footer'/><category term='menu'/><category term='t3editor'/><category term='jcarousel'/><category term='сайт'/><category term='google analytics'/><category term='jQuery'/><category term='logout'/><category term='стили'/><category term='error 404'/><category term='empty'/><category term='mysql'/><category term='ENABLE_INSTALL_TOOL'/><category term='eot'/><category term='breadcrumb'/><category term='field'/><category term='body'/><category term='хостинг'/><category term='otf'/><category term='раскрутка'/><category term='шрифты'/><category term='register:newsCategoryUid'/><category term='tt_news'/><category term='seo'/><category term='category'/><category term='libxml'/><category term='tags'/><category term='меню'/><category term='локализация'/><category term='innodb'/><category term='html'/><category term='odd'/><category term='навигация'/><category term='tca'/><category term='хеш-ссылки'/><category term='id'/><category term='rte'/><category term='slide'/><category term='lib'/><category term='настройка'/><category term='allow'/><title type='text'>Гиркало Вадим - программист фрилансер и разработчик (freelancer, developer) сайтов на TYPO3</title><subtitle type='html'>Блог веб-разработчика TYPO3. TYPO3 внятно и с картинками!
&lt;br&gt;&lt;br&gt;&lt;br&gt;
тел.: +38 (067) 561 22 06
&lt;br&gt;
email: gvv100[-at-]ua.fm
&lt;br&gt;
skype: gvv1401</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>33</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-7814054826152184635</id><published>2012-01-28T22:22:00.006+02:00</published><updated>2012-02-04T12:16:57.704+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='irre'/><category scheme='http://www.blogger.com/atom/ns#' term='tt_news'/><category scheme='http://www.blogger.com/atom/ns#' term='tca'/><category scheme='http://www.blogger.com/atom/ns#' term='field'/><title type='text'>tt_news - добавление новых полей к плагину</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;Чтобы лучше понять задачу ради которой я решил добавить к tt_news&amp;nbsp;ряд полей, читайте&amp;nbsp;&lt;a href="http://gyrkalo.blogspot.com/2012/01/ttnews.html"&gt;первую часть&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Для того, чтобы к любому расширению Typo3 добавить новое поле, не нужно курочить тело плагина (экста). Это - плохой тон, потому что после очередного обновления данного плагина все ваши изменения будут удалены. Хороший тон - сделать новый плагин. Причем, один такой дополнительный плагин может расширять несколько экстов Typo3 одновременно.&lt;br /&gt;&lt;br /&gt;Создать новое расширение можно с помощью инструмента -&amp;nbsp;&lt;a href="http://typo3.org/extensions/repository/view/kickstarter/current/" target="_blank"&gt;kickstarter&lt;/a&gt;. Но в данной ситуации я поступил иначе. Я скачал и установил уже готовый плагин -&amp;nbsp;&lt;a href="http://typo3.org/extensions/repository/?tx_terfe_pi1%5Bview%5D=search&amp;amp;no_cache=1&amp;amp;tx_terfe_pi1%5Bsword%5D=ttnewsfield" target="_blank"&gt;ttnewsfield&lt;/a&gt;, который добавляет к tt_news одно единственное поле -&amp;nbsp;&amp;nbsp;tx_ttnewsfield_linktitle. Этот плагин послужил мне замечательной стартовой площадкой для добавления множества других полей.&lt;br /&gt;&lt;br /&gt;Рассмотрим добавление 5 различных полей: обычное текстовое поле, поле в виде выпадающего списка, поле ссылающееся на запись &amp;nbsp;из другой таблицы (отношение 1:1),&amp;nbsp;поле ссылающееся на записи &amp;nbsp;из другой таблицы (отношение 1:n), IRRE поле.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Добавление обычного текстового поля&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Все что нужно для работы - это текстовый редактор и 3 файла ранее установленного ttnewsfield:&amp;nbsp;ext_tables.sql, locallang_db.xml&amp;nbsp;и&amp;nbsp;ext_tables.php. Хотя, по-большому счету ext_tables.sql можно и не трогать, если &amp;nbsp;менять структуру таблиц с помощью phpmyadmin или других программ. Думаю, что с этим файлом всё абсолютно понятно и я не буду о нем писать, как и о locallang_db.xml, который содержит набор текстовых констант, которые служат для отображения надписей в админке и её локализации.&lt;br /&gt;&lt;br /&gt;Самое интересное творится в&amp;nbsp;ext_tables.php. На старте содержимое файла такое:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: white; border-bottom-color: rgb(202, 223, 194); border-bottom-style: solid; border-bottom-width: 1px; border-color: initial; border-image: initial; border-left-color: rgb(202, 223, 194); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(202, 223, 194); border-right-style: solid; border-right-width: 1px; border-style: initial; border-top-color: rgb(202, 223, 194); border-top-style: solid; border-top-width: 1px; font-size: 11px; line-height: 18px; margin-bottom: 1em; margin-top: 1em; overflow-x: auto; overflow-y: auto; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em; text-align: -webkit-auto; width: 727px;"&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0000bb; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;$tempColumns&amp;nbsp;&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #007700; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;=&amp;nbsp;Array&amp;nbsp;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #dd0000; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;"tx_ttnewsfield_linktitle"&amp;nbsp;&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #007700; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;=&amp;gt;&amp;nbsp;Array&amp;nbsp;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #dd0000; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;"exclude"&amp;nbsp;&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #007700; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;=&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0000bb; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;0&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #007700; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #dd0000; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;"label"&amp;nbsp;&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #007700; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;=&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #dd0000; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;"LLL:EXT:ttnewsfield/locallang_db.xml:tt_news.tx_ttnewsfield_linktitle"&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #007700; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #dd0000; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;"config"&amp;nbsp;&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #007700; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;=&amp;gt;&amp;nbsp;Array&amp;nbsp;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #dd0000; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;"type"&amp;nbsp;&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #007700; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;=&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #dd0000; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;"input"&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #007700; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #dd0000; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;"size"&amp;nbsp;&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #007700; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;=&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #dd0000; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;"15"&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #007700; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #dd0000; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;"max"&amp;nbsp;&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #007700; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;=&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #dd0000; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;"64"&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #007700; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #dd0000; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;"eval"&amp;nbsp;&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #007700; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;=&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #dd0000; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;"trim"&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #007700; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;),&lt;br /&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0000bb; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;t3lib_div&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #007700; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;::&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0000bb; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;loadTCA&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #007700; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;(&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #dd0000; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;"tt_news"&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #007700; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0000bb; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;t3lib_extMgm&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #007700; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;::&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0000bb; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;addTCAcolumns&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #007700; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;(&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #dd0000; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;"tt_news"&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #007700; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;,&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0000bb; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;$tempColumns&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #007700; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;,&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0000bb; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;1&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #007700; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0000bb; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;$TCA&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #007700; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;[&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #dd0000; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;'tt_news'&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #007700; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;][&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #dd0000; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;'palettes'&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #007700; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;][&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #dd0000; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;'1'&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #007700; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;][&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #dd0000; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;'showitem'&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #007700; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;]&amp;nbsp;.=&amp;nbsp;&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #dd0000; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;",tx_ttnewsfield_linktitle"&lt;/span&gt;&lt;span style="border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #007700; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Поле&amp;nbsp;tx_ttnewsfield_linktitle, которое добавляется в эксте мне не интересно, поэтому я его переименовал в&amp;nbsp;tx_fitness_vimeo. Его задача - хранить обычный кусок html-кода.&lt;br /&gt;Вот описание этого поля для админки в файле&amp;nbsp;ext_tables.php:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'tx_fitness_vimeo' =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'label' =&amp;gt; 'LLL:EXT:ttnews_fitness/locallang_db.xml:tx_ttnewsirre_vimeo',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'l10n_mode' =&amp;gt; $l10n_mode,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'config' =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'type' =&amp;gt; 'text',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'cols' =&amp;gt; '48',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'rows' =&amp;gt; '5',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'softref' =&amp;gt; 'typolink_tag,images,email[subst],url',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'wizards' =&amp;gt; Array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;'_PADDING' =&amp;gt; 4,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;'RTE' =&amp;gt; Array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;'notNewRecords' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;'RTEonly' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;'type' =&amp;gt; 'script',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;'title' =&amp;gt; 'LLL:EXT:cms/locallang_ttc.php:bodytext.W.RTE',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;'icon' =&amp;gt; 'wizard_rte2.gif',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;'script' =&amp;gt; 'wizard_rte.php',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;Хочу заметить, что данные строки и все последующие являются элементами массива&amp;nbsp;$tempColumns, который я переименовал в $fitnessColumns.&amp;nbsp;Чтобы лучше понять значение каждого из вышеуказанных параметров элемента массива - почитайте мануал по&amp;nbsp;&lt;b&gt;TCA array reference&lt;/b&gt;. Там нет ничего сложного.&lt;br /&gt;&lt;br /&gt;А вот так поле будет&amp;nbsp;выглядеть&amp;nbsp;в админке:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-nXmguFOEECs/TyP8uuAVYtI/AAAAAAAAAR8/W2E18eWoS9w/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="84" src="http://4.bp.blogspot.com/-nXmguFOEECs/TyP8uuAVYtI/AAAAAAAAAR8/W2E18eWoS9w/s320/1.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Чтобы отобразить содержимое данного поля на FE советую заглянуть во внутрь экста -&amp;nbsp;Raw HTML in tt_news ( ttnews_html ) или&amp;nbsp;Youtube for tt_news ( esg_youtubenews ). Абсолютно ничего военного они не делают. Добавляется одна строка в файл&amp;nbsp;ext_localconf.php и создается дополнительный файл с 10-15 строками, в котором идет сопоставление значения нового поля с определенным маркером в html-шаблоне. Но правда, есть еще один способ вывода. Это универсальный экст - ttnewsgenericmarkers, который выводит в html-шаблон все, что угодно.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Добавление поля с фиксированным списком&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Сделать дополнительное поле в виде статического списка значение тоже не сложно.&lt;br /&gt;Вот пример, для поля&amp;nbsp;tx_fitness_shared_office_suitability, которое может принимать всего 5 значений: 1, 2, 3, 4 и 5 (файл&amp;nbsp;ext_tables.php):&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"tx_fitness_shared_office_suitability" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"exclude" =&amp;gt; 0,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"label" =&amp;gt; "LLL:EXT:ttnews_fitness/locallang_db.xml:tx_ttnewsirre_shared_office_suitability",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'config' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'type' =&amp;gt; 'select',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'items' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;array('LLL:EXT:ttnews_fitness/locallang_db.xml:suitability.1', 1),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;array('LLL:EXT:ttnews_fitness/locallang_db.xml:suitability.2', 2),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;array('LLL:EXT:ttnews_fitness/locallang_db.xml:suitability.3', 3),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;array('LLL:EXT:ttnews_fitness/locallang_db.xml:suitability.4', 4),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;array('LLL:EXT:ttnews_fitness/locallang_db.xml:suitability.5', 5),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;br /&gt;Эти 5 строк нужно добавить в файл&amp;nbsp;locallang_db.xml:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;&amp;lt;label index="suitability.1"&amp;gt;1&amp;lt;/label&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;&amp;lt;label index="suitability.2"&amp;gt;2&amp;lt;/label&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;&amp;lt;label index="suitability.3"&amp;gt;3&amp;lt;/label&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;&amp;lt;label index="suitability.4"&amp;gt;4&amp;lt;/label&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;&amp;lt;label index="suitability.5"&amp;gt;5&amp;lt;/label&amp;gt;&lt;br /&gt;Если числа внутри тега&amp;nbsp;label&amp;nbsp;заменить на слова, то список станет более информативным.&lt;br /&gt;Внешний вид такого списка в админке typo3:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/--Gbj2Kg8R2Y/TyQIGvnWEGI/AAAAAAAAASE/qq07bl0bfYs/s1600/3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/--Gbj2Kg8R2Y/TyQIGvnWEGI/AAAAAAAAASE/qq07bl0bfYs/s1600/3.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Добавление поля-ссылки (отношение 1 к 1)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Ради таких полей я и решил написать данную статью. Меня давно интересовал данный вопрос. И вот, наконец-то, я его разрулил.&lt;br /&gt;&lt;br /&gt;В предыдущем случае поле (tx_fitness_shared_office_suitability) являлось фиксированным списком из пяти значений, но что делать если нужен динамический список элементов? Тут все немного интереснее.&lt;br /&gt;&lt;br /&gt;1. Создаем новую таблицу в БД, которая, собственно и будет содержать все значения списка.&lt;br /&gt;В моем случае эта таблица имела такую структуру:&lt;br /&gt;CREATE&amp;nbsp;TABLE&amp;nbsp;`tx_fitness_workarea`&amp;nbsp;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;`uid`&amp;nbsp;int(11)&amp;nbsp;unsigned&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;auto_increment,&lt;br /&gt;&amp;nbsp;&amp;nbsp;`pid`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`tstamp`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`crdate`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`cruser_id`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`sys_language_uid`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`l18n_parent`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`l18n_diffsource`&amp;nbsp;mediumblob&amp;nbsp;NOT&amp;nbsp;NULL,&lt;br /&gt;&amp;nbsp;&amp;nbsp;`deleted`&amp;nbsp;tinyint(4)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`is_dummy_record`&amp;nbsp;tinyint(1)&amp;nbsp;unsigned&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;`title`&amp;nbsp;tinytext&amp;nbsp;NOT&amp;nbsp;NULL,&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;PRIMARY&amp;nbsp;KEY&amp;nbsp;&amp;nbsp;(`uid`),&lt;br /&gt;&amp;nbsp;&amp;nbsp;KEY&amp;nbsp;`parent`&amp;nbsp;(`pid`),&lt;br /&gt;&amp;nbsp;&amp;nbsp;KEY&amp;nbsp;`dummy`&amp;nbsp;(`is_dummy_record`)&lt;br /&gt;)&amp;nbsp;ENGINE=InnoDB&amp;nbsp;AUTO_INCREMENT=10&amp;nbsp;DEFAULT&amp;nbsp;CHARSET=utf8&lt;br /&gt;&lt;br /&gt;Самое ценное из всех полей данной таблицы, конечно же поле title. Остальные поля - служебные и интересуют больше не меня, а typo3.&lt;br /&gt;&lt;br /&gt;В таблицу tt_news я добавил числовое поле&amp;nbsp;tx_fitness_workarea, которое будет содержать uid только одной записи из таблицы&amp;nbsp;tx_fitness_workarea. Вот sql-определение данного поля:&lt;br /&gt;CREATE TABLE tt_news (&lt;br /&gt;...&lt;br /&gt;tx_fitness_workarea int(11) NOT NULL default '0',&lt;br /&gt;...&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;Эти настройки ТСА сделают новое поле&amp;nbsp;tx_fitness_workarea в таблице tt_news выпадающим списком, который будет наполнен строками из таблицы&amp;nbsp;tx_fitness_workarea:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'tx_fitness_workarea' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'exclude' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'label' =&amp;gt; 'LLL:EXT:ttnews_fitness/locallang_db.xml:tx_ttnewsirre_workarea',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'config' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'type' =&amp;gt; 'select',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'items' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;array('', 0),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'foreign_table' =&amp;gt; 'tx_fitness_workarea',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'foreign_table_where' =&amp;gt; 'AND tx_fitness_workarea.pid=###STORAGE_PID### ORDER BY tx_fitness_workarea.title',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'size' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'minitems' =&amp;gt; 0,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'maxitems' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'wizards' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;'_PADDING' =&amp;gt; 2,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;'_VERTICAL' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;'add' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;'type' =&amp;gt; 'script',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;'title' =&amp;gt; 'Create new record',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;'icon' =&amp;gt; 'add.gif',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;'params' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;       &lt;/span&gt;'table'=&amp;gt;'tx_fitness_workarea',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;       &lt;/span&gt;'pid' =&amp;gt; '###STORAGE_PID###',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;       &lt;/span&gt;'setValue' =&amp;gt; 'prepend',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;'script' =&amp;gt; 'wizard_add.php',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;'edit' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;'type' =&amp;gt; 'popup',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;'title' =&amp;gt; 'Edit',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;'script' =&amp;gt; 'wizard_edit.php',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;'popup_onlyOpenIfSelected' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;'icon' =&amp;gt; 'edit2.gif',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;'JSopenParams' =&amp;gt; 'height=350,width=580,status=0,menubar=0,scrollbars=1',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;)&lt;br /&gt;Вот так поле будет выглядеть в админке:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-mdzt5jPZykU/TyQQG19UetI/AAAAAAAAASU/8AuHVgC_BCM/s1600/2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-mdzt5jPZykU/TyQQG19UetI/AAAAAAAAASU/8AuHVgC_BCM/s1600/2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Самое интересное, как вы уже заметили, что возле списка есть кнопки, которые позволяют редактировать значения списка и добавлять в него новые элементы. Чтобы эти кнопки работали&amp;nbsp;необходимо&amp;nbsp;в файл&amp;nbsp;ext_tables.php вставить следующие строки:&lt;br /&gt;&lt;br /&gt;t3lib_extMgm::allowTableOnStandardPages("tx_fitness_workarea");&lt;br /&gt;$TCA['tx_fitness_workarea'] = array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;'ctrl' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'title' =&amp;gt; 'LLL:EXT:ttnews_fitness/locallang_db.xml:tx_ttnewsirre_workarea',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'label' =&amp;gt; 'title',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;//'rootLevel' =&amp;gt; 0,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'tstamp' =&amp;gt; 'tstamp',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'crdate' =&amp;gt; 'crdate',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'cruser_id' =&amp;gt; 'cruser_id',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'languageField' =&amp;gt; 'sys_language_uid',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'transOrigPointerField' =&amp;gt; 'l18n_parent',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'transOrigDiffSourceField' =&amp;gt; 'l18n_diffsource',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'default_sortby' =&amp;gt; 'ORDER BY title',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'delete' =&amp;gt; 'deleted',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"iconfile" =&amp;gt; t3lib_extMgm::extRelPath($_EXTKEY)."res/workarea.gif"&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;'interface' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'showRecordFieldList' =&amp;gt; 'sys_language_uid,l18n_parent,l18n_diffsource,title'&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"feInterface" =&amp;gt; $TCA["tx_fitness_workarea"]["feInterface"],&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;'columns' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'sys_language_uid' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'exclude' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'label' =&amp;gt; 'LLL:EXT:lang/locallang_general.xml:LGL.language',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'config' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'type' =&amp;gt; 'select',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'foreign_table' =&amp;gt; 'sys_language',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'foreign_table_where' =&amp;gt; 'ORDER BY sys_language.title',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'items' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;array('LLL:EXT:lang/locallang_general.xml:LGL.allLanguages', -1),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;array('LLL:EXT:lang/locallang_general.xml:LGL.default_value', 0),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'l18n_parent' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'displayCond' =&amp;gt; 'FIELD:sys_language_uid:&amp;gt;:0',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'exclude' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'label' =&amp;gt; 'LLL:EXT:lang/locallang_general.xml:LGL.l18n_parent',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'config' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'type' =&amp;gt; 'select',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'items' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;array('', 0),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'foreign_table' =&amp;gt; 'tx_fitness_workarea',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'foreign_table_where' =&amp;gt; 'AND tx_fitness_workarea.pid=###CURRENT_PID### AND tx_fitness_workarea.sys_language_uid IN (-1, 0)',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'l18n_diffsource' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'config' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'type' =&amp;gt; 'passthrough',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'title' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'exclude' =&amp;gt; 0,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'label' =&amp;gt; 'LLL:EXT:ttnews_fitness/locallang_db.xml:tx_ttnewsirre_workarea',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'config' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'type' =&amp;gt; 'input',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'size' =&amp;gt; '30',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'eval' =&amp;gt; 'required',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;'types' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'0' =&amp;gt; array('showitem' =&amp;gt; 'sys_language_uid;;;;1-1-1, l18n_parent, l18n_diffsource, title;;;;2-2-2'),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;'palettes' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'1' =&amp;gt; array('showitem' =&amp;gt; ''),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;)&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Хочу заметить, что эти строки уже не являются элементами массива&amp;nbsp;$tempColumns ($fitnessColumns). &lt;br /&gt;&lt;br /&gt;Теперь немного о&amp;nbsp;###CURRENT_PID### и&amp;nbsp;###STORAGE_PID###, которые поначалу вызывают недоумение. Что это такое? В принципе, имеются ввиду id фолдера или страницы содержащих (отображающие) записи таблицы&amp;nbsp;tx_fitness_workarea.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-xlm_y_TC5Mw/TyQXYqawJLI/AAAAAAAAASc/Ol6GK4bLcTk/s1600/workarea.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="55" src="http://2.bp.blogspot.com/-xlm_y_TC5Mw/TyQXYqawJLI/AAAAAAAAASc/Ol6GK4bLcTk/s320/workarea.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Вначале у меня были какие-то ошибки при добавлении новых записей, но всё вылечилось установкой&amp;nbsp;General Record Storage Page для фолдера хранящего все мои данные:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-co0aiTz825o/TyQX-bFBdoI/AAAAAAAAASk/-F5sXg6zbng/s1600/storage.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="135" src="http://1.bp.blogspot.com/-co0aiTz825o/TyQX-bFBdoI/AAAAAAAAASk/-F5sXg6zbng/s320/storage.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Добавление поля-ссылки (отношение один ко многим 1:n)&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Ну а теперь самый сложный и самый интересный случай, когда на одну запись из родительской таблицы (tt_news) ссылается несколько записей из дочерней таблицы.&lt;br /&gt;&lt;br /&gt;В данной ситуации обычно создают еще третью таблицу, которая является прослойкой между родительской и дочерней таблицами и содержит в себе связующие записи. Для большей ясности приведу схему структуры таблиц:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-l3pNxj2oPfk/TyQgQ_uGhpI/AAAAAAAAASs/xC3MYIzE-7Q/s1600/relations.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-l3pNxj2oPfk/TyQgQ_uGhpI/AAAAAAAAASs/xC3MYIzE-7Q/s320/relations.jpg" width="225" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Итак, дополнительное поле в tt_news будет называться -&amp;nbsp; tx_fitness_equipment, дочерняя таблица -&amp;nbsp;tx_fitness_equipment (список тренажеров), а промежуточная таблица -&amp;nbsp; tt_news_mainequipment_mm.&lt;br /&gt;SQL для данной модели данных у меня такой:&lt;br /&gt;&lt;br /&gt;CREATE TABLE tt_news (&lt;br /&gt;...&lt;br /&gt;&amp;nbsp; tx_fitness_equipment text,&lt;br /&gt;...&lt;br /&gt;);&lt;br /&gt;CREATE&amp;nbsp;TABLE&amp;nbsp;`tx_fitness_equipment`&amp;nbsp;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;`uid`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;auto_increment,&lt;br /&gt;&amp;nbsp;&amp;nbsp;`pid`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`tstamp`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`crdate`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`cruser_id`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`sys_language_uid`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`l18n_parent`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`l18n_diffsource`&amp;nbsp;mediumblob&amp;nbsp;NOT&amp;nbsp;NULL,&lt;br /&gt;&amp;nbsp;&amp;nbsp;`sorting`&amp;nbsp;int(10)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`deleted`&amp;nbsp;tinyint(4)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`hidden`&amp;nbsp;tinyint(4)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`t3ver_oid`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`t3ver_id`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`t3ver_wsid`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`t3ver_label`&amp;nbsp;varchar(30)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`t3ver_state`&amp;nbsp;tinyint(4)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`t3ver_stage`&amp;nbsp;tinyint(4)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`t3ver_count`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`t3ver_tstamp`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`t3ver_move_id`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`t3_origuid`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;`title`&amp;nbsp;tinytext&amp;nbsp;NOT&amp;nbsp;NULL,&lt;br /&gt;&amp;nbsp;&amp;nbsp;`exercises`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`image`&amp;nbsp;varchar(255)&amp;nbsp;default&amp;nbsp;NULL,&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;PRIMARY&amp;nbsp;KEY&amp;nbsp;&amp;nbsp;(`uid`),&lt;br /&gt;&amp;nbsp;&amp;nbsp;KEY&amp;nbsp;`parent`&amp;nbsp;(`pid`)&lt;br /&gt;)&amp;nbsp;ENGINE=InnoDB&amp;nbsp;AUTO_INCREMENT=9&amp;nbsp;DEFAULT&amp;nbsp;CHARSET=utf8&lt;br /&gt;&lt;br /&gt;CREATE&amp;nbsp;TABLE&amp;nbsp;`tt_news_mainequipment_mm`&amp;nbsp;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;`uid_local`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`uid_foreign`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`tablenames`&amp;nbsp;varchar(30)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`sorting`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0'&lt;br /&gt;)&amp;nbsp;ENGINE=InnoDB&amp;nbsp;DEFAULT&amp;nbsp;CHARSET=utf8&lt;br /&gt;&lt;br /&gt;Последняя таблица в своем наименовании имеет суффикс MM. Это не просто так. У Typo3 такой вид отношений между таблицами называется mm-отношения. Это довольно распространенный вид взаимосвязи, &amp;nbsp;наиболее ярким примером которой могут послужить новости и их категории. Ведь одна новость может принадлежать к нескольким категориям, а одна категория может принадлежать нескольким новостям.&lt;br /&gt;&lt;br /&gt;Итак, в&amp;nbsp;ext_tables.php добавляем:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'tx_fitness_equipment' =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'exclude' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"label" =&amp;gt; "LLL:EXT:ttnews_fitness/locallang_db.xml:tx_ttnewsirre_equipment",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'config' =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'type' =&amp;gt; 'select',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'size' =&amp;gt; 10,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'foreign_table' =&amp;gt; 'tx_fitness_equipment',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'foreign_table_where' =&amp;gt; 'ORDER BY title',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'autoSizeMax' =&amp;gt; 50,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'minitems' =&amp;gt; 0,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'maxitems' =&amp;gt; 10,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'MM' =&amp;gt; 'tt_news_mainequipment_mm',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;t3lib_extMgm::allowTableOnStandardPages("tx_fitness_equipment");&lt;br /&gt;$TCA["tx_fitness_equipment"] = Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"ctrl" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'title' =&amp;gt; 'LLL:EXT:ttnews_fitness/locallang_db.xml:tt_news.tx_ttnewsfield_equipment',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'label' =&amp;gt; 'title',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'tstamp' =&amp;gt; 'tstamp',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'crdate' =&amp;gt; 'crdate',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'cruser_id' =&amp;gt; 'cruser_id',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'languageField' &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; 'sys_language_uid',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'transOrigPointerField' &amp;nbsp; &amp;nbsp;=&amp;gt; 'l18n_parent',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'transOrigDiffSourceField' =&amp;gt; 'l18n_diffsource',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"sortby" =&amp;gt; "sorting",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"delete" =&amp;gt; "deleted",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"enablecolumns" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"disabled" =&amp;gt; "hidden",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"iconfile" =&amp;gt; t3lib_extMgm::extRelPath($_EXTKEY)."res/equipment.gif",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'versioningWS' =&amp;gt; TRUE,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'origUid' =&amp;gt; 't3_origuid',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"interface" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"showRecordFieldList" =&amp;gt; "sys_language_uid,l18n_parent,l18n_diffsource,hidden,title,image,exercises"&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"feInterface" =&amp;gt; $TCA["tx_fitness_equipment"]["feInterface"],&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"columns" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'sys_language_uid' =&amp;gt; array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'exclude' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'label' &amp;nbsp;=&amp;gt; 'LLL:EXT:lang/locallang_general.xml:LGL.language',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'config' =&amp;gt; array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'type' &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; 'select',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'foreign_table' &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; 'sys_language',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'foreign_table_where' =&amp;gt; 'ORDER BY sys_language.title',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'items' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;array('LLL:EXT:lang/locallang_general.xml:LGL.allLanguages', -1),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;array('LLL:EXT:lang/locallang_general.xml:LGL.default_value', 0)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'l18n_parent' =&amp;gt; array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'displayCond' =&amp;gt; 'FIELD:sys_language_uid:&amp;gt;:0',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'exclude' &amp;nbsp; &amp;nbsp; =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'label' &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; 'LLL:EXT:lang/locallang_general.xml:LGL.l18n_parent',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'config' &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'type' &amp;nbsp;=&amp;gt; 'select',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'items' =&amp;gt; array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;array('', 0),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'foreign_table' &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; 'tx_fitness_equipment',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'foreign_table_where' =&amp;gt; 'AND tx_fitness_equipment.pid=###CURRENT_PID### AND tx_fitness_equipment.sys_language_uid IN (-1,0)',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'l18n_diffsource' =&amp;gt; array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'config' =&amp;gt; array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'type' =&amp;gt; 'passthrough'&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"hidden" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"exclude" =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"label" =&amp;gt; "LLL:EXT:lang/locallang_general.xml:LGL.hidden",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"config" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"type" =&amp;gt; "check",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"default" =&amp;gt; "0"&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"title" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"exclude" =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'l10n_mode' =&amp;gt; 'prefixLangTitle',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"label" =&amp;gt; "LLL:EXT:ttnews_fitness/locallang_db.xml:tt_news.tx_ttnewsfield_equipment",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"config" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"type" =&amp;gt; "input",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"size" =&amp;gt; "30",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"eval" =&amp;gt; "required",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'image' =&amp;gt; array (&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'exclude' =&amp;gt; 0,&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'l10n_mode' =&amp;gt; 'exclude',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'label' =&amp;gt; 'LLL:EXT:ttnews_fitness/locallang_db.xml:tt_news.tx_ttnewsfield_image',&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'config' =&amp;gt; array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'type' =&amp;gt; 'group',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'internal_type' =&amp;gt; 'file',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'allowed' =&amp;gt; $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'],&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'max_size' =&amp;gt; $GLOBALS['TYPO3_CONF_VARS']['BE']['maxFileSize'],&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'uploadfolder' =&amp;gt; 'uploads/tx_ttnews',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'show_thumbs' =&amp;gt; '1',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'size' =&amp;gt; 1,&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'minitems' =&amp;gt; 0,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'maxitems' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"exercises" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"exclude" =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"label" =&amp;gt; "LLL:EXT:ttnews_fitness/locallang_db.xml:tt_news.tx_ttnewsfield_exercises",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"config" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"type" =&amp;gt; "inline",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"foreign_table" =&amp;gt; "tx_fitness_exercise2equipment",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"foreign_field" =&amp;gt; "equipmentid",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"foreign_sortby" =&amp;gt; "equipmentsort",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"foreign_label" =&amp;gt; "exerciseid",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"maxitems" =&amp;gt; 10,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'appearance' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;'showSynchronizationLink' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;'showAllLocalizationLink' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;'showPossibleLocalizationRecords' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;'showRemovedLocalizationRecords' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'behaviour' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;'localizationMode' =&amp;gt; 'select',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"types" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"0" =&amp;gt; Array("showitem" =&amp;gt; "sys_language_uid;;;;1-1-1, l18n_parent, l18n_diffsource, hidden;;1, title;;;;2-2-2, image")&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"palettes" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"1" =&amp;gt; Array("showitem" =&amp;gt; "")&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;)&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;Как результат, в админке мы увидим, что можно добавлять новые записи:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-NINmCmQtzvQ/TyQyErSR45I/AAAAAAAAATE/kTFeebqgqHw/s1600/new-records.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-NINmCmQtzvQ/TyQyErSR45I/AAAAAAAAATE/kTFeebqgqHw/s320/new-records.jpg" width="237" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-aFUxP_kVsfo/TyQxk1v5fKI/AAAAAAAAAS8/wJG_0BKTKwo/s1600/equipment-list.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="105" src="http://2.bp.blogspot.com/-aFUxP_kVsfo/TyQxk1v5fKI/AAAAAAAAAS8/wJG_0BKTKwo/s320/equipment-list.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;а при редактировании упражнений интерфейс будет таким:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-aBTplsJQE_k/TyQw_BvEpGI/AAAAAAAAAS0/W15CQafmm7A/s1600/equipment.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="124" src="http://2.bp.blogspot.com/-aBTplsJQE_k/TyQw_BvEpGI/AAAAAAAAAS0/W15CQafmm7A/s320/equipment.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Все супер, но не супер. Есть одно неудобство. Чтобы к упражнению можно было привязать несколько тренажеров, для этого, в первую очередь, необходимо предварительно создать записи этих тренажеров, т.е. для этого нужно каждый раз выходить из формы ввода упражнений (tt_news). Поэтому, я пришел к выводу, что нужно научиться вводить дочерние записи прямо из родительской таблицы. Технология&amp;nbsp;Inline Relational Record Editing (&lt;b&gt;IRRE&lt;/b&gt;) позволяет разработчику &amp;nbsp;сделать это.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Дополнительное IRRE поле&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;К упражнениям можно привязать еще одну характеристику - группы мышц, которые оно разрабатывает. Как и в предыдущем случае, создаем дополнительно поле в tt_news -&amp;nbsp;musclegroups, дочернюю таблицу -&amp;nbsp;tx_fitness_musclegroup и связующую таблицу -&amp;nbsp;tx_fitness_exercise2musclegroup.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CREATE TABLE tt_news (&lt;br /&gt;...&lt;br /&gt;&amp;nbsp; musclegroups int(11) NOT NULL default '0',&lt;br /&gt;...&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CREATE TABLE tx_fitness_musclegroup (&lt;br /&gt;&amp;nbsp; uid int(11) NOT NULL auto_increment,&lt;br /&gt;&amp;nbsp; pid int(11) NOT NULL default '0',&lt;br /&gt;&amp;nbsp; tstamp int(11) NOT NULL default '0',&lt;br /&gt;&amp;nbsp; crdate int(11) NOT NULL default '0',&lt;br /&gt;&amp;nbsp; cruser_id int(11) NOT NULL default '0',&lt;br /&gt;&amp;nbsp; sys_language_uid int(11) NOT NULL default '0',&lt;br /&gt;&amp;nbsp; l18n_parent int(11) NOT NULL default '0',&lt;br /&gt;&amp;nbsp; l18n_diffsource mediumblob NOT NULL,&lt;br /&gt;&amp;nbsp; sorting int(10) NOT NULL default '0',&lt;br /&gt;&amp;nbsp; deleted tinyint(4) NOT NULL default '0',&lt;br /&gt;&amp;nbsp; hidden tinyint(4) NOT NULL default '0',&lt;br /&gt;&amp;nbsp; t3ver_oid int(11) NOT NULL default '0',&lt;br /&gt;&amp;nbsp; t3ver_id int(11) NOT NULL default '0',&lt;br /&gt;&amp;nbsp; t3ver_wsid int(11) NOT NULL default '0',&lt;br /&gt;&amp;nbsp; t3ver_label varchar(30) NOT NULL default '',&lt;br /&gt;&amp;nbsp; t3ver_state tinyint(4) NOT NULL default '0',&lt;br /&gt;&amp;nbsp; t3ver_stage tinyint(4) NOT NULL default '0',&lt;br /&gt;&amp;nbsp; t3ver_count int(11) NOT NULL default '0',&lt;br /&gt;&amp;nbsp; t3ver_tstamp int(11) NOT NULL default '0',&lt;br /&gt;&amp;nbsp; t3ver_move_id int(11) NOT NULL default '0',&lt;br /&gt;&amp;nbsp; t3_origuid int(11) NOT NULL default '0',&lt;br /&gt;&lt;b&gt;&amp;nbsp; title tinytext NOT NULL,&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp; exercises int(11) NOT NULL default '0',&lt;/b&gt;&lt;br /&gt;&amp;nbsp; PRIMARY KEY &amp;nbsp;(uid),&lt;br /&gt;&amp;nbsp; KEY parent (pid)&lt;br /&gt;) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8&lt;br /&gt;&lt;br /&gt;CREATE&amp;nbsp;TABLE&amp;nbsp;`tx_fitness_exercise2musclegroup`&amp;nbsp;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;`uid`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;auto_increment,&lt;br /&gt;&amp;nbsp;&amp;nbsp;`pid`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`tstamp`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`crdate`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`cruser_id`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`sys_language_uid`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`l18n_parent`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`l18n_diffsource`&amp;nbsp;mediumblob&amp;nbsp;NOT&amp;nbsp;NULL,&lt;br /&gt;&amp;nbsp;&amp;nbsp;`deleted`&amp;nbsp;tinyint(4)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`hidden`&amp;nbsp;tinyint(4)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`t3ver_oid`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`t3ver_id`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`t3ver_wsid`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`t3ver_label`&amp;nbsp;varchar(30)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`t3ver_state`&amp;nbsp;tinyint(4)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`t3ver_stage`&amp;nbsp;tinyint(4)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`t3ver_count`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`t3ver_tstamp`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`t3ver_move_id`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`t3_origuid`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;`exerciseid`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`musclegroupid`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`exercisesort`&amp;nbsp;int(10)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;br /&gt;&amp;nbsp;&amp;nbsp;`musclegroupsort`&amp;nbsp;int(10)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;default&amp;nbsp;'0',&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;PRIMARY&amp;nbsp;KEY&amp;nbsp;&amp;nbsp;(`uid`),&lt;br /&gt;&amp;nbsp;&amp;nbsp;KEY&amp;nbsp;`parent`&amp;nbsp;(`pid`)&lt;br /&gt;)&amp;nbsp;ENGINE=InnoDB&amp;nbsp;AUTO_INCREMENT=31&amp;nbsp;DEFAULT&amp;nbsp;CHARSET=utf8&lt;br /&gt;&lt;br /&gt;Строки для&amp;nbsp;ext_tables.php:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;'musclegroups' =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"exclude" =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"label" =&amp;gt; "LLL:EXT:ttnews_fitness/locallang_db.xml:tt_news.tx_ttnewsfield_secondarymusclegroups",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"config" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"type" =&amp;gt; "inline",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"foreign_table" =&amp;gt; "tx_fitness_exercise2musclegroup",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"foreign_field" =&amp;gt; "exerciseid",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"foreign_sortby" =&amp;gt; "exercisesort",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"foreign_label" =&amp;gt; "musclegroupid",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;/*"symmetric_field" =&amp;gt; "exerciseid",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"symmetric_label" =&amp;gt; "type",*/&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"maxitems" =&amp;gt; 10,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'appearance' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;'showSynchronizationLink' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;'showAllLocalizationLink' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;'showPossibleLocalizationRecords' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;'showRemovedLocalizationRecords' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;'useSortable' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;'collapseAll' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;'expandSingle' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'behaviour' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;'localizationMode' =&amp;gt; 'select',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;),&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;t3lib_extMgm::allowTableOnStandardPages("tx_fitness_musclegroup");&lt;br /&gt;$TCA["tx_fitness_musclegroup"] = Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"ctrl" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'title' =&amp;gt; 'LLL:EXT:ttnews_fitness/locallang_db.xml:tt_news.tx_ttnewsfield_musclegroup',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'label' =&amp;gt; 'title',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'tstamp' =&amp;gt; 'tstamp',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'crdate' =&amp;gt; 'crdate',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'cruser_id' =&amp;gt; 'cruser_id',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'languageField' &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; 'sys_language_uid',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'transOrigPointerField' &amp;nbsp; &amp;nbsp;=&amp;gt; 'l18n_parent',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'transOrigDiffSourceField' =&amp;gt; 'l18n_diffsource',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"sortby" =&amp;gt; "sorting",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"delete" =&amp;gt; "deleted",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"enablecolumns" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"disabled" =&amp;gt; "hidden",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;//"dynamicConfigFile" =&amp;gt; t3lib_extMgm::extPath($_EXTKEY)."tca.mnasym.php",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"iconfile" =&amp;gt; t3lib_extMgm::extRelPath($_EXTKEY)."res/hand.gif",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'versioningWS' =&amp;gt; TRUE,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'origUid' =&amp;gt; 't3_origuid',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"interface" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"showRecordFieldList" =&amp;gt; "sys_language_uid,l18n_parent,l18n_diffsource,hidden,title,exercises"&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;//"feInterface" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;//&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"fe_admin_fieldList" =&amp;gt; "sys_language_uid, l18n_parent, l18n_diffsource, hidden, title, exercises",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;//)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"feInterface" =&amp;gt; $TCA["tx_fitness_musclegroup"]["feInterface"],&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"columns" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'sys_language_uid' =&amp;gt; array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'exclude' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'label' &amp;nbsp;=&amp;gt; 'LLL:EXT:lang/locallang_general.xml:LGL.language',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'config' =&amp;gt; array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'type' &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; 'select',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'foreign_table' &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; 'sys_language',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'foreign_table_where' =&amp;gt; 'ORDER BY sys_language.title',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'items' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;array('LLL:EXT:lang/locallang_general.xml:LGL.allLanguages', -1),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;array('LLL:EXT:lang/locallang_general.xml:LGL.default_value', 0)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'l18n_parent' =&amp;gt; array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'displayCond' =&amp;gt; 'FIELD:sys_language_uid:&amp;gt;:0',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'exclude' &amp;nbsp; &amp;nbsp; =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'label' &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; 'LLL:EXT:lang/locallang_general.xml:LGL.l18n_parent',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'config' &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'type' &amp;nbsp;=&amp;gt; 'select',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'items' =&amp;gt; array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;array('', 0),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'foreign_table' &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; 'tx_fitness_bodypart',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'foreign_table_where' =&amp;gt; 'AND tx_fitness_musclegroup.pid=###CURRENT_PID### AND tx_fitness_musclegroup.sys_language_uid IN (-1,0)',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'l18n_diffsource' =&amp;gt; array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'config' =&amp;gt; array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'type' =&amp;gt; 'passthrough'&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"hidden" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"exclude" =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"label" =&amp;gt; "LLL:EXT:lang/locallang_general.xml:LGL.hidden",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"config" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"type" =&amp;gt; "check",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"default" =&amp;gt; "0"&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"title" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"exclude" =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'l10n_mode' =&amp;gt; 'prefixLangTitle',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"label" =&amp;gt; "LLL:EXT:ttnews_fitness/locallang_db.xml:tt_news.tx_ttnewsfield_musclegroup",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"config" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"type" =&amp;gt; "input",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"size" =&amp;gt; "30",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"eval" =&amp;gt; "required",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"exercises" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"exclude" =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"label" =&amp;gt; "LLL:EXT:ttnews_fitness/locallang_db.xml:tt_news.tx_ttnewsfield_exercises",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"config" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"type" =&amp;gt; "inline",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"foreign_table" =&amp;gt; "tx_fitness_exercise2musclegroup",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"foreign_field" =&amp;gt; "musclegroupid",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"foreign_sortby" =&amp;gt; "musclegroupsort",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"foreign_label" =&amp;gt; "exerciseid",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"maxitems" =&amp;gt; 10,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'appearance' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;'showSynchronizationLink' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;'showAllLocalizationLink' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;'showPossibleLocalizationRecords' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;'showRemovedLocalizationRecords' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'behaviour' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;'localizationMode' =&amp;gt; 'select',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"types" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"0" =&amp;gt; Array("showitem" =&amp;gt; "sys_language_uid;;;;1-1-1, l18n_parent, l18n_diffsource, hidden;;1, title;;;;2-2-2, exercises")&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"palettes" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"1" =&amp;gt; Array("showitem" =&amp;gt; "")&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;)&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;t3lib_extMgm::allowTableOnStandardPages("tx_fitness_exercise2musclegroup");&lt;br /&gt;$TCA["tx_fitness_exercise2musclegroup"] = Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"ctrl" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'title' =&amp;gt; 'LLL:EXT:ttnews_fitness/locallang_db.xml:tt_news.tx_ttnewsfield_exercise2musclegroup',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'label' =&amp;gt; 'exerciseid',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'label_alt' =&amp;gt; 'musclegroupid',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'label_alt_force' =&amp;gt; TRUE,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'tstamp' =&amp;gt; 'tstamp',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'crdate' =&amp;gt; 'crdate',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'cruser_id' =&amp;gt; 'cruser_id',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'languageField' &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; 'sys_language_uid',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'transOrigPointerField' &amp;nbsp; &amp;nbsp;=&amp;gt; 'l18n_parent',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'transOrigDiffSourceField' =&amp;gt; 'l18n_diffsource',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"delete" =&amp;gt; "deleted",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"enablecolumns" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"disabled" =&amp;gt; "hidden",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"iconfile" =&amp;gt; t3lib_extMgm::extRelPath($_EXTKEY)."res/finger-bw.gif",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'versioningWS' =&amp;gt; TRUE,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'origUid' =&amp;gt; 't3_origuid',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'shadowColumnsForNewPlaceholders' =&amp;gt; 'exerciseid, musclegroupid',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;),&lt;br /&gt;);&lt;br /&gt;$TCA["tx_fitness_exercise2musclegroup"] = Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"ctrl" =&amp;gt; $TCA["tx_fitness_exercise2musclegroup"]["ctrl"],&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"interface" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"showRecordFieldList" =&amp;gt; "sys_language_uid,l18n_parent,l18n_diffsource,hidden,exerciseid,musclegroupid,exercisesort,musclegroupsort,type"&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"feInterface" =&amp;gt; $TCA["tx_fitness_exercise2musclegroup"]["feInterface"],&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"columns" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'sys_language_uid' =&amp;gt; array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'exclude' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'label' &amp;nbsp;=&amp;gt; 'LLL:EXT:lang/locallang_general.xml:LGL.language',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'config' =&amp;gt; array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'type' &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; 'select',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'foreign_table' &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; 'sys_language',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'foreign_table_where' =&amp;gt; 'ORDER BY sys_language.title',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'items' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;array('LLL:EXT:lang/locallang_general.xml:LGL.allLanguages', -1),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;array('LLL:EXT:lang/locallang_general.xml:LGL.default_value', 0)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'l18n_parent' =&amp;gt; array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'displayCond' =&amp;gt; 'FIELD:sys_language_uid:&amp;gt;:0',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'exclude' &amp;nbsp; &amp;nbsp; =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'label' &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; 'LLL:EXT:lang/locallang_general.xml:LGL.l18n_parent',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'config' &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'type' &amp;nbsp;=&amp;gt; 'select',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'items' =&amp;gt; array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;array('', 0),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'foreign_table' &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; 'tx_fitness_exercise2musclegroup',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'foreign_table_where' =&amp;gt; 'AND tx_fitness_exercise2musclegroup.pid=###CURRENT_PID### AND tx_fitness_exercise2musclegroup.sys_language_uid IN (-1,0)',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;'l18n_diffsource' =&amp;gt; array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'config' =&amp;gt; array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'type' =&amp;gt; 'passthrough'&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"hidden" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"exclude" =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"label" =&amp;gt; "LLL:EXT:lang/locallang_general.xml:LGL.hidden",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"config" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"type" =&amp;gt; "check",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"default" =&amp;gt; "0"&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"exerciseid" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"label" =&amp;gt; "LLL:EXT:ttnews_fitness/locallang_db.xml:tt_news.tx_ttnewsfield_exercise",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"config" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"type" =&amp;gt; "select",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"foreign_table" =&amp;gt; "tt_news",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'foreign_table_where' =&amp;gt; 'AND type=3',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"maxitems" =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'localizeReferences' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"musclegroupid" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"label" =&amp;gt; "LLL:EXT:ttnews_fitness/locallang_db.xml:tt_news.tx_ttnewsfield_musclegroup",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"config" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"type" =&amp;gt; "select",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"foreign_table" =&amp;gt; "tx_fitness_musclegroup",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"maxitems" =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'localizeReferences' =&amp;gt; 1,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"exercisesort" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"config" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"type" =&amp;gt; "passthrough",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"musclegroupsort" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"config" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;"type" =&amp;gt; "passthrough",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;/*"type" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"exclude" =&amp;gt; 0,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;"label" =&amp;gt; "LLL:EXT:ttnews_fitness/locallang_db.xml:tt_news.tx_ttnewsfield_musclegroup_type",&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'config' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'type' =&amp;gt; 'select',&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;'items' =&amp;gt; array(&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;array('LLL:EXT:ttnews_fitness/locallang_db.xml:musclegroup_type.1', 'Primary'),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;array('LLL:EXT:ttnews_fitness/locallang_db.xml:musclegroup_type.2', 'Secondary'),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;),*/&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"types" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"0" =&amp;gt; Array("showitem" =&amp;gt; "sys_language_uid;;;;1-1-1, l18n_parent, l18n_diffsource, hidden;;1, title;;;;2-2-2, exerciseid;;;;3-3-3, musclegroupid, exercisesort, musclegroupsort")&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;),&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;"palettes" =&amp;gt; Array (&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;"1" =&amp;gt; Array("showitem" =&amp;gt; "")&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;)&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;Получаем следующий результат в BE:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-QVwikR2LstY/TyRWZC-sRkI/AAAAAAAAATM/wT5t2GsE7rQ/s1600/irre.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="129" src="http://1.bp.blogspot.com/-QVwikR2LstY/TyRWZC-sRkI/AAAAAAAAATM/wT5t2GsE7rQ/s320/irre.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Как видим, такая форма более удобна, т.к. позволяет создавать дочерние записи прямо внутри родительской. Больше информации о IRRE можно найти &lt;a href="http://www.gyrkalo.dp.ua/blogger/pdf/Inline_Relational_Record_Editing_(IRRE).pdf" target="_blank"&gt;здесь&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Нужно сказать, что после добавления всех вышеуказанных изменений в файле ext_tables.php, форма ввода tt_news содержать новых полей&amp;nbsp;не будет. Для этого нужно добавить еще 2 строки:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;t3lib_div::loadTCA("tt_news");&lt;br /&gt;t3lib_extMgm::addTCAcolumns("tt_news",$fitnessColumns,1);&lt;br /&gt;&lt;br /&gt;Возможно у кого-то возникнет вопрос: "А нафига мне Новости с кучей всяких дополнительных полей, которые нужны в одном случае, а в другом уже не нужны?". Все можно настроить. Для того, чтобы стандартные новости не содержали лишних полей создается дополнительный индивидуально настроенный тип записи. Изначально новости имеют 3 типа записей: Новости, Статьи, Внешняя ссылка. Создать еще один тип - проще простого. В файл&amp;nbsp;ext_tables.php своего расширения добавляем:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;$GLOBALS['TCA']['tt_news']['columns']['type']['config']['items'][] = Array('LLL:EXT:ttnews_fitness/locallang_db.xml:tt_news.type.I.3', 3);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;$GLOBALS['TCA']['tt_news']['ctrl']['typeicons']['3'] = t3lib_extMgm::extRelPath($_EXTKEY)."res/ball-ico.gif";&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Что дали последние 2 строки? Первое, добавили новый тип записи к новостям с кодом 3. Текстовое название этого типа сидит в файле locallang_db.xml в строке:&lt;br /&gt;&lt;br /&gt;&amp;lt;label index="tt_news.type.I.3"&amp;gt;Exercise&amp;lt;/label&amp;gt;&lt;br /&gt;&lt;br /&gt;Второе, новому типу записей сопоставлена иконка, которая сидит в каталоге res нашего расширения с названием - ball-ico.gif (16 на 16 пикселей).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;А для того, чтобы новые поля в "новых новостях" были размещены в нужном и удобном для пользователя порядке добавляются такие строки:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;$GLOBALS['TCA']['tt_news']['types']['3']['showitem'] = 'hidden, type;;;;1-1-1,title;;;;2-2-2,tx_fitness_shared_office_suitability,tx_fitness_workarea,bodytext;;2;richtext:rte_transform[flag=rte_enabled|mode=ts];4-4-4,tx_fitness_how2;;2;richtext:rte_transform[flag=rte_enabled|mode=ts];4-4-4,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;               &lt;/span&gt;--div--;LLL:EXT:ttnews_fitness/locallang_db.xml:exercise_info.name,tx_fitness_easier;;2;richtext:rte_transform[flag=rte_enabled|mode=ts];4-4-4,tx_fitness_harder;;2;richtext:rte_transform[flag=rte_enabled|mode=ts];4-4-4,tx_fitness_hints;;2;richtext:rte_transform[flag=rte_enabled|mode=ts];4-4-4,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;               &lt;/span&gt;--div--;LLL:EXT:ttnews_fitness/locallang_db.xml:exercise_relations, category;;;;3-3-3,tx_fitness_purpose,tx_fitness_equipment,tx_fitness_equivalent_gym_equipment,mainmusclegroups,musclegroups,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;               &lt;/span&gt;--div--;LLL:EXT:tt_news/locallang_tca.xml:tt_news.tabs.media, tx_damnews_dam_images,tx_fitness_musclegroupimage,tx_fitness_vimeo;;;;1-1-1,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;               &lt;/span&gt;--div--;LLL:EXT:tt_news/locallang_tca.xml:tt_news.tabs.access, starttime,endtime,fe_group,editlock';&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Полный текст файла&amp;nbsp;ext_tables.php можно взять &lt;a href="http://www.gyrkalo.dp.ua/blogger/fitness/ext_tables.php.txt" target="_blank"&gt;здесь&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;P.S. Это не статья, а по объему уже "Война и Мир"...:)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-7814054826152184635?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/7814054826152184635/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2012/01/ttnews_28.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/7814054826152184635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/7814054826152184635'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2012/01/ttnews_28.html' title='tt_news - добавление новых полей к плагину'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-nXmguFOEECs/TyP8uuAVYtI/AAAAAAAAAR8/W2E18eWoS9w/s72-c/1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-1559503658648121193</id><published>2012-01-25T21:11:00.001+02:00</published><updated>2012-01-28T22:24:24.741+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='typo3'/><category scheme='http://www.blogger.com/atom/ns#' term='tt_news'/><title type='text'>Хвалебная ода tt_news или что можно делать на сайте с его помощью</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Вступление&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;TT_NEWS&lt;/b&gt; - плагин №1. Я очень люблю этот плагин. Но люблю его не за то, что он какой-то выдающийся, а за то, что он универсальный и к нему дописано множество полезных плагинов. Функционал tt_news, как правило, покрывает основные потребности любого интернет сайта на 50-90%. Возможно, кто-то возразит и скажет, что не все сайты содержат разделы Новости и Статьи, поэтому нельзя преувеличивать его значимость. Но ведь любой сайт имеет списки и перечни&amp;nbsp;товаров, услуг,&amp;nbsp;ссылок, картинок, банеров &amp;nbsp;т.д. и т.п.&lt;br /&gt;&lt;br /&gt;Поэтому, везде где есть списки - применим tt_news! Тем более, если к списку должен быть прикручен еще и детальный просмотр информации.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: -webkit-auto;"&gt;Отсюда вывод - название tt_news - неверное! Ему бы называться чем-то типа: Listing,&amp;nbsp;Universal list... Правда, такое название было бы оправдано на все 100%, если можно было бы добавлять дополнительные поля прямо из News Admin. Но это не беда - все это можно сделать самому (см. дальше).&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;Но есть и печальный момент для tt_news - годы его сочтены. С переходом от Typo3 на Flow3&amp;nbsp;pibase-плагины канут в лету и наступит эра extbase-плагинов. Австралийский разработчик Georg Ringer, дай Бог ему здоровья :), время зря не терял и уже принялся за написание аналогичного плагина под названием -&amp;nbsp;News system ( &lt;a href="http://typo3.org/extensions/repository/view/news/current/" target="_blank"&gt;news&lt;/a&gt; ) на extbase. Думаю, что данный плагин обречён на успех и заслужит такую же популярность как и tt_news, а также, со временем, обрастет таким же количеством полезных и дополняющих его плагинов.&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;&lt;b&gt;От слов к делу&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;Моя теория о полезности tt_news будет бессмысленной, если я не покажу это на практике.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;Недавно меня попросили сделать небольшой сайт задачей которого являлась публикация базы данных физических упражнений для ряда офисных тренажеров. Или другими словами, &amp;nbsp;у людей есть тренажеры, которые они продают для офисов. На них можно выполнять определенные упражнения и тренировать различные части тела. Вот эти упражнения и нужно было отобразить на сайте.&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;Как видим - есть список и к нему нужен детальный просмотр. Т.е. для решения задачи сам доктор прописал tt_news. Зачем мне городить новый экст, если основной функционал уже заложен в данном приложении?&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;А вот&amp;nbsp;&lt;a href="http://www.officeworkouts.co.uk/" target="_blank"&gt;сайт&lt;/a&gt;&amp;nbsp;о котором идет речь. &lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;Вот список того, что нужно было сделать для данного сайта:&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;1. Изменить структуру базы данных - добавить новые поля и таблицы.&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;2. Добавить ряд полей к стандартным полям tt_news &lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;3. Организовать вывод новых полей на страницы сайта&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;4. Организовать фильтры и поиск по сайту&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;О том как реализовать всё это читайте в следующих статьях. &lt;a href="http://gyrkalo.blogspot.com/2012/01/ttnews_28.html"&gt;Читать продолжение&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-1559503658648121193?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/1559503658648121193/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2012/01/ttnews.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/1559503658648121193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/1559503658648121193'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2012/01/ttnews.html' title='Хвалебная ода tt_news или что можно делать на сайте с его помощью'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-8535410737426744975</id><published>2012-01-18T21:27:00.003+02:00</published><updated>2012-02-03T22:41:54.977+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='allow'/><category scheme='http://www.blogger.com/atom/ns#' term='tags'/><category scheme='http://www.blogger.com/atom/ns#' term='typo3'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>HTML отображается на странице как html-код</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;&lt;br /&gt;Добавил я недавно в tt_news новое поле для вставки html-кода, отвечающего за отображение видео роликов с youtube и vimeo. Но вместо ролика на странице отображался мой html-код. Если у кого-то будет подобная ситуация, посмотрите в первую очередь на список допустимых тегов:&lt;br /&gt;&lt;br /&gt;styles.content.links {&lt;br /&gt;&amp;nbsp; allowTags &amp;nbsp;(&amp;nbsp; &lt;br /&gt;&amp;nbsp;b,i,u,a,img,br,div,center,........,&lt;b&gt;iframe&lt;/b&gt;&lt;br /&gt;&amp;nbsp; )&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;После добавления тега iframe к данному списку, мои видео ролики начали отображаться на странице как положено.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P.S. &lt;/b&gt;Список допустимых тегов нужно расположить в разделе констант Typo3 шаблона.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-8535410737426744975?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/8535410737426744975/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2012/01/html-html.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/8535410737426744975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/8535410737426744975'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2012/01/html-html.html' title='HTML отображается на странице как html-код'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-3486602310921332229</id><published>2012-01-18T21:11:00.004+02:00</published><updated>2012-02-06T12:20:21.754+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='paragraph'/><category scheme='http://www.blogger.com/atom/ns#' term='empty'/><category scheme='http://www.blogger.com/atom/ns#' term='typo3'/><title type='text'>Удаление пустых параграфов</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;На последних своих двух сайтах, которые работают на Typo3 версии - 4.5.8 и 4.6.3, и используют новый шаблонизатор - &lt;b&gt;Fluid, &lt;/b&gt;я столкнулся с необычным для себя явлением - на страницах сайта появлялась куча лишних и совершенно пустых параграфов - &amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;. Причем я заметил, что параграфы "приходили" не с контентом, а уже из html-шаблона. А точнее, они появлялись на том месте, где в шаблоне был перенос строки. Убирая enter-ы из шаблона и формируя свой html в одну сплошную длинную строку ненужные параграфы пропадали.&amp;nbsp;Но как Вы сами понимаете это был некрасивый выход из положения и поэтому мне пришлось искать другое решение.&lt;br /&gt;&lt;br /&gt;Первое, что пришло в голову это попробовать настройку:&lt;br /&gt;RTE.default.proc.dontConvBRtoParagraph = 1&lt;br /&gt;Понятное дело, что она не помогла, т.к. работает с контентом а не шаблоном.&lt;br /&gt;&lt;br /&gt;А вот эти настройки принесли желаемый результат:&lt;br /&gt;&lt;br /&gt;lib.parseFunc_RTE {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;nonTypoTagStdWrap.encapsLines {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# Wrap all lines which are not wrapped at all with the &amp;lt;p&amp;gt; tag.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;b&gt;nonWrappedTag &amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;innerStdWrap_all &amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Однако&amp;nbsp;nonWrappedTag&amp;gt; сносит напрочь все параграфы со страницы, даже те которые присутствуют в контенте. Поэтому, для их сохранения пришлось поднастроить tt_content:&lt;br /&gt;&lt;br /&gt;tt_content {&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;text.20.parseFunc {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;# no wrapping of RTE lines&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;nonTypoTagStdWrap.encapsLines{&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;b&gt;&amp;nbsp;nonWrappedTag = P&lt;/b&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;addAttributes.P.class = text&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P.S.&lt;/b&gt;&amp;nbsp;Все указанные строки необходимо расположить в разделе Setup (Настройка) Typo3 шаблона.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-3486602310921332229?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/3486602310921332229/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2012/01/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/3486602310921332229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/3486602310921332229'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2012/01/blog-post.html' title='Удаление пустых параграфов'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-1260954912622565961</id><published>2011-12-13T21:59:00.003+02:00</published><updated>2011-12-14T08:51:10.315+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='slide'/><category scheme='http://www.blogger.com/atom/ns#' term='меню'/><category scheme='http://www.blogger.com/atom/ns#' term='typo3'/><category scheme='http://www.blogger.com/atom/ns#' term='menu'/><category scheme='http://www.blogger.com/atom/ns#' term='картинки'/><title type='text'>Делаем стильное меню с картинками (SlideDownBoxMenu) на TypoScript</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;Есть такое замечательное и оригинальное двухуровневое меню под названием&amp;nbsp;&lt;b&gt;SlideDownBoxMenu. &lt;/b&gt;Данное меню хорошо тем, что каждому пункту меню 1-го уровня сопоставляется тематическая картинка, которая делает меню интуитивно-понятным. Ну, а про прикольную popup-анимацию я уже и не говорю.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-FraUV9ee8Fc/Tue-xugWLYI/AAAAAAAAARI/elf1Z2Uf2yA/s1600/0.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="245" src="http://3.bp.blogspot.com/-FraUV9ee8Fc/Tue-xugWLYI/AAAAAAAAARI/elf1Z2Uf2yA/s320/0.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Поглядеть и познакомиться со&amp;nbsp;SlideDownBoxMenu&amp;nbsp;поближе можно &lt;a href="http://tympanus.net/Tutorials/SlideDownBoxMenu/" target="_blank"&gt;здесь&lt;/a&gt;&amp;nbsp;или на одном из моих заброшенных (по вине очень занятого хозяина)&amp;nbsp;&lt;a href="http://www.ukrayna.dp.ua/" target="_blank"&gt;сайтов&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Для того, чтобы такое меню заработало на сайте Typo3 даже написан специальный экст - &lt;a href="http://typo3.org/extensions/repository/view/t3s_slidedownboxmenu/current/" target="_blank"&gt;t3s_slidedownboxmenu&lt;/a&gt;. Однако, я не сторонник применять эксты там, где можно обойтись TypoScript-ом. Тем более, что верстка самого меню не так уж и сложна, но и не тривиальна.&lt;br /&gt;&lt;br /&gt;Сверстанное меню должно иметь следующий вид:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;ul id="sdt_menu" class="sdt_menu"&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;&amp;lt;li&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;&amp;lt;a href="#"&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;&amp;lt;img src="images/1.jpg" alt=""/&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;&amp;lt;span class="sdt_active"&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;&amp;lt;span class="sdt_wrap"&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;       &lt;/span&gt;&amp;lt;span class="sdt_link"&amp;gt;Меню&amp;lt;/span&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;       &lt;/span&gt;&amp;lt;span class="sdt_descr"&amp;gt;Короткое описание&amp;lt;/span&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;&amp;lt;/span&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;&amp;lt;li&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;&amp;lt;a href="#"&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;&amp;lt;img src="images/2.jpg" alt=""/&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;&amp;lt;span class="sdt_active"&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;&amp;lt;span class="sdt_wrap"&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;       &lt;/span&gt;&amp;lt;span class="sdt_link"&amp;gt;Меню2&amp;lt;/span&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;       &lt;/span&gt;&amp;lt;span class="sdt_descr"&amp;gt;Короткое описание2&amp;lt;/span&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;&amp;lt;/span&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;&amp;lt;div class="sdt_box"&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;       &lt;/span&gt;&amp;lt;a href="#"&amp;gt;Подменю1&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;       &lt;/span&gt;&amp;lt;a href="#"&amp;gt;Подменю2&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;       &lt;/span&gt;&amp;lt;a href="#"&amp;gt;Подменю3&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;&amp;lt;li&amp;gt;...&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;&lt;br /&gt;Тут основная загвоздка в картинке. Но это все ерунда при наличии небольшого количества серого вещества! Привожу хорошо задокументированный рабочий вариант скрипта:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;lib.slidemenu = COA&lt;br /&gt;&lt;i&gt;&lt;b&gt;# Создаем контейнер для пунктов меню - UL&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;lib.slidemenu.wrap = &amp;lt;ul id="sdt_menu" class="sdt_menu"&amp;gt; | &amp;lt;/ul&amp;gt;&lt;br /&gt;lib.slidemenu.10 = HMENU&lt;br /&gt;lib.slidemenu.10 {&lt;br /&gt;&amp;nbsp; noBlur = 1&lt;br /&gt;&amp;nbsp; &lt;i&gt;&lt;b&gt;# Берем для меню только корневые страницы сайта&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&amp;nbsp; entryLevel = 0&lt;br /&gt;&amp;nbsp; &lt;i&gt;&lt;b&gt;# Данные страницы из меню исключаем&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&amp;nbsp; excludeUidList = 14,23,25&lt;br /&gt;&amp;nbsp; 1 = TMENU&lt;br /&gt;&amp;nbsp; 1 {&lt;br /&gt;&amp;nbsp; &amp;nbsp; noBlur = 1&lt;br /&gt;&amp;nbsp; &amp;nbsp; expAll=1&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; NO {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;i&gt;&lt;b&gt;# Каждый пункт меню это &amp;nbsp;- LI&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp;wrapItemAndSub = &amp;lt;li&amp;gt; | &amp;lt;/li&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;nbsp;&lt;i&gt;&amp;nbsp;&lt;b&gt;# Запрещаем Typo3 делать ссылку для данного пункта меню&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;nbsp;&amp;nbsp;# (т.к. верстаем все сами)&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;nbsp;&amp;nbsp;doNotLinkIt = 1&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;i&gt;&lt;b&gt;# Ссылку делаем сами (тут только её начало)&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp;allWrap.stdWrap.dataWrap = &amp;lt;a href="{field:alias}.html"&amp;gt; |&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;i&gt;&lt;b&gt;# Первой внутри ссылки будет картинка (откуда она берется описывается ниже)&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp;beforeImg.import = uploads/media/&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;nbsp;&amp;nbsp;beforeImg.import.field = media&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;nbsp;&amp;nbsp;beforeImg.import.listNum = 0&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;i&gt;&lt;b&gt;# Перед именем страницы, согласно верстке, должна быть такая конструкция:&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp;before.stdWrap.dataWrap = &amp;lt;span class="sdt_active"&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class="sdt_wrap"&amp;gt;&amp;lt;span class="sdt_link"&amp;gt; |&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;i&gt;&lt;b&gt;# После имени страницы, согласно верстке, должна быть такая конструкция:&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp;after.stdWrap.dataWrap = | &amp;lt;/span&amp;gt;&amp;lt;span class="sdt_descr"&amp;gt;{field:subtitle}&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;i&gt;&lt;b&gt;# Для текущего пункта меню все делается аналогично. Только добавляется класс - current&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; ACT = 1&lt;br /&gt;&amp;nbsp; &amp;nbsp; ACT {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; wrapItemAndSub = &amp;lt;li class="current active"&amp;gt; | &amp;lt;/li&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp;allWrap.stdWrap.dataWrap = &amp;lt;a href="{field:alias}.html"&amp;gt; |&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp;beforeImg.import = uploads/media/&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;nbsp;&amp;nbsp;beforeImg.import.field = media&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;nbsp;&amp;nbsp;beforeImg.import.listNum = 0&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp;before.stdWrap.dataWrap = &amp;lt;span class="sdt_active"&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class="sdt_wrap"&amp;gt;&amp;lt;span class="sdt_link"&amp;gt; |&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp;after.stdWrap.dataWrap = | &amp;lt;/span&amp;gt;&amp;lt;span class="sdt_descr"&amp;gt;{field:subtitle}&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp;doNotLinkIt = 1&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; CUR = 1&lt;br /&gt;&amp;nbsp; &amp;nbsp; CUR {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; wrapItemAndSub = &amp;lt;li class="current active"&amp;gt; | &amp;lt;/li&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp;allWrap.stdWrap.dataWrap = &amp;lt;a href="{field:alias}.html"&amp;gt; |&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp;beforeImg.import = uploads/media/&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;nbsp;&amp;nbsp;beforeImg.import.field = media&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;nbsp;&amp;nbsp;beforeImg.import.listNum = 0&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp;before.stdWrap.dataWrap = &amp;lt;span class="sdt_active"&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class="sdt_wrap"&amp;gt;&amp;lt;span class="sdt_link"&amp;gt; |&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp;after.stdWrap.dataWrap = | &amp;lt;/span&amp;gt;&amp;lt;span class="sdt_descr"&amp;gt;{field:subtitle}&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp;doNotLinkIt = 1&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; &lt;i&gt;&lt;b&gt;# Верстка пунктов меню второго уровня. Тут все просто и без комментариев.&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&amp;nbsp; 2 = TMENU&lt;br /&gt;&amp;nbsp; 2 {&lt;br /&gt;&amp;nbsp; &amp;nbsp; noBlur = 1&lt;br /&gt;&amp;nbsp; &amp;nbsp; expAll=1&lt;br /&gt;&amp;nbsp; &amp;nbsp; wrap = &amp;lt;div class="sdt_box"&amp;gt; | &amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; NO {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; linkWrap = |&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; CUR = 1&lt;br /&gt;&amp;nbsp; &amp;nbsp; CUR {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; linkWrap = |&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp;ATagParams = class="current"&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Теперь о сопоставлении картинок и страниц.&lt;br /&gt;&lt;br /&gt;Каждый начинающий тайпер наверняка видел, что страница сайта в админке имеет ряд свойств, которые разделены на закладки. Причем закладка Ресурсы/Resources часто вызывает недоумение - что это за файлы которые можно атачить к странице? Ответ: можно присоединять &amp;nbsp;любые файлы в том числе и картинки, для решения таких задач как эта (а можно, например, приатаченные картинки использовать и как фон для данной страницы).&lt;br /&gt;&lt;br /&gt;Вот так это делается:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-oz_dwFoSab0/TuhHVTld9tI/AAAAAAAAARQ/SJNkHNoMNkQ/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="123" src="http://1.bp.blogspot.com/-oz_dwFoSab0/TuhHVTld9tI/AAAAAAAAARQ/SJNkHNoMNkQ/s320/1.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Все что мы здесь атачим Typo3 автоматически сохраняет в папке&amp;nbsp;uploads/media/. Нумерация файлов в списке начинается с нуля. Имя поля которое содержит список имеет имя - media.&lt;br /&gt;Думаю, что теперь ясны 3 магические строки скрипта:&lt;br /&gt;beforeImg.import = uploads/media/&lt;br /&gt;beforeImg.import.field = media&lt;br /&gt;beforeImg.import.listNum = 0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Для лучшего понимания работы скрипта советую почитать &lt;a href="http://typo3.org/documentation/document-library/references/doc_core_tsref/4.1.0/view/10/8/" target="_blank"&gt;мануал&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P.S.&lt;/b&gt; Я абсолютно не претендую на оптимальность кода и с радостью погляжу на более совершенный скрипт.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-1260954912622565961?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/1260954912622565961/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2011/12/slidedownboxmenu-typoscript.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/1260954912622565961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/1260954912622565961'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2011/12/slidedownboxmenu-typoscript.html' title='Делаем стильное меню с картинками (SlideDownBoxMenu) на TypoScript'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-FraUV9ee8Fc/Tue-xugWLYI/AAAAAAAAARI/elf1Z2Uf2yA/s72-c/0.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-5051628759444653764</id><published>2011-12-06T11:28:00.001+02:00</published><updated>2011-12-06T11:36:46.057+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='typo3'/><category scheme='http://www.blogger.com/atom/ns#' term='tt_news'/><category scheme='http://www.blogger.com/atom/ns#' term='register:newsCategoryUid'/><title type='text'>Не работает register:newsCategoryUid</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;Нужно было мне получить название категории новостей по её id, а точнее по значению регистра -&amp;nbsp;&lt;b&gt;register:newsCategoryUid&lt;/b&gt;&amp;nbsp;(для бредкрамба на странице единичной новости).&lt;br /&gt;&lt;br /&gt;Делал примерно так:&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;20 = RECORDS&lt;br /&gt;20 {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;source = {register:newsCategoryUid}&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;source.insertData = 1&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;tables = tt_news_cat&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;conf.tt_news_cat = TEXT&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;conf.tt_news_cat.field = title&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;wrap = &amp;lt;li&amp;gt; | &amp;lt;/li&amp;gt;&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;И не работает, хоть убей! После нескольких часов мук, решение все же было найдено.&lt;br /&gt;В шаблон единичной новости добавил следующий HTML-код:&lt;br /&gt;&amp;lt;div style="display:none;"&amp;gt;###NEWS_CATEGORY###&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;После этого, регистр сразу же начал заполняться значением, а мой запрос начал нормально отрабатывать.&lt;br /&gt;&lt;br /&gt;Поясню, style="display:none;" написал лишь для того, чтобы на детальной странице новостей категория была скрыта, здесь она мне не нужна.&lt;br /&gt;&lt;br /&gt;Возможно, для кого-то это и само-собой понятно, но лично я был уверен, что этот регистр tt_news заполняется всегда и при любых условиях.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-5051628759444653764?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/5051628759444653764/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2011/12/registernewscategoryuid.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/5051628759444653764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/5051628759444653764'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2011/12/registernewscategoryuid.html' title='Не работает register:newsCategoryUid'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-5939232442466839385</id><published>2011-11-24T16:35:00.005+02:00</published><updated>2011-12-07T14:34:16.401+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='category'/><category scheme='http://www.blogger.com/atom/ns#' term='typo3'/><category scheme='http://www.blogger.com/atom/ns#' term='tt_news'/><category scheme='http://www.blogger.com/atom/ns#' term='menu'/><title type='text'>Меню из категорий новостей (tt_news) с картинками и на разных языках</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Казалось бы, &lt;b&gt;tt_news&lt;/b&gt; имеет специальный тип вывода категорий - &lt;b&gt;CATMENU&lt;/b&gt;. Но то ли скудно у него обстоят дела с картинками, то ли я с чем-то не до конца разобрался... Короче, решил сделать вывод списка категорий с помощью TypoScript. И пока не жалею.&lt;br /&gt;&lt;br /&gt;Внешне все выглядит так:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-pBgvsS3cN1M/Ts5Hw5K5YyI/AAAAAAAAALA/GiD7KWVjliw/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="298" src="http://1.bp.blogspot.com/-pBgvsS3cN1M/Ts5Hw5K5YyI/AAAAAAAAALA/GiD7KWVjliw/s400/1.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Теперь по функционалу:&lt;br /&gt;&lt;br /&gt;1. Данное меню отображает названия и изображения всех подкатегорий, которые  &lt;br /&gt;входят в состав категории - parent_category, которая у меня задана в константах шаблона страницы.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-f8nQFte3NI0/Ts5KZf4VerI/AAAAAAAAALM/Q2Ru9Qwn-BE/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="78" src="http://3.bp.blogspot.com/-f8nQFte3NI0/Ts5KZf4VerI/AAAAAAAAALM/Q2Ru9Qwn-BE/s400/2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-OGiP-JXhNeU/Ts5LHHeexJI/AAAAAAAAALY/7uUSFnDB0qI/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="191" src="http://3.bp.blogspot.com/-OGiP-JXhNeU/Ts5LHHeexJI/AAAAAAAAALY/7uUSFnDB0qI/s400/3.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;2. Клик по картинке или названию категории выводит записи новостей, относящиеся только к данной категории.&lt;br /&gt;3. Т.к. сайт многоязычный, то при смене языка меняются и названия категорий. Это был самый трудный момент реализации, т.к. локализация категорий в новостях выполнена довольно странно и нетрадиционно для Typo3.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-VLnk9XdVp9Y/Ts5NvQt6Z8I/AAAAAAAAALk/vHX7lHzsA9s/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="205" src="http://4.bp.blogspot.com/-VLnk9XdVp9Y/Ts5NvQt6Z8I/AAAAAAAAALk/vHX7lHzsA9s/s400/4.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Вот готовый typoscript для решения данной задачи:&lt;br /&gt;&lt;br /&gt;lib.catmenu &amp;gt;&lt;br /&gt;lib.catmenu = COA&lt;br /&gt;lib.catmenu {&lt;br /&gt;10 = CONTENT&lt;br /&gt;10 {&lt;br /&gt;wrap = |&lt;br /&gt;table = tt_news_cat&lt;br /&gt;select {&lt;br /&gt;# CONCAT(title,"|",title_lang_ol) - сливает все языки в одну строку&lt;br /&gt;# разделителем служит символ палка - "|"&lt;br /&gt;selectFields = uid, image, CONCAT(title,"|",title_lang_ol) AS catname&lt;br /&gt;pidInList = {$news_folder_id}&lt;br /&gt;orderBy = uid&lt;br /&gt;where = parent_category={$parent_category} AND deleted=0 AND hidden=0&lt;br /&gt;}&lt;br /&gt;renderObj = COA&lt;br /&gt;renderObj {&lt;br /&gt;wrap = &amp;lt;div class="category"&amp;gt;|&amp;lt;/div&amp;gt;&lt;br /&gt;10 = COA&lt;br /&gt;10 {&lt;br /&gt;# задаем id страницы которая будет отображать новости&lt;br /&gt;# данной категории&lt;br /&gt;stdWrap.typolink.parameter.dataWrap = {$view_page_id}&lt;br /&gt;# чтобы наша следующая страница со списком новостей знала&lt;br /&gt;# id категории с которой нужно работать передаем ей &lt;br /&gt;# в качестве параметра - tx_ttnews[cat]={field:uid}&lt;br /&gt;stdWrap.typolink.additionalParams.dataWrap = &amp;amp;no_cache=1&amp;amp;tx_ttnews[cat]={field:uid}&lt;br /&gt;stdWrap.typolink.wrap = |&lt;br /&gt;stdWrap.typolink.ATagParams =&lt;br /&gt;# вывод картинки&lt;br /&gt;10 = IMAGE&lt;br /&gt;10{&lt;br /&gt;required=1&lt;br /&gt;wrap = |&lt;br /&gt;file.import=uploads/pics/&lt;br /&gt;file.import.field=image&lt;br /&gt;file.width=235c&lt;br /&gt;file.height=235c&lt;br /&gt;}&lt;br /&gt;# вывод названия категории&lt;br /&gt;20 = COA&lt;br /&gt;20 {&lt;br /&gt;wrap = &amp;lt;h3&amp;gt;|&amp;lt;/h3&amp;gt;&lt;br /&gt;10 = TEXT&lt;br /&gt;10 {&lt;br /&gt;field = catname&lt;br /&gt;# разбиваем поле catname на элементы массива&lt;br /&gt;# за счет разделителя - | (char code = 124)&lt;br /&gt;# и берем нужный элемент по коду языка сайта - GP:L &lt;br /&gt;split {&lt;br /&gt;token.char = 124&lt;br /&gt;returnKey.data = GP:L&lt;br /&gt;}&lt;br /&gt;} &lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P.S.&lt;/b&gt; Как это выглядит в живую можно посмотреть &lt;a href="http://www.youtube.com/watch?v=-plkK2e-pOk" target="_blank"&gt;здесь&lt;/a&gt;, в видео ролике или на действующем &lt;a href="http://www.irynakarpova.com/catalog/napravlenija.html" target="_blank"&gt;сайте&lt;/a&gt;.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;b&gt;P.S. (2)&lt;/b&gt; Не забудьте настроить RealUrl (realurlconf.php) для красивого отображения категорий в адресной строке браузера. Вот необходимые для этого строки:&lt;br /&gt;// news categories&lt;br /&gt;'category_name' =&amp;gt; array (&lt;br /&gt;array(&lt;br /&gt;'GETvar' =&amp;gt; 'tx_ttnews[cat]',&lt;br /&gt;'lookUpTable' =&amp;gt; array(&lt;br /&gt;'table' =&amp;gt; 'tt_news_cat',   &lt;br /&gt;'id_field' =&amp;gt; 'uid',&lt;br /&gt;'alias_field' =&amp;gt; 'title',&lt;br /&gt;'addWhereClause' =&amp;gt; ' AND NOT deleted',&lt;br /&gt;'useUniqueCache' =&amp;gt; 1,&lt;br /&gt;'useUniqueCache_conf' =&amp;gt; array(&lt;br /&gt;'strtolower' =&amp;gt; 1,&lt;br /&gt;'spaceCharacter' =&amp;gt; '-',&lt;br /&gt;),&lt;br /&gt;&lt;br /&gt;), &lt;br /&gt;&lt;br /&gt;), &lt;br /&gt;&lt;br /&gt;),&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-5939232442466839385?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/5939232442466839385/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2011/11/ttnews.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/5939232442466839385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/5939232442466839385'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2011/11/ttnews.html' title='Меню из категорий новостей (tt_news) с картинками и на разных языках'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-pBgvsS3cN1M/Ts5Hw5K5YyI/AAAAAAAAALA/GiD7KWVjliw/s72-c/1.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-9066898875886206028</id><published>2011-11-18T23:26:00.001+02:00</published><updated>2011-11-22T08:52:20.513+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='logout'/><category scheme='http://www.blogger.com/atom/ns#' term='typo3'/><category scheme='http://www.blogger.com/atom/ns#' term='link'/><title type='text'>Линк для разлогинивания пользователя (logout link)</title><content type='html'>Простейший TypoScript для генерации ссылки позволяющей сделать пользователю логаут. На самом деле, в инете такого добра полно, но надоело каждый раз куда-то лазить и подглядывать, а так будет всегда под рукой:&lt;br /&gt;lib.logout = TEXT&lt;br /&gt;lib.logout {&lt;br /&gt;wrap = &amp;lt;div id="logout"&amp;gt; | &amp;lt;/div&amp;gt;&lt;br /&gt;value= Logout&lt;br /&gt;lang.fr = Déconnexion&lt;br /&gt;typolink.parameter.data = page:uid&lt;br /&gt;typolink.additionalParams.cObject = COA&lt;br /&gt;typolink.additionalParams.cObject {&lt;br /&gt;10 = TEXT&lt;br /&gt;10.value = &amp;logintype=logout&lt;br /&gt;20 = TEXT&lt;br /&gt;20.data = GP : L&lt;br /&gt;20.wrap = &amp;L=|&lt;br /&gt;20.required = 1&lt;br /&gt;}  &lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-9066898875886206028?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/9066898875886206028/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2011/11/logout-link.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/9066898875886206028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/9066898875886206028'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2011/11/logout-link.html' title='Линк для разлогинивания пользователя (logout link)'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-8499029988584243172</id><published>2011-11-08T16:00:00.000+02:00</published><updated>2011-11-08T16:00:40.551+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='алиас'/><category scheme='http://www.blogger.com/atom/ns#' term='newsFiles'/><category scheme='http://www.blogger.com/atom/ns#' term='typo3'/><category scheme='http://www.blogger.com/atom/ns#' term='tt_news'/><title type='text'>Алиасы для файлов в новостях или этот сумасшедший TypoScript</title><content type='html'>Думаю все знают, что к каждой новости в Typo3 можно приатачить какие-либо файлы.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-q9viw2oBduM/Trk0oZX2zBI/AAAAAAAAAKQ/XJJ0Ln0H-Sk/s1600/1.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="118" width="400" src="http://3.bp.blogspot.com/-q9viw2oBduM/Trk0oZX2zBI/AAAAAAAAAKQ/XJJ0Ln0H-Sk/s400/1.png" /&gt;&lt;/a&gt;&lt;/div&gt;Иногда такие файлы нужно вывести в специальном боксе или "киоске". Но что делать если имена файлов очень длинные, без пробелов и в отведенную для них область просто не помещаются? &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-w_As1Kv7rMI/Trk0wDv2ttI/AAAAAAAAAKc/3MWdWObd_aU/s1600/1-1.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="249" width="250" src="http://2.bp.blogspot.com/-w_As1Kv7rMI/Trk0wDv2ttI/AAAAAAAAAKc/3MWdWObd_aU/s400/1-1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Выход один - необходимо каждому файлу сопоставить алиас. Как это сделать? Это можно реализовать с помощью чумачечего TypoScript, причем без установки дополнительных расширений.&lt;br /&gt;Для начала нужно определиться с полем, которое будет содержать в себе алиасы файлов. Т.к. у меня картинок в новостях не было, то я решил заюзать стандартное и родное для tt_news поле - imagecaption.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-wGokFn6O-TQ/Trk0_ITNF0I/AAAAAAAAAKo/1cqUqXpvKfI/s1600/2.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="153" width="400" src="http://1.bp.blogspot.com/-wGokFn6O-TQ/Trk0_ITNF0I/AAAAAAAAAKo/1cqUqXpvKfI/s400/2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Теперь немного "интуитивно-понятного" скрипта, который мы размещаем в нашем шаблоне:&lt;br /&gt;&lt;blockquote&gt;plugin.tt_news {&lt;br /&gt;  newsFiles {&lt;br /&gt;    labelStdWrap.cObject = COA&lt;br /&gt;    labelStdWrap.cObject {&lt;br /&gt;       10 = TEXT&lt;br /&gt;       10 {&lt;br /&gt;           field = imagecaption&lt;br /&gt;           split.token.char = 10&lt;br /&gt;           split.returnKey.data = register : FILE_NUM&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       20 = LOAD_REGISTER&lt;br /&gt;       20 {&lt;br /&gt;           FILE_NUM.cObject = TEXT&lt;br /&gt;           FILE_NUM.cObject.data = register:FILE_NUM&lt;br /&gt;           FILE_NUM.cObject.wrap = | +1&lt;br /&gt;           FILE_NUM.prioriCalc = intval&lt;br /&gt;       }&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;... и ву-а-ля&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-jE1_JE6PCBo/Trk1DndKRDI/AAAAAAAAAK0/URzJqGhooIQ/s1600/3.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="220" width="252" src="http://4.bp.blogspot.com/-jE1_JE6PCBo/Trk1DndKRDI/AAAAAAAAAK0/URzJqGhooIQ/s400/3.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P.S.&lt;/b&gt; Спасибо немецкому форуму, который так красиво решил эту нетривиальную задачу!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-8499029988584243172?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/8499029988584243172/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2011/11/typoscript.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/8499029988584243172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/8499029988584243172'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2011/11/typoscript.html' title='Алиасы для файлов в новостях или этот сумасшедший TypoScript'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-q9viw2oBduM/Trk0oZX2zBI/AAAAAAAAAKQ/XJJ0Ln0H-Sk/s72-c/1.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-8046999474253318759</id><published>2011-09-22T23:29:00.003+03:00</published><updated>2011-12-22T12:27:07.192+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='хеш-ссылки'/><category scheme='http://www.blogger.com/atom/ns#' term='якоря'/><category scheme='http://www.blogger.com/atom/ns#' term='навигация'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='jcarousel'/><title type='text'>Зaпоминаем состояние jcarousel с помощью якорей</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Решил посвятить пост не TYPO3, а jQuery и довольно известной карусели - jcarousel.&lt;br /&gt;&lt;br /&gt;На днях пришлось решать следующую задачку. Есть jcarousel и у нее порядка 10 страниц. С помощью стрелочек "влево" и "вправо" мы гуляем по ней то туда, то сюда. Зашли на страницу - 7. Потом вдруг переходим на другую страницу сайта, после чего опять возвращаемся к странице с каруселью. И что мы имеем в данной ситуации? А имеем:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Первый неприятный момент&lt;/i&gt; - карусель показывает нам свою 1-ю страницу, вместо той с которой мы до этого ушли (номер 7). Ну, и мы начинаем пролистывание нашей карусели сначала... &lt;br /&gt;&lt;br /&gt;&lt;i&gt;Второй неприятный момент&lt;/i&gt; заключается в том, что нельзя отослать кому-то ссылку показывающую 7-ю страницу карусели, т.к. все страницы имееют один и тот же url.&lt;br /&gt;&lt;br /&gt;Чтобы избавиться от этих двух недостатков нам нужно как-то запоминать состояние карусели. Сделать это можно с помощью якорей или иначе - хеш-ссылок. Например, http://www.domain.com/page.html#watch1, http://www.domain.com/page.html#watch7 и т.д.&lt;br /&gt;&lt;br /&gt;Первое, что нужно сделать, это менять строку адреса браузера при пролистывании карусели. На выручку приходит параметр jcarousel - itemVisibleInCallback (другие параметры мне не подошли, хотя напрашивались, например itemFirstInCallback), который определяет пользовательскую функцию, далее цитирую мануал: "вызываемую (по завершению анимации) когда элемент находится в зоне видимости поля карусели". В данную функцию передается 4 параметра: экземпляр карусели, ссылка на элемент LI этого объекта, индекс, указывающий позицию элемента в списке и состояние карусели (prev, next, init). Итак, готовый кусочек кода выглядит так:  &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;// carouselStart - номер элемента карусели с которого начинается показ&lt;br /&gt;var carouselStart = 3;&lt;br /&gt;var watchPos = -1;&lt;br /&gt;var anchor = ( jQuery.url.attr('anchor') == null ? '' :  jQuery.url.attr('anchor') );&lt;br /&gt;watchPos = anchor.indexOf('watch');&lt;br /&gt;if ( watchPos &amp;gt;= 0 ) {&lt;br /&gt;carouselStart = anchor.substring(watchPos+5);&lt;br /&gt;}&lt;br /&gt;if(jQuery.isFunction(jQuery.fn.jcarousel)) {&lt;br /&gt;jQuery('#mycarousel').jcarousel({&lt;br /&gt;easing: 'easeOutQuart',&lt;br /&gt;animation: 900,&lt;br /&gt;scroll: 3,&lt;br /&gt;wrap: 'last',&lt;br /&gt;start: (carouselStart - 2),&lt;br /&gt;itemVisibleInCallback: function (carousel, liElement, itemIndex, action) {&lt;br /&gt;window.location.hash = "watch"+itemIndex;&lt;br /&gt;}&lt;br /&gt;});&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;Поясню кое-что. &lt;br /&gt;1. &lt;b&gt;#mycarousel&lt;/b&gt; - id тега UL, который является контейнером элементов карусели - LI;&lt;br /&gt;2. &lt;b&gt;scroll: 3&lt;/b&gt; - у меня на одной странице карусели отображается 3 её элемента;&lt;br /&gt;3. &lt;b&gt;start: (carouselStart - 2)&lt;/b&gt; - номер элемента карусели с которого начинается показ&lt;br /&gt;4. &lt;b&gt;itemVisibleInCallback&lt;/b&gt; - определяет функцию которая меняет адресную сроку браузера. Самый ценный параметр, который поступает на вход этой функции - itemIndex. Т.к. у меня на каждой странице карусели отображается по 3 её элемента, то при нажатии на кнопку Next itemIndex принимает следующие значения: 3, 6, 9... и т.д.&lt;br /&gt;Так, мы запоминаем состояние карусели.&lt;br /&gt;&lt;br /&gt;Для того, чтобы карусель начала показ с нужного места, используется переменная - carouselStart. Значение этой переменной берется из адресной строки браузера.&lt;br /&gt;&lt;br /&gt;Ну вот, собственно и все. Надеюсь кому-то помог и сэкономил время.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P.S.&lt;/b&gt;&amp;nbsp;Рабочий вариант карусели можно посмотреть &lt;a href="http://www.snyperwatches.com/collection/all-collection.html" target="_blank"&gt;здесь&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-8046999474253318759?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/8046999474253318759/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2011/09/jcarousel.html#comment-form' title='Комментарии: 12'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/8046999474253318759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/8046999474253318759'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2011/09/jcarousel.html' title='Зaпоминаем состояние jcarousel с помощью якорей'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-5284837011731578419</id><published>2011-05-09T10:27:00.001+03:00</published><updated>2011-12-09T09:42:32.241+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='class'/><category scheme='http://www.blogger.com/atom/ns#' term='typo3'/><category scheme='http://www.blogger.com/atom/ns#' term='id'/><category scheme='http://www.blogger.com/atom/ns#' term='body'/><title type='text'>Присваиваем ID и CLASS для тега BODY на странице TYPO3</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Зачастую у верстальщика или разработчика сайта возникает необходимость присвоить тегу &lt;b&gt;BODY&lt;/b&gt; какой-нибудь &lt;i&gt;class&lt;/i&gt; и(или) &lt;i&gt;id&lt;/i&gt;.&lt;br /&gt;Чтобы сделать это в &lt;b&gt;TYPO3&lt;/b&gt;, лично меня спасает следующий TypoScript код:&lt;br /&gt;&lt;br /&gt;page.bodyTag &amp;gt;&lt;br /&gt;page.bodyTagCObject = COA&lt;br /&gt;page.bodyTagCObject {&lt;br /&gt;5 = TEXT&lt;br /&gt;5.value = &amp;lt;body&lt;br /&gt;10 = TEXT&lt;br /&gt;10.field = uid&lt;br /&gt;10.noTrimWrap = | id="page_|" |&lt;br /&gt;20 = TEXT&lt;br /&gt;20.field = alias&lt;br /&gt;20.noTrimWrap = | class="|"|&lt;br /&gt;20.required = 1&lt;br /&gt;25 = TEXT&lt;br /&gt;25.value = &amp;gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Что мы получаем на выходе? А получаем два варианта тега body:&lt;br /&gt;1. &amp;lt;body id="page_ID"&amp;gt; - когда странице не задан алиас&lt;br /&gt;2. &amp;lt;body id="page_ID" class="page-alias"&amp;gt; - когда странице задан алиас&lt;br /&gt;&lt;br /&gt;Как видно из скрипта, в качестве id страницы используется поле uid, а в качестве ее класса - поле alias. Имена полей всегда можно изменить для собственных нужд.&lt;br /&gt;&lt;br /&gt;А иногда бывает необходимость одним страницам сайта иметь один фон, а остальным - другой фон. Как быть в таком случае? Можно немного доработать последний скрипт и воспользоваться свойством &lt;b&gt;"Шаблон страницы/Frontend Layout"&lt;/b&gt;, который будет служить переключателем фона.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-nLyIbDKn5ns/TuG3mtUGZDI/AAAAAAAAAOY/qNtehxod8rk/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="98" src="http://4.bp.blogspot.com/-nLyIbDKn5ns/TuG3mtUGZDI/AAAAAAAAAOY/qNtehxod8rk/s320/1.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;page.bodyTag &amp;gt;&lt;br /&gt;page.bodyTagCObject = COA&lt;br /&gt;page.bodyTagCObject {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;10 = TEXT&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;10.field = uid&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;10.noTrimWrap = | id="page_|" |&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;20 = TEXT&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;20.field = alias&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;#20.required = 1&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;wrap = &amp;lt;body |&amp;gt;&lt;br /&gt;}&lt;br /&gt;[globalVar=TSFE:page|layout=1]&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;page.bodyTagCObject.20.noTrimWrap = | class="gray-bg |"|&lt;br /&gt;[else]&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;page.bodyTagCObject.20.noTrimWrap = | class="white-bg |"|&lt;br /&gt;[global]&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;В результате, при выборе шаблона страницы - Макет 1, в теге body данной страницы мы получим класс -&amp;nbsp;"gray-bg", в противном случае каждая страница сайта будет иметь класс - "white-bg".&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Для того, чтобы в админке при смене шаблона страницы мы видели человеческие надписи, а не &amp;nbsp;магические - Стандартный, Макет1.... и т.д., можно в свойствах корневой страницы сайта добавить несколько строк typoscript кода:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;TCEFORM.pages {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;layout.altLabels.1 = Gray background&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;layout.altLabels.0 = White background&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-xKg2KMgY7Sk/TuG6olj0h9I/AAAAAAAAAOg/Fqb29_ogl8Q/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="191" src="http://1.bp.blogspot.com/-xKg2KMgY7Sk/TuG6olj0h9I/AAAAAAAAAOg/Fqb29_ogl8Q/s320/2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;В результате получим следующее:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-SQK1hAqKZas/TuG7QstGWXI/AAAAAAAAAOo/rFp6YB4Wvg0/s1600/3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="169" src="http://2.bp.blogspot.com/-SQK1hAqKZas/TuG7QstGWXI/AAAAAAAAAOo/rFp6YB4Wvg0/s320/3.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Надеюсь, что материал окажется полезным для тайпо-голиков.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-5284837011731578419?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/5284837011731578419/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2011/05/id-class-body-typo3.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/5284837011731578419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/5284837011731578419'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2011/05/id-class-body-typo3.html' title='Присваиваем ID и CLASS для тега BODY на странице TYPO3'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-nLyIbDKn5ns/TuG3mtUGZDI/AAAAAAAAAOY/qNtehxod8rk/s72-c/1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-5122600035373316555</id><published>2011-01-29T10:34:00.002+02:00</published><updated>2011-02-03T10:34:15.865+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='even'/><category scheme='http://www.blogger.com/atom/ns#' term='typo3'/><category scheme='http://www.blogger.com/atom/ns#' term='tt_news'/><category scheme='http://www.blogger.com/atom/ns#' term='odd'/><category scheme='http://www.blogger.com/atom/ns#' term='newslist_ext'/><title type='text'>Расширение NEWSLIST_EXT или делаем четные и нечетные (odd/even) строки в списке новостей</title><content type='html'>Ни как не могу понять почему такую простую вещь разработчики не могут включить в ядро экстеншена. &lt;br /&gt;Народ начинает изголяться, причем каждый по-своему. Один пишет экст (&lt;b&gt;newslist_ext&lt;/b&gt;, например, который с &lt;b&gt;tt_news&lt;/b&gt; 3.0.1 не работает), другой добавляет стили с помощью javascript (в надежде, что js включен у всех), третий в CSS применяет псевдо-классы first-child и last-child (чтобы выделить хотя бы первый и последний элемент списка новостей).&lt;br /&gt;&lt;br /&gt;Для себя данную проблему решил следующим образом.&lt;br /&gt;&lt;br /&gt;Сначала я установил расширение newslist_ext и посмотрел, что оно делает, а точнее, что оно должно делать. А делает оно элементарную вещь - переопределяет функцию getListContent класса tx_ttnews, т.е. к родному коду функции добавлено еще несколько дополнительных строк. Понятное дело, что за таким экстом, который обновляется каждые пол-года, автору было не угнаться и его творение (newslist_ext) перестало функционировать с выходом tt_news v.3. Похоже, что функция getListContent претерпела значительные изменения.&lt;br /&gt;&lt;br /&gt;Вот кусочек php-кода (и моих 5 копеек), который родил автор newslist_ext, для того, чтобы наша жизнь стала краше и мы могли выделять в списке новостей не только первую и последнюю позиции, но и &lt;b&gt;четные и нечетные&lt;/b&gt; строки:&lt;br /&gt;&lt;br /&gt;// add code : add marker&lt;br /&gt;$counter = $cc+1;&lt;br /&gt;$markerArray['###NEWS_LIST1###'] = '';&lt;br /&gt;$markerArray['###NEWS_LIST2###'] = '';&lt;br /&gt;$markerArray['###NEWS_LIST3###'] = '';&lt;br /&gt;&lt;br /&gt;$markerArray['###NEWS_LIST1###'] = $counter;&lt;br /&gt;if ($counter==1) $markerArray['###NEWS_LIST2###'] = 'first';&lt;br /&gt;if ($counter == $resCount) $markerArray['###NEWS_LIST2###'] = 'last';&lt;br /&gt;&lt;br /&gt;if (($counter % 2) != 1) { &lt;br /&gt;$markerArray['###NEWS_LIST3###'] = 'even';&lt;br /&gt;} else {&lt;br /&gt;$markerArray['###NEWS_LIST3###'] = 'odd';&lt;br /&gt;}&lt;br /&gt;// add code : end&lt;br /&gt;&lt;br /&gt;Теперь в файле typo3conf\ext\tt_news\pi1\class.tx_ttnews.php находим актуальную для нашей версии tt_news функцию getListContent. Выделяем ее и копируем в буфер обмена. Переходим к файлу class.ux_tx_ttnews.php в директории typo3conf\ext\newslist_ext. В этом файле определена одна единственная функция - getListContent, которую мы вытираем и заменяем содержимым нашего клипборда.&lt;br /&gt;&lt;br /&gt;Осталось дело за малым - добавить дополнительные строки php-кода, которые вы видите выше. Вставить их нужно за следующей строкой:&lt;br /&gt;&lt;br /&gt;$layoutNum = ($itempartsCount == 0 ? 0 : ($cc % $itempartsCount));&lt;br /&gt;&lt;br /&gt;Сохраняем файл и получаем работоспособное расширение newslist_ext.&lt;br /&gt;&lt;br /&gt;Не забывайте добавить маркеры ###NEWS_LIST3### в те места, где вы собираетесь увидеть дополнительные CSS-стили - &lt;b&gt;odd&lt;/b&gt; и &lt;b&gt;even&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Скачать обновленный NEWSLIST_EXT можно тут &lt;a href="http://www.gyrkalo.dp.ua/t3ext/T3X_newslist_ext-0_0_1-z-201101291026.t3x"&gt;T3X_newslist_ext-0_0_1-z-201101291026.t3x&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-5122600035373316555?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/5122600035373316555/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2011/01/newslistext.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/5122600035373316555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/5122600035373316555'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2011/01/newslistext.html' title='Расширение NEWSLIST_EXT или делаем четные и нечетные (odd/even) строки в списке новостей'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-6064881910020411784</id><published>2011-01-26T13:23:00.004+02:00</published><updated>2011-01-27T00:05:44.552+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='хостинг'/><category scheme='http://www.blogger.com/atom/ns#' term='typo3'/><title type='text'>TYPO3 хостинг. Обсудим провайдеров?</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;b&gt;Предлагаю сообществу Typo3 обсудить, а возможно и составить белый и черный список хостинг-провайдеров&lt;/b&gt;. Ведь все мы рано или поздно задаем себе вопрос - где разместить свой сайт. Я последнее время смотрю только в сторону VDS-серверов. Тут ты и царь и бог! Но не всегда!&lt;br /&gt;&lt;br /&gt;Взял я на свою беду VDS от одного известной российской компании - 1GB.RU, пакет назывался VZ-Профи. Этот пакет сулил мне и Linux x64 (AMD64), но почему-то с 32-битными приложениями, и виртуальной памяти - 2Гб, и дискового пространства 20 Гб, а максимальной мощности процессора аж - 2400 мГц (максимум). Короче, думал, что буду как сыр в масле. Да не тут-то было...&lt;br /&gt;&lt;br /&gt;Решил свой новый сайт (&lt;a href="http://www.gyrkalo.dp.ua/"&gt;http://www.gyrkalo.dp.ua/&lt;/a&gt; пока в стадии разработки) реализовать на Typo3 v.4.4.6. Его производительность можете оценить сами, но до конца марта, пока этот сайт будет находится у 1gb.ru.&lt;br /&gt;&lt;br /&gt;Все мои познания Linux привели к выводу, что причиной тормоза является дисковая подсистема. Все мои просьбы помочь разобраться с данной проблемой ни к чему не привели - одни отписки в стиле - вы сами контролируете VDS вот и ищите, что не так. В общем я принял твердое решение сменить хостинг-провайдера и найти нового. Думаю, что это будет какой-то Европейский хостинг, например в Германии. Результат своих поисков непременно опишу.&lt;br /&gt;&lt;br /&gt;Если у кого есть, что сказать в защиту или против 1gb.ru, пишите. Но думаю, что они того не стоят, а лучше было бы услышать хорошие советы и положительные рекомендации о каких-либо компаниях.&lt;br /&gt;&lt;br /&gt;Пишите свои истории. Это интересно!&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-6064881910020411784?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/6064881910020411784/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2011/01/typo3.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/6064881910020411784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/6064881910020411784'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2011/01/typo3.html' title='TYPO3 хостинг. Обсудим провайдеров?'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-830778676825716628</id><published>2011-01-24T11:22:00.010+02:00</published><updated>2011-01-24T21:31:11.207+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='русский'/><category scheme='http://www.blogger.com/atom/ns#' term='typo3'/><category scheme='http://www.blogger.com/atom/ns#' term='локализация'/><title type='text'>Руссификация (локализация) BE TYPO3</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;Несмотря на то, что данная "проблема" - не нова, и поисковики выдают источники решающие данную проблему, я решил все-таки разместить несколько скриншотов, которые должны снимать с повестки дня новичков &lt;span style="font-weight:bold;"&gt;руссификацию админки&lt;/span&gt; (бэкенда) Typo3.&lt;br /&gt;&lt;br /&gt;1. Здесь выбирается язык для локализации админки:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_86zbmhuZ4DY/TT1GBOGDN5I/AAAAAAAAAJY/v_kcJzfPUHU/s1600/1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 199px;" src="http://3.bp.blogspot.com/_86zbmhuZ4DY/TT1GBOGDN5I/AAAAAAAAAJY/v_kcJzfPUHU/s400/1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5565681701277087634" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Как видим, по-умолчанию всего один язык - английский. Будем добавлять русский.&lt;br /&gt;&lt;br /&gt;2. Добавляем русский язык к системе с помощью ExtManager (менеджера расширений):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_86zbmhuZ4DY/TT1GmA0DLhI/AAAAAAAAAJg/EyVjLQ81pNg/s1600/2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 308px;" src="http://3.bp.blogspot.com/_86zbmhuZ4DY/TT1GmA0DLhI/AAAAAAAAAJg/EyVjLQ81pNg/s400/2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5565682333367086610" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;после нажатия на кнопку Save selection появляются дополнительные кнопки:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_86zbmhuZ4DY/TT1G6vhRMvI/AAAAAAAAAJo/RdTaHxbQ2gE/s1600/3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 305px;" src="http://3.bp.blogspot.com/_86zbmhuZ4DY/TT1G6vhRMvI/AAAAAAAAAJo/RdTaHxbQ2gE/s400/3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5565682689502163698" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Начинается процесс скачивания дополнительных файлов из репозитория (системного хранилища) Typo3:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_86zbmhuZ4DY/TT1HksIuxQI/AAAAAAAAAJw/5aaUvfqw0Nc/s1600/4.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 338px;" src="http://4.bp.blogspot.com/_86zbmhuZ4DY/TT1HksIuxQI/AAAAAAAAAJw/5aaUvfqw0Nc/s400/4.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5565683410148443394" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;При этом, как видим, обновляется не только сама система, но и многие расширения:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_86zbmhuZ4DY/TT1H6EXMI-I/AAAAAAAAAJ4/hWZcm_T4URw/s1600/5.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 351px;" src="http://4.bp.blogspot.com/_86zbmhuZ4DY/TT1H6EXMI-I/AAAAAAAAAJ4/hWZcm_T4URw/s400/5.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5565683777428792290" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3. В списке доступных языков появилась новая строка, выбираем её и сохраняем параметры:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_86zbmhuZ4DY/TT1IWIJ77tI/AAAAAAAAAKA/BPUWEbFTrsI/s1600/6.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 243px;" src="http://3.bp.blogspot.com/_86zbmhuZ4DY/TT1IWIJ77tI/AAAAAAAAAKA/BPUWEbFTrsI/s400/6.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5565684259483283154" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Теперь Админка будет иметь тот язык, который пользователю ближе по духу. Typo3 позволяет администратору сайта иметь одну локализацию, а рядовому пользователю (редактору) - другую.&lt;br /&gt;&lt;br /&gt;Очень советую базу данных MySql создавать с опцией DEFAULT CHARACTER SET utf8, а в конфигурационном файле localconf.php устанавливать следующие параметры:&lt;br /&gt;&lt;br /&gt;$TYPO3_CONF_VARS['BE']['forceCharset']='utf-8';&lt;br /&gt;$TYPO3_CONF_VARS['SYS']['setDBinit'] = 'SET NAMES utf8'.chr(10).'SET SESSION character_set_server=utf8';&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-830778676825716628?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/830778676825716628/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2011/01/be-typo3.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/830778676825716628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/830778676825716628'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2011/01/be-typo3.html' title='Руссификация (локализация) BE TYPO3'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_86zbmhuZ4DY/TT1GBOGDN5I/AAAAAAAAAJY/v_kcJzfPUHU/s72-c/1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-282377734059145385</id><published>2011-01-05T22:25:00.010+02:00</published><updated>2011-01-05T23:11:46.762+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='libxml'/><category scheme='http://www.blogger.com/atom/ns#' term='typo3'/><category scheme='http://www.blogger.com/atom/ns#' term='t3editor'/><title type='text'>Странности при сохранении в t3editor</title><content type='html'>При визуальной настройке плагина новостей, на последней закладке - "Другие настройки", имеется область ввода - "Typoscript для этого элемента содержимого" внутри которого можно вписывать дополнительные настройки (см. картинку).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_86zbmhuZ4DY/TSTWnUerqOI/AAAAAAAAAI8/5TXr9t0YTNs/s1600/1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 272px;" src="http://3.bp.blogspot.com/_86zbmhuZ4DY/TSTWnUerqOI/AAAAAAAAAI8/5TXr9t0YTNs/s400/1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5558803811082676450" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Так вот, в этом поле, после сохранения, стали пропадать символы: "&amp;lt;&amp;gt;&amp;amp;".&lt;br /&gt;&lt;br /&gt;Такая же фигня обнаружилась и внутри t3editor в расширении - TypoScript code (id -&lt;a href="http://typo3.org/extensions/repository/view/typoscript_code/current/"&gt;typoscript_code&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;В данной ситуации всё лечится всего одной строкой в localconf.php:&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;$TYPO3_CONF_VARS['BE']['flexformForceCDATA'] = '1';&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Этот параметр можно установить и в Install Tools. Именно тут, после долгого изучения всех параметров TYPO3, я и нашел данное решение.&lt;br /&gt;&lt;br /&gt;А чуть позже, &lt;a href="http://typo3.org/documentation/document-library/extension-manuals/beautyofcode/0.4.1/view/1/6/"&gt;тут&lt;/a&gt;, нашел и это:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_86zbmhuZ4DY/TSTanv9mfZI/AAAAAAAAAJE/5awdsEQOkOc/s1600/2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 175px;" src="http://3.bp.blogspot.com/_86zbmhuZ4DY/TSTanv9mfZI/AAAAAAAAAJE/5awdsEQOkOc/s400/2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5558808216506629522" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Выходит, что это какие-то косяки с libxml (1.6.32 и выше) на сервере! Дай бог им всем здоровья ;), а у меня пропало пол-дня.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-282377734059145385?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/282377734059145385/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2011/01/t3editor.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/282377734059145385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/282377734059145385'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2011/01/t3editor.html' title='Странности при сохранении в t3editor'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_86zbmhuZ4DY/TSTWnUerqOI/AAAAAAAAAI8/5TXr9t0YTNs/s72-c/1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-2266448494264672435</id><published>2010-12-22T22:24:00.008+02:00</published><updated>2010-12-22T23:38:13.372+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='temp'/><category scheme='http://www.blogger.com/atom/ns#' term='меню'/><category scheme='http://www.blogger.com/atom/ns#' term='typo3'/><category scheme='http://www.blogger.com/atom/ns#' term='lib'/><title type='text'>Взаимосвязанные меню в TYPO3</title><content type='html'>&amp;nbsp;&lt;br /&gt;Довольно часто на сайтах система меню устроена таким образом, что сверху расположены основные разделы сайта, а сбоку его подразделы, как это показано на скриншоте ниже.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_86zbmhuZ4DY/TRJgpLGO_2I/AAAAAAAAAIg/AlqVnHpGBGo/s1600/1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 210px;" src="http://3.bp.blogspot.com/_86zbmhuZ4DY/TRJgpLGO_2I/AAAAAAAAAIg/AlqVnHpGBGo/s400/1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5553607550971084642" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;И хотя, на первый взгляд реализация двух взаимосвязанных блоков меню кажется довольно сложной, на самом деле все очень просто. Приведу два кусочка своего &lt;span style="font-weight:bold;"&gt;typoscript&lt;/span&gt;, которые реализовывают данную возможность.&lt;br /&gt;&lt;br /&gt;Это кусочек кода который отвечает за верхнюю строку меню. За это отвечает параметр - entryLevel = 0&lt;br /&gt;&lt;br /&gt;  tempmenu.TOP_MENU = HMENU&lt;br /&gt;  tempmenu.TOP_MENU.entryLevel = 0&lt;br /&gt;  # исключаем из меню некоторые страницы, например Карта сайта и все-такое...&lt;br /&gt;  tempmenu.TOP_MENU.excludeUidList = 44,163 &lt;br /&gt;  tempmenu.TOP_MENU.1 = TMENU&lt;br /&gt;  tempmenu.TOP_MENU.1 {&lt;br /&gt;        noBlur = 1&lt;br /&gt;        ACT = 1&lt;br /&gt;        CUR = 1&lt;br /&gt;  }&lt;br /&gt;  tempmenu.TOP_MENU.1.NO {&lt;br /&gt;        allWrap = &amp;lt;span class="menu_left"&amp;gt;&amp;#160;&amp;lt;/span&amp;gt;&amp;lt;span class="menu"&amp;gt;|&amp;lt;/span&amp;gt;&amp;lt;span class="menu_right"&amp;gt;&amp;#160;&amp;lt;/span&amp;gt;&lt;br /&gt;  }&lt;br /&gt;  tempmenu.TOP_MENU.1.ACT {&lt;br /&gt;        allWrap = &amp;lt;span class="curmenu_left"&amp;gt;&amp;#160;&amp;lt;/span&amp;gt;&amp;lt;span class="curmenu"&amp;gt;|&amp;lt;/span&amp;gt;&amp;lt;span class="curmenu_right"&amp;gt;&amp;#160;&amp;lt;/span&amp;gt;&lt;br /&gt;  }&lt;br /&gt;  tempmenu.TOP_MENU.1.CUR {&lt;br /&gt;        allWrap = &amp;lt;span class="curmenu_left"&amp;gt;&amp;#160;&amp;lt;/span&amp;gt;&amp;lt;span class="curmenu"&amp;gt;|&amp;lt;/span&amp;gt;&amp;lt;span class="curmenu_right"&amp;gt;&amp;#160;&amp;lt;/span&amp;gt;&lt;br /&gt;        doNotLinkIt = 1&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;А это кусочек typoscript, который отвечает за генерацию бокового меню или меню подразделов (entryLevel = 1):&lt;br /&gt;&lt;br /&gt;# Настройка левого меню&lt;br /&gt;  tempmenu.LEFT_MENU = HMENU&lt;br /&gt;  tempmenu.LEFT_MENU.entryLevel = 1&lt;br /&gt;  tempmenu.LEFT_MENU.wrap = &amp;lt;ul&amp;gt;|&amp;lt;/ul&amp;gt;&lt;br /&gt;# Настройка 1-го уровня левого меню&lt;br /&gt;  tempmenu.LEFT_MENU.1 = TMENU&lt;br /&gt;  tempmenu.LEFT_MENU.1 {&lt;br /&gt;        noBlur = 1&lt;br /&gt;        ACT = 1&lt;br /&gt;        CUR = 1&lt;br /&gt;  }&lt;br /&gt;  tempmenu.LEFT_MENU.1.NO {&lt;br /&gt;        allWrap = &amp;lt;li class="menu_v1_lev2"&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;  }&lt;br /&gt;  tempmenu.LEFT_MENU.1.ACT {&lt;br /&gt;        allWrap = &amp;lt;li class="menu_v1_lev2 active"&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;  }&lt;br /&gt;  tempmenu.LEFT_MENU.1.CUR {&lt;br /&gt;        allWrap = &amp;lt;li class="menu_v1_lev2 current"&amp;gt;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;        doNotLinkIt = 1&lt;br /&gt;  }&lt;br /&gt;# Настройка 2-го уровня левого меню&lt;br /&gt;  tempmenu.LEFT_MENU.2 = TMENU&lt;br /&gt;  tempmenu.LEFT_MENU.2 {&lt;br /&gt;        noBlur = 1&lt;br /&gt;        ACT = 1&lt;br /&gt;        CUR = 1&lt;br /&gt;  }&lt;br /&gt;  tempmenu.LEFT_MENU.2.NO {&lt;br /&gt;        allWrap = &amp;lt;li class="menu_v1_lev3"&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;  }&lt;br /&gt;  tempmenu.LEFT_MENU.2.ACT {&lt;br /&gt;        allWrap = &amp;lt;li class="menu_v1_lev3 active"&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;  }&lt;br /&gt;  tempmenu.LEFT_MENU.2.CUR {&lt;br /&gt;        allWrap = &amp;lt;li class="menu_v1_lev3 current"&amp;gt;&amp;lt;span&amp;gt;|&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;        doNotLinkIt = 1&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Совет&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Несмотря на то, что, по своей неопытности, я использовал в скриптах имя объекта - tempmenu, рекомендую делать красиво и не повторять моих прежних "ошибок".&lt;br /&gt;&lt;br /&gt;Используйте в своих TypoScript либо &lt;span style="font-weight:bold;"&gt;lib&lt;/span&gt; объект, либо &lt;span style="font-weight:bold;"&gt;temp&lt;/span&gt;. Возможно Вы спросите - но какая разница между ними? В каких случаях нужно использовать один объект, а когда другой?&lt;br /&gt;&lt;br /&gt;Дело в том, что объекты, которые хранятся внутри temp носят временный характер, и как следствие - не кэшируются, в отличии от объекта - lib. Это также означает, что Вы не сможете делать ссылку на объект temp или изменять его по ссылке.&lt;br /&gt;&lt;br /&gt;Хочу привести наглядный пример. Допустим у нас есть объекты temp и lib:&lt;br /&gt;&lt;br /&gt;temp.myTemp = TEXT&lt;br /&gt;temp.myTemp.value = Это текст внутри temp!&lt;br /&gt;lib.myLib = TEXT&lt;br /&gt;lib.myLib.value = Это текст внутри lib!&lt;br /&gt;&lt;br /&gt;Попытаемся вывести данный текст на страницу 3-мя различными способами...&lt;br /&gt;# Вывод значений объектов &lt;br /&gt;page.10 = COA&lt;br /&gt;page.10 {&lt;br /&gt;  10 &amp;lt; temp.myTemp&lt;br /&gt;  10.wrap = &amp;lt;strong&amp;gt;Temp: &amp;lt;/strong&amp;gt;|&amp;lt;br /&amp;gt;&lt;br /&gt;  20 &amp;lt; lib.myLib&lt;br /&gt;  20.wrap = &amp;lt;strong&amp;gt;Lib: &amp;lt;/strong&amp;gt;|&amp;lt;br /&amp;gt;&lt;br /&gt;  wrap = &amp;lt;p&amp;gt;|&amp;lt;/p&amp;gt;&lt;br /&gt;}&lt;br /&gt;# Вывод значений объектов по ссылке&lt;br /&gt;page.20 = COA&lt;br /&gt;page.20 {&lt;br /&gt;  10 =&amp;lt; temp.myTemp&lt;br /&gt;  10.wrap = &amp;lt;strong&amp;gt;Temp: &amp;lt;/strong&amp;gt;|&amp;lt;br /&amp;gt;&lt;br /&gt;  20 =&amp;lt; lib.myLib&lt;br /&gt;  20.wrap = &amp;lt;strong&amp;gt;Lib: &amp;lt;/strong&amp;gt;|&amp;lt;br /&amp;gt;&lt;br /&gt;  wrap = &amp;lt;p&amp;gt;|&amp;lt;/p&amp;gt;&lt;br /&gt;}&lt;br /&gt;# Передача объекта lib по ссылке объекту temp&lt;br /&gt;temp.myTemp =&amp;lt; lib.myLib&lt;br /&gt;page.30 = COA&lt;br /&gt;page.30 {&lt;br /&gt;  10 &amp;lt; temp.myTemp&lt;br /&gt;  10.wrap = &amp;lt;strong&amp;gt;Temp: &amp;lt;/strong&amp;gt;|&amp;lt;br /&amp;gt;&lt;br /&gt;  20 &amp;lt; lib.myLib&lt;br /&gt;  20.wrap = &amp;lt;strong&amp;gt;Lib: &amp;lt;/strong&amp;gt;|&amp;lt;br /&amp;gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Результатом работы данного скрипта будет следующий вывод:&lt;br /&gt;&lt;br /&gt;Это текст внутри temp!&lt;br /&gt;Это текст внутри lib!&lt;br /&gt;&lt;br /&gt;Это текст внутри lib!&lt;br /&gt;&lt;br /&gt;Это текст внутри temp!&lt;br /&gt;Это текст внутри lib!&lt;br /&gt;&lt;br /&gt;Надеюсь, Вам все понятно - почему результаты работы именно такие.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-2266448494264672435?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/2266448494264672435/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2010/12/typo3.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/2266448494264672435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/2266448494264672435'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2010/12/typo3.html' title='Взаимосвязанные меню в TYPO3'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_86zbmhuZ4DY/TRJgpLGO_2I/AAAAAAAAAIg/AlqVnHpGBGo/s72-c/1.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-3028325534211666460</id><published>2010-12-19T21:53:00.011+02:00</published><updated>2011-12-07T13:25:53.233+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='error 404'/><category scheme='http://www.blogger.com/atom/ns#' term='typo3'/><title type='text'>4 способа создания страницы 404 (Page not found) в TYPO3</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Как я уже писал в одной своей заметке (&lt;a href="http://gyrkalo.blogspot.com/2010/11/seo.html"&gt;SEO и общие рекомендации&lt;/a&gt;), для сайта очень важно, чтобы при обращении к заведомо несуществующей странице, например http://www.domain.com/bla-bla-bla, сервер не выдавал страницу с кодом: HTTP/1.1 302 Found. Сайт необходимо настраивать так, чтобы при обращении к несуществующей странице веб-сервер возвращал страницу с кодом - Error 404 (Page not found).&lt;br /&gt;В противном случае, некорректная обработка данного запроса может привести к неправильной индексации сайта поисковыми системами, вплоть до полного исключения сайта из индекса поисковой системы.&lt;br /&gt;&lt;br /&gt;Как же настроить сайт на TYPO3 надлежащим образом?&lt;br /&gt;&lt;br /&gt;Для решения данной задачи у TYPO3 имеется несколько различных способов:&lt;br /&gt;&lt;br /&gt;1. Самый простой способ. В конфигурационном файле localconf.php установить параметр:&lt;br /&gt;$TYPO3_CONF_VARS['FE']['pageNotFound_handling'] = true;&lt;br /&gt;После этого, реакция системы на URL типа http://www.domain.com/kgfhted будет приводить к появлению страшного и непонятного для пользователя сообщению:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_86zbmhuZ4DY/TQ5oG5mgv8I/AAAAAAAAAII/4odt1j8RA1U/s1600/1.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5552489858345254850" src="http://4.bp.blogspot.com/_86zbmhuZ4DY/TQ5oG5mgv8I/AAAAAAAAAII/4odt1j8RA1U/s400/1.jpg" style="cursor: hand; cursor: pointer; display: block; height: 162px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2. Более сложный подход. В конфигурационном файле localconf.php установить 2 параметра:&lt;br /&gt;$TYPO3_CONF_VARS["FE"]["pageNotFound_handling_statheader"] = 'HTTP/1.1 404 Not Found';&lt;br /&gt;$TYPO3_CONF_VARS["FE"]["pageNotFound_handling"] = "http://www.domain.com.ua/error404.html";&lt;br /&gt;Где error404.html это такая же страница сайта, которая была создана с помощью админки Typo3. Например:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_86zbmhuZ4DY/TQ5qunWrdxI/AAAAAAAAAIQ/U8YaAaHu_vM/s1600/2.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5552492739665032978" src="http://2.bp.blogspot.com/_86zbmhuZ4DY/TQ5qunWrdxI/AAAAAAAAAIQ/U8YaAaHu_vM/s400/2.jpg" style="cursor: hand; cursor: pointer; display: block; height: 291px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Второй параметр можно прописать и так, заменив алиас страницы, на её id:&lt;br /&gt;$TYPO3_CONF_VARS['FE']['pageNotFound_handling'] = '/index.php?id=page_id';&lt;br /&gt;&lt;br /&gt;Этот подход намного цивильнее, т.к. данная страница уже будет содержать более внятные и полезные комментарии, помогающие пользователю быстрее понять, что произошло и как из данной ситуации можно выйти. Вот, &lt;a href="http://www.jenniferslegg.com/2008/02/13/ten-steps-to-creating-a-killer-404-error-page/"&gt;11 советов&lt;/a&gt; о том, какой должна быть данная страница (а это &lt;a href="http://www.seoschool.ru/search-engine-optimization-seo/11-steps-to-creating-a-killer-404-error-page.html"&gt;перевод&lt;/a&gt;). Как вариант, она может выглядеть вот так:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_86zbmhuZ4DY/TQ5tesU9WCI/AAAAAAAAAIY/hLKBfsNoptY/s1600/3.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5552495764656969762" src="http://4.bp.blogspot.com/_86zbmhuZ4DY/TQ5tesU9WCI/AAAAAAAAAIY/hLKBfsNoptY/s400/3.jpg" style="cursor: hand; cursor: pointer; display: block; height: 117px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3. Более продвинутый способ. Страницу 404 можно не создавать в BE, а генерировать с помощью php. Для этого в localconf.php нужно  установить следующих 2 параметра:&lt;br /&gt;$TYPO3_CONF_VARS["FE"]["pageNotFound_handling_statheader"] = 'HTTP/1.1 404 Not Found';&lt;br /&gt;$TYPO3_CONF_VARS["FE"]["pageNotFound_handling"] = 'USER_FUNCTION:fileadmin/pageNotFoundHandling.php:user_pageNotFound-&amp;gt;pageNotFound';&lt;br /&gt;&lt;br /&gt;Как видно из значения 2-го параметра, в директории fileadmin должен находиться файл - &lt;br /&gt;pageNotFoundHandling.php (имя файла может быть произвольным), в нем должен быть определен класс - user_pageNotFound, который имеет метод - pageNotFound.&lt;br /&gt;Примерное содержимое pageNotFoundHandling.php, может быть таковым:&lt;br /&gt;&amp;lt;?php&lt;br /&gt;class user_pageNotFound {&lt;br /&gt;&lt;br /&gt;function pageNotFound($param,$ref) {&lt;br /&gt;&lt;br /&gt;print "&amp;lt;html&amp;gt;\n&amp;lt;head&amp;gt;\n&amp;lt;title&amp;gt;404 Not found : Sitename&amp;lt;/title&amp;gt;\n";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//print '&amp;lt;meta http-equiv="refresh" CONTENT="0;URL=/fileadmin/404-not-found.html"&amp;gt;\n';&lt;br /&gt;&lt;br /&gt;print "&amp;lt;/head&amp;gt;\n&amp;lt;body&amp;gt;\n";&lt;br /&gt;&lt;br /&gt;print "Запрашиваемая Вами страница не найдена!";&lt;br /&gt;print "&amp;lt;!--&lt;br /&gt;&lt;br /&gt;Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.&lt;br /&gt;&lt;br /&gt;Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.&lt;br /&gt;&lt;br /&gt;Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.&lt;br /&gt;&lt;br /&gt;--&amp;gt;";&lt;br /&gt;&lt;br /&gt;print "&amp;lt;/body&amp;gt;\n&amp;lt;/html&amp;gt;\n";&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;Т.к. страница 404 должна быть размером более 512 байт, я добавил лишние комментарии - Lorem Ipsum...&lt;br /&gt;&lt;br /&gt;4. Опять простой способ. TYPO3 можно настроить так, чтобы при возникновении ошибки 404 на сайте, веб-сервер возвращал пользователю статическую html-страничку. Для этого в localconf.php нужно установить 2 параметра:&lt;br /&gt;&lt;br /&gt;$TYPO3_CONF_VARS["FE"]["pageNotFound_handling_statheader"] = 'HTTP/1.1 404 Not Found';&lt;br /&gt;$TYPO3_CONF_VARS['FE']['pageNotFound_handling'] = 'READFILE:fileadmin/404.html';&lt;br /&gt;&lt;br /&gt;Как видно из примера, в директории fileadmin должен находиться файл 404.html, который и будет видеть пользователь. Напомню еще раз, его размер должен быть более 512 байт!&lt;br /&gt;&lt;br /&gt;Обязательно проверьте настройки RealUrl, а то, иногда, можно сломать себе мозг от того, что ничего не работает, хотя все сделано правильно! Обычно, у меня настройки&amp;nbsp;RealUrl&amp;nbsp;находятся в &amp;nbsp;файлах typo3conf/realurl_conf.php или&amp;nbsp;typo3conf/realurlconf.php. Убедитесь что параметр&amp;nbsp;postVarSet_failureMode не имеет значение - redirect_goodUpperDir. Он должен быть пустым, т.е.&amp;nbsp;postVarSet_failureMode=''.&lt;br /&gt;&lt;br /&gt;Что же касается многоязычных сайтов, то для того, чтобы страница с 404-ошибкой была на соответствующем языке, необходимо параметр&amp;nbsp;$TYPO3_CONF_VARS['FE']['pageNotFound_handling'] в typo3conf/localconf.php менять примерно следующим образом:&lt;br /&gt;&lt;br /&gt;if (substr($_SERVER['REQUEST_URI'], 0, 4) == '/en/' || $_GET['L'] == 1) {&lt;br /&gt;&amp;nbsp; &amp;nbsp;$TYPO3_CONF_VARS['FE']['pageNotFound_handling'] = '/en/error404.html';&lt;br /&gt;} elseif (substr($_SERVER['REQUEST_URI'], 0, 4) == '/fr/' || $_GET['L'] == 2) {&lt;br /&gt;&amp;nbsp; &amp;nbsp;$TYPO3_CONF_VARS['FE']['pageNotFound_handling'] = '/fr/error404.html';&lt;br /&gt;} else {&lt;br /&gt;&amp;nbsp; &amp;nbsp;$TYPO3_CONF_VARS['FE']['pageNotFound_handling'] = '/error404.html';&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ну вот и всё! Упомяну также, что данную задачу можно решить и настройками Apache. Просто почитайте о параметре ErrorDocument.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-3028325534211666460?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/3028325534211666460/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2010/12/4-404-page-not-found-typo3.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/3028325534211666460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/3028325534211666460'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2010/12/4-404-page-not-found-typo3.html' title='4 способа создания страницы 404 (Page not found) в TYPO3'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_86zbmhuZ4DY/TQ5oG5mgv8I/AAAAAAAAAII/4odt1j8RA1U/s72-c/1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-5612030710863835048</id><published>2010-12-11T10:55:00.018+02:00</published><updated>2010-12-11T21:08:25.047+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='indexed_search'/><category scheme='http://www.blogger.com/atom/ns#' term='innodb'/><category scheme='http://www.blogger.com/atom/ns#' term='typo3'/><title type='text'>Indexed Search или эпопея с InnoDB</title><content type='html'>&lt;br /&gt;Казалось бы, какая связь между Indexed Search и InnoDB? Но...&lt;br /&gt;&lt;br /&gt;Переносил я тут недавно один свой &lt;span style="font-weight:bold;"&gt;TYPO3&lt;/span&gt;-сайт на новый хостинг... Как говорится, перенес один в один. Но все пошло не так гладко как казалось на первый взгляд - перестал работать поиск на сайте, организованный экстом - indexed_search.&lt;br /&gt;&lt;br /&gt;Слёту я решил переустановить &lt;span style="font-style:italic;"&gt;(uninstall+install&lt;/span&gt;), а затем и обновить версию indexed_search, но это не помогло.&lt;br /&gt;&lt;br /&gt;Правильное направление поиска причин возникновения проблемы, задала такая вещь. Каждый раз, при проверке настроек экста - &lt;span style="font-weight:bold;"&gt;indexed_search&lt;/span&gt; в менеджере расширений, он предлагал мне сделать update некоторых своих таблиц. Причем, суть данного апдейта сводилась не к созданию отсутствующих таблиц или полей, а смене движка для некоторых таблиц на &lt;span style="font-weight:bold;"&gt;InnoDB&lt;/span&gt;. Ну тут и начался несколько пролонгированный и довольно "сексуальный" курс повышения квалификации в области &lt;span style="font-weight:bold;"&gt;MySQL&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;У меня сразу возник вопрос, а поднят ли этот движок на моем хостинге. Зайдя на консоль мускула я набрал следующую команду:&lt;br /&gt;mysql&gt; show engines;&lt;br /&gt;и увидел ответ:&lt;br /&gt;InnoDB |DISABLED&lt;br /&gt;набрал еще другую команду, которая подтвердила наличие трабл с InnoDB:&lt;br /&gt;mysql&gt; show engine innodb status;&lt;br /&gt;ERROR 1235 (42000): Cannot call SHOW INNODB STATUS because skip-innodb is defined&lt;br /&gt;&lt;br /&gt;Немного погуглив, я сделал следующее:&lt;br /&gt;1. Остановил MySQL, с помощью команды: /etc/init.d/mysql stop&lt;br /&gt;2. Переименовал 2 лог-файла - ib_logfile0 и ib_logfile1:&lt;br /&gt;mv /var/lib/mysql/ib_logfile0 /var/lib/mysql/ib_logfile0.bak&lt;br /&gt;mv /var/lib/mysql/ib_logfile1 /var/lib/mysql/ib_logfile1.bak&lt;br /&gt;3. Запустил MySQL: /etc/init.d/mysql start. При запуске на консоли стали появляться довольно страшные сообщения:&lt;br /&gt;101027 20:59:45  InnoDB: Error: page 513 log sequence number 0 972453278&lt;br /&gt;InnoDB: is in the future! Current system log sequence number 0 544625838.&lt;br /&gt;InnoDB: Your database may be corrupt or you may have copied the InnoDB&lt;br /&gt;InnoDB: tablespace but not the InnoDB log files. See&lt;br /&gt;InnoDB: http://dev.mysql.com/doc/refman/5.0/en/forcing-recovery.html&lt;br /&gt;InnoDB: for more information.&lt;br /&gt;&lt;br /&gt;Хотя, когда я опять из консоли MySQL выполнил знакомую нам команду:&lt;br /&gt;mysql&gt; show engines;&lt;br /&gt;то увидел более приятное сообщение:&lt;br /&gt; MyISAM     | DEFAULT&lt;br /&gt; InnoDB     | YES&lt;br /&gt;&lt;br /&gt;Таким образом я оживил InnoDB на своем сервере, но моя база оставалась "паламатая".&lt;br /&gt;&lt;br /&gt;Вылечил базу мускула я следующими действиями:&lt;br /&gt;1. В конфигурационный файл MySQL - /etc/mysql/my.cnf добавил параметр, который блокирует все Insert и Update на сервере:&lt;br /&gt;innodb_force_recovery = 4&lt;br /&gt;(это позволяет нам, как бы, заморозить базу в исходном состоянии на какое-то время). Заодно можно запомнить или записать значение параметра datadir из my.cnf, указывающий на местонахождение файлов БД и которое будет нужно в дальнейшем.&lt;br /&gt;&lt;br /&gt;Если вы не знаете где находится файл my.cnf, то воспользуйтесь командой: &lt;span style="font-weight:bold;"&gt;find / -name my.cnf&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;2. Рестартовал MySQL:&lt;br /&gt;/etc/init.d/mysql stop&lt;br /&gt;/etc/init.d/mysql start&lt;br /&gt;&lt;br /&gt;3. Дополнительной утилитой мускула сделал дамп своей базы данных:&lt;br /&gt;mysqldump --force --compress --triggers --routines --create-options -uroot -pROOTPASSWORD --databases DATABASENAME &gt; /usr/mydb.sql&lt;br /&gt;&lt;br /&gt;4. В очередной раз остановил сервер MySQL:&lt;br /&gt;/etc/init.d/mysql stop&lt;br /&gt;есть также и другой способ остановки сервиса:&lt;br /&gt;mysqladmin -uroot -pROOTPASSWORD shutdown&lt;br /&gt;&lt;br /&gt;5. Нашел физическое местонахождение директории с файлами БД (можно с помощью find / -name DATABASENAME) и записал на листике её имя, имя ее собственника (owner) и сумму прав на неё (rwx------, или 700). Все это может показать команда &lt;span style="font-weight:bold;"&gt;ls -l&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;6. Удалил полностью эту директорию (а точнее переместил в другое место - береженого бог бережет, как говорится :):&lt;br /&gt;rm -fdr /var/lib/mysql/DATABASENAME/&lt;br /&gt;БУДЬТЕ ОЧЕНЬ ВНИМАТЕЛЬНЫ, НЕ ЗАХВАТИТЕ НИЧЕГО ЛИШНЕГО!!!&lt;br /&gt;&lt;br /&gt;7. Тут же создал директорию с таким же именем и задал её овнера и права:&lt;br /&gt;mkdir /var/lib/mysql/DATABASENAME/ &lt;br /&gt;chown -R mysql:mysql /var/lib/mysql/DATABASENAME/&lt;br /&gt;chmod -R 700 /var/lib/mysql/DATABASENAME/&lt;br /&gt;&lt;br /&gt;8. Специальной утилитой mysql_install_db создал новые таблицы привилегий MySQL:&lt;br /&gt;/usr/local/bin/mysql_install_db&lt;br /&gt;и на всякий случай повторил присвоение овнера и установку прав:&lt;br /&gt;chown -R mysql:mysql /var/lib/mysql/DATABASENAME/&lt;br /&gt;chmod -R 700 /var/lib/mysql/DATABASENAME/&lt;br /&gt;&lt;br /&gt;9. Убрал параметр innodb_force_recovery из конфигурационного файла - my.cnf&lt;br /&gt;&lt;br /&gt;10. Запустил mysql:&lt;br /&gt;/etc/init.d/mysql start&lt;br /&gt;&lt;br /&gt;11. Импортировал данные обратно в базу данных:&lt;br /&gt;mysql -uroot --compress &lt; /usr/mydb.sql&lt;br /&gt;&lt;br /&gt;12. Напоследок, обновил таблицы привилегий mysql:&lt;br /&gt;/usr/bin/mysqladmin -uroot flush-privileges&lt;br /&gt;&lt;br /&gt;Ну, вот и всё парни, а точнее мужики если дочитали эту статью до конца. Вы не поверите, но indexed_search у меня заработал.&lt;br /&gt;Неужели для indexed_search так важно иметь движок InnoDB для некоторых своих таблиц? &lt;br /&gt;Чтобы ответить себе на этот вопрос у меня уже не оставалось ни времени, ни сил, ни большого желания.&lt;br /&gt;&lt;br /&gt;P.S. Все пути к директориям, которые есть в данной статье, скорее всего у вас будут другими. Поэтому, если вам нужно выполнить какую-то утилиту или найти файл, то используйте команду find / -name file_or_dir_name, она действительно рулит.&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-5612030710863835048?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/5612030710863835048/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2010/12/indexed-search-innodb.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/5612030710863835048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/5612030710863835048'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2010/12/indexed-search-innodb.html' title='Indexed Search или эпопея с InnoDB'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-2584784658444298881</id><published>2010-11-10T11:13:00.006+02:00</published><updated>2010-11-10T12:57:39.725+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><category scheme='http://www.blogger.com/atom/ns#' term='контент'/><category scheme='http://www.blogger.com/atom/ns#' term='раскрутка'/><title type='text'>SEO и общие рекомендации</title><content type='html'>&lt;br /&gt;&lt;br /&gt;После того как работа над сайтом закончена, за него берутся сеошники. Но, как часто у нас бывает разработчик - и швец, и жнец, и на дуде игрец. Поэтому для таких многостаночников я хочу привести ряд общих рекомендаций по настройке и сео-оптимизации сайтов. А вообще-то это целая наука и за 5 минут ее не осилить.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1. Рекомендации по основным элементам страниц сайта.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Как уже было сказано в предыдущих статьях, для СЕО очень важны 3 вещи - title страницы, meta-тег description и meta-тег keywords.&lt;br /&gt;&lt;br /&gt;Что касается длины этих параметров, то общие рекомендации для заточки под Google такие:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Title&lt;/span&gt; - должен содержать не более 12 слов, общая длина которых должна составлять от 70 до 80 символов (наиболее важные слова располагайте первыми). &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Description&lt;/span&gt; - рекомендуемая длина содержимого этого МЕТА-тега – 150 символов и она не должна превышать 200 символов (это должен быть текст описывающий контент вашей страницы, а не набор ключевых слов и словосочетаний).&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Keywords&lt;/span&gt; - этот тег должен содержать около 200 символов, во всяком случае, длина не должна превышать 250 символов.&lt;br /&gt;&lt;br /&gt;На сайте не должно быть страниц с повторяющимися Title и Description!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. Рекомендации по контенту сайта.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Для каждой страницы может быть только один тег &amp;lt;H1&amp;gt;, несколько тегов &amp;lt;H2&amp;gt; и &amp;lt;H3&amp;gt; (причем тегов &amp;lt;H2&amp;gt; и &amp;lt;H3&amp;gt; может не быть вообще). Желательно, чтобы внутри тегов &amp;lt;H1&amp;gt;, &amp;lt;H2&amp;gt;, &amp;lt;H3&amp;gt; не содержались другие теги (например, &amp;lt;H1&amp;gt;&amp;lt;em&amp;gt;текст&amp;lt;/em&amp;gt;&amp;lt;/H1&amp;gt;), а также дополнительные атрибуты (например, &amp;lt;H2 class="red-italic"&amp;gt;).&lt;br /&gt;&lt;br /&gt;Оформление заголовков &amp;lt;H1&amp;gt;, &amp;lt;H2&amp;gt;, &amp;lt;H3&amp;gt; необходимо переносить в таблицу или файл-стилей.&lt;br /&gt;&lt;br /&gt;Оформление текста, который является ссылкой, должно отличаться от оформления основного текста страницы, например подчеркиванием, цветом и т.п.&lt;br /&gt;&lt;br /&gt;Оформление текста, помещенного в теги &amp;lt;STRONG&amp;gt;, должно отличаться от оформления основного текста страницы, например полужирным начертанием, курсивом, цветом и т.п.&lt;br /&gt;&lt;br /&gt;Все картинки &amp;lt;IMG&amp;gt; должны иметь атрибут - alt.&lt;br /&gt;&lt;br /&gt;Для внешних ссылок, которые не являются партнерскими, желательно добавить атрибут rel=”nofollow”, что позволит сократить отток PR с Ваших страниц.&lt;br /&gt;&lt;br /&gt;Ключевые слова, которые встречаются в ваших текстах, желательно выделять либо полужирным начертанием, с помощью тегов &amp;lt;B&amp;gt; и &amp;lt;STRONG&amp;gt;, либо курсивом - тегами &amp;lt;I&amp;gt; и &amp;lt;EM&amp;gt;.&lt;br /&gt;&lt;br /&gt;По возможности делайте слоганы не графическими а текстовыми.&lt;br /&gt;&lt;br /&gt;Не пытайтесь обманывать поисковых роботов путем добавления скрытого текста на страницах сайта (когда фон и цвет шрифта совпадают), в результате этого со стороны поисковых систем скорее всего будут наложены санкции, которые отменяются через большой промежуток времени.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Очень важно!&lt;/span&gt; Запомните, недопустимо полное или частичное использование текстов сайта в качестве рекламных текстов, пресс-релизов и т.п. на внешних ресурсах (в т.ч. контекстная реклама, доски объявлений и т.д.), а также недопустимо дублирование текстов внутри самого ресурса. Старайтесь как можно меньше передирать контент с других ресурсов.&lt;br /&gt;&lt;br /&gt;Для правильного и оперативного определения поисковой системой региона сайта, настоятельно рекомендую внести на страницу с контактной информацией сайта полные контактные данные, включая индекс и название города в формате:&lt;br /&gt;49000, г. Днепропетровск, ул. Короленко, д. 123.&lt;br /&gt;А также номера телефонов, включая префикс, в формате:&lt;br /&gt;+38 (067) 123-1234, +38 (0562) 111-222 (факс).&lt;br /&gt;Если на сайте не указаны региональные контактные координаты, то может возникнуть ситуация, при которой поисковые системы (например, Яндекс) будут присваивать сайту не соответствующий регион, что приведет к некорректному положению сайта при выдаче результатов поиска.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3. Технические рекомендации.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Каждый сайт должны иметь 3 обязательных файла: robots.txt, sitemap.xml и favicon.ico (думаю, что все знают их назначение). Первые два файла  запрашивают все поисковые боты, а последний - все клиентские браузеры, поэтому не нужно их огорчать ;)).&lt;br /&gt;&lt;br /&gt;При запросе любых URLs, содержащих неосновные хосты (например, http://domain.com/ или http://domain.com/page.html без префикса WWW) необходимо сделать полный редирект на URL, с ответом сервера HTTP/1.1 301 Moved Permanently, содержащий основной хост - http://www.domain.com/.&lt;br /&gt;Пример решения:&lt;br /&gt;RewriteEngine On&lt;br /&gt;RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]&lt;br /&gt;RewriteCond %{REQUEST_URI} !^/robots\.txt$&lt;br /&gt;RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]&lt;br /&gt;&lt;br /&gt;На сайте не должны присутствовать повторяющиеся страницы, например главная страница  по двум адресам http://www.domain.com/ и http://www.domain.com/index.html. Необходимо оставить http://www.domain.com/ страницу, а для страниц-дубликатов настроить переадресацию с ответом сервера HTTP/1.1 301 Moved Permanently на соответствующие страницы, либо HTTP/1.1 404 Not Found. Необходимо, чтобы каждая страница была доступна только по одному адресу.&lt;br /&gt;Пример решения:&lt;br /&gt;Redirect 301 /index.html http://www.domain.com/&lt;br /&gt;&lt;br /&gt;При обращении к заведомо несуществующей странице, например http://www.domain.com/bla-bla-bla сервер не должен выдавать: HTTP/1.1 302 Found. Необходимо настроить сервер так, чтобы при обращении к несуществующей странице он выдавал: HTTP/1.1 404 Not Found.&lt;br /&gt;Некорректная обработка данного запроса может привести к неправильной индексации сайта поисковыми системами и к проблемам с индексацией вообще, вплоть до полного исключения сайта из индекса поисковой системы.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;P.S.&lt;/span&gt; На SEO влияет также и скорость работы сайта, но это уже тема для отдельного будущего разговора.&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-2584784658444298881?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/2584784658444298881/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2010/11/seo.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/2584784658444298881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/2584784658444298881'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2010/11/seo.html' title='SEO и общие рекомендации'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-3773405637292072270</id><published>2010-09-27T20:49:00.008+03:00</published><updated>2010-09-27T22:59:27.373+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><category scheme='http://www.blogger.com/atom/ns#' term='typo3'/><category scheme='http://www.blogger.com/atom/ns#' term='tt_news'/><title type='text'>TYPO3 и SEO (часть вторая - tt_news)</title><content type='html'>В предыдущей статье, а точнее в первой части темы TYPO3 и SEO, я рассказывал о том, как в Typo3 с помощью дополнительных плагинов и TypoScript можно формировать Title и Description обычных страниц системы - page. Но сайт на Typo3 может иметь и другие страницы...&lt;br /&gt;&lt;br /&gt;Tt_news - одно из наиболее популярных расширений, применяемых с Typo3. Данный плагин для просмотра всего списка новостей использует одну единственную страницу - страницу детального просмотра новости. Для единообразия и более успешной раскрутки сайта, данная страница должна иметь тот же формат Title, что и все остальные страницы. &lt;br /&gt;&lt;br /&gt;Я покажу как это можно сделать.&lt;br /&gt;&lt;br /&gt;Предположим, что мы имеем следующие страницы на сайте:&lt;br /&gt;&lt;div style="float:left;width:700px;clear:both;"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_86zbmhuZ4DY/TKD3ZBcbRbI/AAAAAAAAAHg/ENb02KYZKCs/s1600/1.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 221px; height: 291px;" src="http://2.bp.blogspot.com/_86zbmhuZ4DY/TKD3ZBcbRbI/AAAAAAAAAHg/ENb02KYZKCs/s400/1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5521685152412681650" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Причем, уникальные идентификаторы страниц (uid) имеем следующие:&lt;br /&gt;Новости - 12&lt;br /&gt;Новости сайта - 37 (страница единичного просмотра)&lt;br /&gt;Новости и статьи - 4 (Sysfolder со списком новостей)&lt;br /&gt;&lt;br /&gt;Typo3 шаблон для страницы Новости и Новости сайта:&lt;br /&gt;plugin.tt_news.code &gt;&lt;br /&gt;# Не индексируем страницу со списком новостей&lt;br /&gt;config.index_enable = 0&lt;br /&gt;&lt;br /&gt;plugin.tt_news {&lt;br /&gt;   code = LIST&lt;br /&gt;}&lt;br /&gt;[globalVar = TSFE:id = 70]&lt;br /&gt; # На данной странице показываем только архивные новости&lt;br /&gt; plugin.tt_news.archive = 1&lt;br /&gt;[else]&lt;br /&gt;    plugin.tt_news.archive = -1&lt;br /&gt;[global]&lt;br /&gt;&lt;br /&gt;[globalVar = GP:tx_ttnews|tt_news &gt; 0]&lt;br /&gt; # Страница единичной новости&lt;br /&gt; plugin.tt_news.code = SINGLE&lt;br /&gt; # Страницу единичной новости - индексируем!&lt;br /&gt; config.index_enable = 1&lt;br /&gt; # Для единичной новости или статьи создаем мета-теги по нашим правилам&lt;br /&gt;        config.noPageTitle = 2&lt;br /&gt;&lt;br /&gt;        # Для description страницы используем subheader - подзаголовок новости&lt;br /&gt;        page.meta.description &gt;&lt;br /&gt;        page.meta.description.data = register:newsSubheader&lt;br /&gt;&lt;br /&gt;        # Запросом находим title - заголовок новости&lt;br /&gt;        lib.meta_news=CONTENT&lt;br /&gt;        lib.meta_news.table = tt_news&lt;br /&gt;        lib.meta_news.select {&lt;br /&gt;           pidInList = 4&lt;br /&gt;           andWhere.data = GP:tx_ttnews|tt_news&lt;br /&gt;           andWhere.intval = 1&lt;br /&gt;           andWhere.wrap = uid=|&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        # Это будет перенос на новую строку (см. далее)&lt;br /&gt;        lib.meta_news.renderObj = COA&lt;br /&gt;        lib.meta_news.renderObj.5 = TEXT&lt;br /&gt;        lib.meta_news.renderObj.5.value (&lt;br /&gt;&lt;br /&gt;        )&lt;br /&gt;&lt;br /&gt;        lib.meta_news.renderObj.10 = TEXT&lt;br /&gt;        lib.meta_news.renderObj.10 {&lt;br /&gt;     field = title&lt;br /&gt;            wrap = &amp;lt;title&amp;gt;|&amp;nbsp;: Имя сайта&amp;lt;/title&amp;gt;&lt;br /&gt;        }&lt;br /&gt;        lib.meta_news.renderObj.10.append &lt; lib.meta_news.renderObj.5&lt;br /&gt;&lt;br /&gt;        # Ручная генерация мета-тега - description&lt;br /&gt;        # (если кому-то интересно - можно разкомментировать, но убрать page.meta.description выше)&lt;br /&gt;        #lib.meta_news.renderObj.20 = TEXT&lt;br /&gt;        #lib.meta_news.renderObj.20 {&lt;br /&gt;        # field = short&lt;br /&gt;        # wrap = &amp;lt;meta name="description" content="|" /&amp;gt;&lt;br /&gt;        #}&lt;br /&gt;        #lib.meta_news.renderObj.20.append &lt; lib.meta_news.renderObj.5&lt;br /&gt;&lt;br /&gt;        # Записываем в заголовок мета данные&lt;br /&gt;        page.headerData.776 &gt;&lt;br /&gt;        page.headerData.776 &lt; lib.meta_news&lt;br /&gt;&lt;br /&gt;[global]&lt;br /&gt;&lt;br /&gt;# Остальные настройки новостей&lt;br /&gt;plugin.tt_news.stdWrap.wrap = &lt;div id="sitenews"&gt;|&lt;/div&gt;&lt;br /&gt;plugin.tt_news.templateFile = fileadmin/templates/tt_news_v3_template.html&lt;br /&gt;# Указываем id папки с новостями&lt;br /&gt;plugin.tt_news.pid_list = 4&lt;br /&gt;# Указываем страницу для детального просмотра&lt;br /&gt;plugin.tt_news.singlePid = 37&lt;br /&gt;# Количество новостей в списке&lt;br /&gt;plugin.tt_news.limit = 6&lt;br /&gt;# Задаем формат даты&lt;br /&gt;plugin.tt_news.displayList.date_stdWrap.strftime = %d.%m.%Y&lt;br /&gt;# Если у новости нет подзаголовка, то в режиме списка новостей отображаем первые 250 символов её "тела"&lt;br /&gt;plugin.tt_news.displayList.subheader_stdWrap {&lt;br /&gt;  crop = 250 | ... | 1&lt;br /&gt;  ifEmpty.field = bodytext &lt;br /&gt;}&lt;br /&gt;lib.newsContent &lt; plugin.tt_news&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-3773405637292072270?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/3773405637292072270/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2010/09/typo3-seo-ttnews.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/3773405637292072270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/3773405637292072270'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2010/09/typo3-seo-ttnews.html' title='TYPO3 и SEO (часть вторая - tt_news)'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_86zbmhuZ4DY/TKD3ZBcbRbI/AAAAAAAAAHg/ENb02KYZKCs/s72-c/1.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-316655083065080943</id><published>2010-07-18T13:43:00.011+03:00</published><updated>2010-07-18T19:54:37.089+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><category scheme='http://www.blogger.com/atom/ns#' term='typo3'/><category scheme='http://www.blogger.com/atom/ns#' term='сео'/><title type='text'>TYPO3 и SEO (часть первая)</title><content type='html'>Думаю, ни для кого не секрет, что базовыми элементами SEO являются: заголовок страницы (TITLE), описание страницы (META DESCRIPTION) и набор ключевых слов (META KEYWORDS).&lt;br /&gt;&lt;br /&gt;Благодаря своему скрипту, Typo3 позволяет динамично и довольно гибко управлять данными параметрами, что делает тайповские сайты дружественными для поисковых систем.&lt;br /&gt;&lt;br /&gt;Ну что ж, начнем, пожалуй? Но для начала установим небольшое, очень простое и очень полезное расширение - &lt;span style="font-weight:bold;"&gt;&lt;a href="http://typo3.org/extensions/repository/view/seo_basics/current/"&gt;seo_basics&lt;/a&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Данное расширение позволяет очень эффективно просматривать и редактировать все вышеперечисленные параметры для всех страниц сайта:&lt;br /&gt;&lt;p style="width:100%"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_86zbmhuZ4DY/TELj5yJN2tI/AAAAAAAAAGw/RBq_eW43WLs/s1600/1.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 615px; " src="http://1.bp.blogspot.com/_86zbmhuZ4DY/TELj5yJN2tI/AAAAAAAAAGw/RBq_eW43WLs/s400/1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5495205077197904594" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_86zbmhuZ4DY/TELkBrgLR6I/AAAAAAAAAG4/albBa-8Tj2E/s1600/2.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 615px;" src="http://2.bp.blogspot.com/_86zbmhuZ4DY/TELkBrgLR6I/AAAAAAAAAG4/albBa-8Tj2E/s400/2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5495205212854110114" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Очень удобным является то, что с помощью цвета полей ввода seo_basics говорит о корректности длины полей (желтый - коротко, зеленый - норма, красный - перебор).&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;После редактирования полей их необходимо активировать с помощью следующего TypoScript:&lt;br /&gt;&lt;br /&gt;page.meta.keywords.field = keywords&lt;br /&gt;page.meta.description.field = description&lt;br /&gt;&lt;br /&gt;А где же активация Title спросите Вы. Тут не все так просто! Дело в том, что заголовок страницы, как правило, является составным. В моей практике, это чаще всего - заголовок текущей страницы + разделитель + название сайта. На самом деле, правила формирования Title могут быть какими-угодно. Здесь главное помнить следующее:&lt;br /&gt;1. Поисковики учитывают только 70-80 символов заголовка (Google - 70, Yandex - 80);&lt;br /&gt;2. Чем ближе к началу фразы слово, тем его вес для поисковиков выше;&lt;br /&gt;3. Чем короче заголовок страницы тем весомее каждое его слово;&lt;br /&gt;4. Крайне желательно, чтобы на сайте не было страниц с повторяющимися Title, т.е. заголовки страниц должны быть уникальными.&lt;br /&gt;&lt;br /&gt;Я покажу как сформировать заголовок в формате: &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Заголовок страницы : Имя сайта (компании)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Имя сайта прописывается здесь:&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_86zbmhuZ4DY/TELtxjRThzI/AAAAAAAAAHA/rE0ly1exOSY/s1600/3.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 615px;" src="http://2.bp.blogspot.com/_86zbmhuZ4DY/TELtxjRThzI/AAAAAAAAAHA/rE0ly1exOSY/s400/3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5495215930882623282" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Теперь с помощью TypoScript собираем все вместе:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;# Говорим TYPO3 что title мы формируем сами&lt;br /&gt;config.noPageTitle = 2&lt;br /&gt;&lt;br /&gt;plugin.tx_seobasics_sitetitle &gt;&lt;br /&gt;plugin.tx_seobasics_sitetitle = TEXT&lt;br /&gt;plugin.tx_seobasics_sitetitle {&lt;br /&gt;    cObject =&lt; plugin.tx_seobasics_sitetitle.multilang&lt;br /&gt;    ifEmpty.data = TSFE:tmpl|sitetitle&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;plugin.tx_seobasics &gt;&lt;br /&gt;plugin.tx_seobasics = COA&lt;br /&gt;plugin.tx_seobasics {&lt;br /&gt;    # Формируем title страницы&lt;br /&gt;    10 = TEXT &lt;br /&gt;    10.data = page:tx_seo_titletag // page:title&lt;br /&gt;    10.trim = 1&lt;br /&gt;    10.stdWrap.stdWrap.append = TEXT&lt;br /&gt;    10.stdWrap.stdWrap.append.cObject &lt; plugin.tx_seobasics_sitetitle&lt;br /&gt;    10.stdWrap.stdWrap.append.trim = 1&lt;br /&gt;    10.stdWrap.stdWrap.append.required = 1&lt;br /&gt;    10.stdWrap.stdWrap.append.if.isTrue = {$plugin.tx_seo.titleWrapAppendSiteTitle}&lt;br /&gt;    10.stdWrap.stdWrap.append.noTrimWrap = | : ||&lt;br /&gt;    10.stdWrap.noTrimWrap = {$plugin.tx_seo.titleWrap}&lt;br /&gt;    10.stdWrap.insertData = 1&lt;br /&gt;    10.htmlSpecialChars = 1&lt;br /&gt;    10.wrap = &amp;lt;title&amp;gt;|&amp;lt;/title&amp;gt;&lt;br /&gt;&lt;br /&gt;    # Если Вам нужен и мета-тег title раскомментируйте нижние две строки&lt;br /&gt;    #20 &lt; .10&lt;br /&gt;    #20.wrap = &amp;lt;meta name="title" content="|" /&amp;gt;&lt;br /&gt;&lt;br /&gt;    # Ниже приведен скрипт позволяющий формировать остальные SEO-теги вручную&lt;br /&gt;&lt;br /&gt;    # Building the Keywords tag&lt;br /&gt;    #30 = TEXT &lt;br /&gt;    #30 &lt; .10&lt;br /&gt;    #30.data = page:keywords&lt;br /&gt;    #30.stdWrap.noTrimWrap = {$plugin.tx_seo.keywordsWrap}&lt;br /&gt;    #30.stdWrap.stdWrap &gt;&lt;br /&gt;    #30.required = 1&lt;br /&gt;    #30.wrap = &amp;lt;meta name="keywords" content="|" /&amp;gt;&lt;br /&gt;&lt;br /&gt;    # Building the Description tag&lt;br /&gt;    #40 = TEXT&lt;br /&gt;    #40 &lt; .30&lt;br /&gt;    #40.data = page:description&lt;br /&gt;    #40.stdWrap.noTrimWrap = {$plugin.tx_seo.descriptionWrap}&lt;br /&gt;    #40.wrap = &amp;lt;meta name="description" content="|" /&amp;gt;&lt;br /&gt;&lt;br /&gt;    # Building the date tag (last changed)&lt;br /&gt;    #50 = TEXT&lt;br /&gt;    #50 &lt; .10&lt;br /&gt;    #50.data = page:SYS_LASTCHANGED // page:crdate&lt;br /&gt;    #50.date = Y-m-d&lt;br /&gt;    #50.stdWrap &gt;&lt;br /&gt;    #50.wrap = &amp;lt;meta name="date" content="|" /&amp;gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# Записываем наши теги с раздел head страницы сайта&lt;br /&gt;page.headerData.776 = &lt; plugin.tx_seobasics&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;P.S.&lt;/span&gt; В репозитории расширений Typo3 имеется масса &lt;span style="font-weight:bold;"&gt;СЕО&lt;/span&gt;-прибомбасов, в том числе и такие, которые сами генерируют набор ключевых слов для каждой страницы сайта.&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-316655083065080943?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/316655083065080943/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2010/07/typo3-seo.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/316655083065080943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/316655083065080943'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2010/07/typo3-seo.html' title='TYPO3 и SEO (часть первая)'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_86zbmhuZ4DY/TELj5yJN2tI/AAAAAAAAAGw/RBq_eW43WLs/s72-c/1.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-3173633456888644626</id><published>2010-06-28T17:17:00.023+03:00</published><updated>2010-07-18T13:43:46.513+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='optionsplit'/><category scheme='http://www.blogger.com/atom/ns#' term='breadcrumb'/><category scheme='http://www.blogger.com/atom/ns#' term='typo3'/><title type='text'>Продвинутое меню breadcrumb или осваиваем optionSplit</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;Примеров того, как создать простое breadcrumb-меню (навигационное меню) в сети предостаточно, но, чтобы создать более продвинутый его вариант (см. рисунок ниже) пришлось не только погуглить и читать мануалы, но и немного поработать серым веществом.&lt;br /&gt;&lt;div style="clear:both;width:100%;"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_86zbmhuZ4DY/TCiveR-iRNI/AAAAAAAAAGo/unLcj9Ta8bY/s1600/1.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 385px; height: 56px;" src="http://2.bp.blogspot.com/_86zbmhuZ4DY/TCiveR-iRNI/AAAAAAAAAGo/unLcj9Ta8bY/s400/1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5487829080707581138" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="clear:both;width:100%;"&gt;&lt;br /&gt;Итак, поставленная задача примерно такова:&lt;br /&gt;1. Домашнюю страницу нужно отобразить изображением - домиком (это 0-й уровень меню)&lt;br /&gt;2. Меню 1-го уровня (About ICH) необходимо отобразить ссылкой серого цвета&lt;br /&gt;3. Меню остальных уровней - обычные ссылки&lt;br /&gt;4. Текущий пункт меню должен быть крупным и жирным&lt;br /&gt;5. Пункты меню должны отображаться задом наперед, как на картинке.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align:left;"&gt;&lt;br /&gt;Эту задачу я не решил, если бы не замечательное свойство &lt;a href="http://typo3.org/documentation/document-library/references/doc_core_tsref/4.1.0/view/3/1/"&gt;optionSplit&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Так, что же такое optionSplit и что оно нам дает?&lt;br /&gt;&lt;br /&gt;Само название свойства говорит о том, что оно что-то разбивает на части. Так и есть, optionSplit позволяет разбить любую субстанцию на 3 части с помощью специального разделителя - &lt;span style="font-weight:bold;"&gt;|*|&lt;/span&gt;. Эти три части устроены так: первая, последняя и все остальное, что осталось между ними:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;...first part... |*| ...middle part... |*| ...last part...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Сразу для наглядности небольшой пример,&lt;br /&gt;ACT.doNotShowLink = 1 |*| 0 |*| 1&lt;br /&gt;Эта конструкция сделает первый и последний элемент меню простым текстом, а все остальные ссылками.&lt;br /&gt;&lt;br /&gt;Если пока еще ничего не понятно, то сейчас при решении нашей конкретной задачи станет яснее:&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1. Организуем наше меню с помощью списков UL и LI. Создаем скрипт-заготовку: &lt;/span&gt;&lt;br /&gt;lib.breadcrumb = HMENU&lt;br /&gt;lib.breadcrumb.special = rootline&lt;br /&gt;lib.breadcrumb.special.range = 0|-1&lt;br /&gt;lib.breadcrumb.wrap = &amp;lt;ul&amp;gt; | &amp;lt;/ul&amp;gt;&lt;br /&gt;lib.breadcrumb.1 = TMENU&lt;br /&gt;lib.breadcrumb.1{&lt;br /&gt; noBlur = 1&lt;br /&gt; NO.allWrap = &amp;lt;li&amp;gt; | &amp;lt;/li&amp;gt;&lt;br /&gt;&lt;br /&gt; ACT = 1&lt;br /&gt;        ACT.allWrap = &amp;lt;li&amp;gt; | &amp;lt;/li&amp;gt;&lt;br /&gt;&lt;br /&gt; CUR = 1&lt;br /&gt;        CUR.allWrap = &amp;lt;li&amp;gt; | &amp;lt;/li&amp;gt;&lt;br /&gt; CUR.doNotLinkIt = 1&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. Делаем первый пункт навигационного меню изображением домика (следите за изменениями ACT.allWrap).&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;Сначала наш список пунктов меню делим на 3 части:&lt;br /&gt;&lt;br /&gt;ACT.allWrap = &amp;lt;li class="firstcrumb"&amp;gt;|&amp;lt;/li&amp;gt;|*|&amp;lt;li&amp;gt;|&amp;lt;/li&amp;gt;|*|&amp;lt;li class="lastcrumb"&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;&lt;br /&gt;Добавляем для первого меню картинку:&lt;br /&gt;ACT.allWrap = &amp;lt;li class="firstcrumb"&amp;gt;|&amp;lt;img src="fileadmin/templates/img/home.png" alt="Home" /&amp;gt;&amp;lt;/li&amp;gt;|*|&amp;lt;li&amp;gt;|&amp;lt;/li&amp;gt;|*|&amp;lt;li class="lastcrumb"&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;&lt;br /&gt;Делаем изображение ссылкой:&lt;br /&gt;ACT.allWrap = &amp;lt;li class="firstcrumb"&amp;gt;|&amp;lt;a href="http://www.domain.com/"&amp;gt;&amp;lt;img src="fileadmin/templates/img/home.png" alt="Home" /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;|*|&amp;lt;li&amp;gt;|&amp;lt;/li&amp;gt;|*|&amp;lt;li class="lastcrumb"&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;&lt;br /&gt;Удаляем текстовую ссылку возле домика:&lt;br /&gt;ACT.allWrap = &amp;lt;li class="firstcrumb"&amp;gt;&amp;lt;a href="http://www.domain.com/"&amp;gt;&amp;lt;img src="fileadmin/templates/img/home.png" alt="Home" /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;|*|&amp;lt;li&amp;gt;|&amp;lt;/li&amp;gt;|*|&amp;lt;li class="lastcrumb"&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;# здесь делим список всего на 2 части - первый пункт меню и все остальные&lt;br /&gt;# первый пункт меню - не ссылка!&lt;br /&gt;ACT.doNotShowLink = 1 |*| 0&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3. Меню 1-го уровня (About ICH) необходимо отобразить ссылкой серого цвета:&lt;/span&gt;&lt;br /&gt;Данный пункт меню является вторым по счету и находится в промежутке между первым и последним пунктом меню. Но как ему задать персональный CSS-стиль? Оказывается optionSplit имеет дополнительные возможности по разбиванию на части. Дополнительная разбивка происходит с помощью специального разделителя - &lt;span style="font-weight:bold;"&gt;||&lt;/span&gt;(две палки!). Таким образом, по левую сторону от первого разделителя |*|, мы создаем индивидуальные настройки для 1-го и 2-го уровня меню:&lt;br /&gt;ACT.allWrap = &amp;lt;li class="firstcrumb"&amp;gt;&amp;lt;a href="http://www.domain.com/"&amp;gt;&amp;lt;img src="fileadmin/templates/img/home.png" alt="Home" /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;||&amp;lt;li class="secondcrumb"&amp;gt;|&amp;lt;/li&amp;gt;|*|&amp;lt;li&amp;gt;|&amp;lt;/li&amp;gt;|*|&amp;lt;li class="lastcrumb"&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;# здесь делим список всего на 2 части - первый пункт меню и все остальные&lt;br /&gt;# первый пункт меню не отображаем&lt;br /&gt;ACT.doNotShowLink = 1 |*| 0&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;4. Делаем текущий пункт меню крупным и жирным текстом.&lt;/span&gt;&lt;br /&gt;CUR = 1&lt;br /&gt;CUR.doNotLinkIt = 1&lt;br /&gt;CUR.allWrap = &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt; | &amp;lt;/strong&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;5. Пункты меню должны отображаться задом наперед:&lt;/span&gt;&lt;br /&gt;Тут я схитрил и воспользовался услугами CSS, хотя не исключаю, что все можно было сделать и с помощью TS.&lt;br /&gt;ul, ul li{&lt;br /&gt; display:inline;&lt;br /&gt; list-style:none;&lt;br /&gt;}&lt;br /&gt;#navmenu ul{&lt;br /&gt; float:left;&lt;br /&gt;}&lt;br /&gt;#navmenu li{&lt;br /&gt; float:right;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Однако, данный способ не работает в злополучном IE7. Поэтому здесь можно выполнить реверс (обратную перестановку) пунктов меню при помощи свойства - itemArrayProcFunc, которое вызывает пользовательскую функцию, написанную на PHP.&lt;br /&gt;&lt;br /&gt;Сначала создаем файл tools.php в директории fileadmin/userfuncs/ следующего содержания:&lt;br /&gt;&amp;lt;?php&lt;br /&gt;class user_tools {&lt;br /&gt;&lt;br /&gt; function reverseMenuItemProcFunc($I,$conf) {&lt;br /&gt;  return array_reverse($I);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;Подключаем и вызываем нашу пользовательскую функцию к скрипту:&lt;br /&gt;&lt;br /&gt;includeLibs.myFunc = fileadmin/userfuncs/tools.php&lt;br /&gt;lib.breadcrumb.1.itemArrayProcFunc = user_tools-&gt;reverseMenuItemProcFunc&lt;br /&gt;&lt;br /&gt;Теперь можно изменить css:&lt;br /&gt;#navmenu li{&lt;br /&gt; float:&lt;span style="font-weight:bold;"&gt;left&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;6. Поставим разделитель в виде наклонного слэша между нашими пунктами меню:&lt;/span&gt;&lt;br /&gt;ACT.allWrap = &amp;lt;li class="firstcrumb"&amp;gt;&amp;lt;span class="delim"&amp;gt;/&amp;lt;/span&amp;gt;&amp;lt;a href="http://www.domain.com/" title="Home"&amp;gt;&amp;lt;img src="fileadmin/templates/img/home.png" alt="Home" /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;||&amp;lt;li class="secondcrumb"&amp;gt;&amp;lt;span class="delim"&amp;gt;/&amp;lt;/span&amp;gt;|&amp;lt;/li&amp;gt;|*|&amp;lt;li&amp;gt;&amp;lt;span class="delim"&amp;gt;/&amp;lt;/span&amp;gt;|&amp;lt;/li&amp;gt;|*|&amp;lt;li class="lastcrumb"&amp;gt;&amp;lt;span class="delim"&amp;gt;/&amp;lt;/span&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Готовый скрипт выглядит так:&lt;/span&gt;&lt;br /&gt;#includeLibs.myFunc = fileadmin/userfuncs/tools.php&lt;br /&gt;lib.breadcrumb = HMENU&lt;br /&gt;lib.breadcrumb.special = rootline&lt;br /&gt;lib.breadcrumb.special.range = 0|-1&lt;br /&gt;lib.breadcrumb.wrap = &amp;lt;div id="navmenu"&amp;gt;&amp;lt;ul&amp;gt; | &amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;lib.breadcrumb.1 = TMENU&lt;br /&gt;lib.breadcrumb.1{&lt;br /&gt; noBlur = 1&lt;br /&gt; NO.allWrap = &amp;lt;li&amp;gt; | &amp;lt;/li&amp;gt;&lt;br /&gt;&lt;br /&gt; ACT = 1&lt;br /&gt; ACT.ATagParams.dataWrap = title="{field:subtitle}"&lt;br /&gt; ACT.allWrap = &amp;lt;li class="firstcrumb"&amp;gt;&amp;lt;span class="delim"&amp;gt;/&amp;lt;/span&amp;gt;&amp;lt;a href="http://www.domain.com/" title="Home"&amp;gt;&amp;lt;img src="fileadmin/templates/img/home.png" alt="Home" /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;||&amp;lt;li class="secondcrumb"&amp;gt;&amp;lt;span class="delim"&amp;gt;/&amp;lt;/span&amp;gt;|&amp;lt;/li&amp;gt;|*|&amp;lt;li&amp;gt;&amp;lt;span class="delim"&amp;gt;/&amp;lt;/span&amp;gt;|&amp;lt;/li&amp;gt;|*|&amp;lt;li class="lastcrumb"&amp;gt;&amp;lt;span class="delim"&amp;gt;/&amp;lt;/span&amp;gt;|&amp;lt;/li&amp;gt;&lt;br /&gt; ACT.doNotShowLink = 1 |*| 0&lt;br /&gt;&lt;br /&gt; CUR = 1&lt;br /&gt; CUR.doNotLinkIt = 1&lt;br /&gt; CUR.allWrap = &amp;lt;li&amp;gt;&amp;lt;strong&amp;gt; | &amp;lt;/strong&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;}&lt;br /&gt;# Реверс пунктов меню пользовательской функцией&lt;br /&gt;#lib.breadcrumb.1.itemArrayProcFunc = user_tools-&gt;reverseMenuItemProcFunc&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Вот мои CSS-стили:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;#navmenu ul, #navmenu ul li{&lt;br /&gt; display:inline;&lt;br /&gt; list-style:none;&lt;br /&gt; height:30px;&lt;br /&gt; line-height:30px;&lt;br /&gt;}&lt;br /&gt;#navmenu ul{&lt;br /&gt; float:left;&lt;br /&gt;}&lt;br /&gt;#navmenu li{&lt;br /&gt; float:right;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#navmenu strong{&lt;br /&gt; font-size:22px;&lt;br /&gt; color:#333333;&lt;br /&gt; line-height:21px;&lt;br /&gt;}&lt;br /&gt;#navmenu .delim{&lt;br /&gt; color:#333333;&lt;br /&gt; padding:0 7px;&lt;br /&gt; text-align:center;&lt;br /&gt;}&lt;br /&gt;#navmenu .secondcrumb a{&lt;br /&gt; color:#333333;&lt;br /&gt;}&lt;br /&gt;/* end breadcrumb menu */&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-3173633456888644626?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/3173633456888644626/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2010/06/breadcrumb-optionsplit.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/3173633456888644626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/3173633456888644626'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2010/06/breadcrumb-optionsplit.html' title='Продвинутое меню breadcrumb или осваиваем optionSplit'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_86zbmhuZ4DY/TCiveR-iRNI/AAAAAAAAAGo/unLcj9Ta8bY/s72-c/1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-2965556641767847127</id><published>2010-06-23T22:39:00.007+03:00</published><updated>2010-06-28T17:03:00.882+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='footer'/><category scheme='http://www.blogger.com/atom/ns#' term='меню'/><category scheme='http://www.blogger.com/atom/ns#' term='typo3'/><title type='text'>Меню для футера (подвала) из столбцов</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_86zbmhuZ4DY/TCirdcVyYGI/AAAAAAAAAGY/or0xNpVYVhY/s1600/1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 74px;" src="http://2.bp.blogspot.com/_86zbmhuZ4DY/TCirdcVyYGI/AAAAAAAAAGY/or0xNpVYVhY/s400/1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5487824668263080034" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Если есть желание или необходимость сделать в подвале сайта меню состоящее из нескольких столбцов (как изображено на скриншоте), которые содержат пункты меню 1-го и 2-го уровня (черные и синие, соответственно), то могу поделиться следующим TS-кодом:&lt;br /&gt;&lt;br /&gt;lib.footermenu = HMENU&lt;br /&gt;lib.footermenu {&lt;br /&gt;  #wrap = &amp;lt;div class="footer_menu"&amp;gt; | &amp;lt;/div&amp;gt;&lt;br /&gt;  # исключаем из нашего меню страницы со следующими id (если нужно что-то скрыть)&lt;br /&gt;  excludeUidList = 63,4&lt;br /&gt;  entryLevel = 0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  1 = TMENU&lt;br /&gt;  1 {&lt;br /&gt;    noBlur = 1&lt;br /&gt;    expAll=1&lt;br /&gt;    #wrap = &amp;lt;ul class="footer_menu_bar"&amp;gt; | &amp;lt;/ul&amp;gt;&lt;br /&gt;&lt;br /&gt;    NO {&lt;br /&gt;      linkWrap = &amp;lt;li class="footer_menu_item"&amp;gt;&amp;lt;h3&amp;gt; | &amp;lt;/h3&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;      wrapItemAndSub = &amp;lt;ul class="footer_menu_bar"&amp;gt; | &amp;lt;/ul&amp;gt;&lt;br /&gt;      stdWrap.htmlSpecialChars = 1&lt;br /&gt;      doNotLinkIt = 1&lt;br /&gt;    }&lt;br /&gt;    CUR = 1&lt;br /&gt;    CUR {&lt;br /&gt;      linkWrap = &amp;lt;li class="footer_menu_item"&amp;gt;&amp;lt;h3&amp;gt; | &amp;lt;/h3&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;      wrapItemAndSub = &amp;lt;ul class="footer_menu_bar current"&amp;gt; | &amp;lt;/ul&amp;gt;&lt;br /&gt;      stdWrap.htmlSpecialChars = 1&lt;br /&gt;      doNotLinkIt = 1 &lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  2 = TMENU&lt;br /&gt;  2 {&lt;br /&gt;    noBlur = 1&lt;br /&gt;    expAll=1&lt;br /&gt;    #wrap = &amp;lt;ul&amp;gt; | &amp;lt;/ul&amp;gt;&lt;br /&gt;&lt;br /&gt;    NO {&lt;br /&gt;      linkWrap = |&lt;br /&gt;      wrapItemAndSub = &amp;lt;li class="footer_menu_item"&amp;gt; | &amp;lt;/li&amp;gt;&lt;br /&gt;      stdWrap.htmlSpecialChars = 1&lt;br /&gt;    }&lt;br /&gt;    ACT = 1&lt;br /&gt;    ACT {&lt;br /&gt;      linkWrap = |&lt;br /&gt;      wrapItemAndSub = &amp;lt;li class="footer_menu_item current"&amp;gt;&amp;lt;span&amp;gt; | &amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;      stdWrap.htmlSpecialChars = 1&lt;br /&gt;      doNotLinkIt = 1 &lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Результатом работы данного скрипта будет генерация HTML-кода такого рода:&lt;br /&gt;&amp;lt;ul class="footer_menu_bar current"&amp;gt;&lt;br /&gt;  &amp;lt;li class="footer_menu_item"&amp;gt;&lt;br /&gt;    &amp;lt;h3&amp;gt; ABOUT US &amp;lt;/h3&amp;gt;&lt;br /&gt;  &amp;lt;/li&amp;gt;&lt;br /&gt;  &amp;lt;li class="footer_menu_item"&amp;gt;&amp;lt;a href="about/vision/"&amp;gt;Vision&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;  &amp;lt;li class="footer_menu_item"&amp;gt;&amp;lt;a href="about/history/"&amp;gt;History&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;  &amp;lt;li class="footer_menu_item"&amp;gt;&amp;lt;a href="about/organisation/"&amp;gt;Organisation&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;  &amp;lt;li class="footer_menu_item"&amp;gt;&amp;lt;a href="about/process-of-harmonisation/"&amp;gt;Process of harmonisation&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;  &amp;lt;li class="footer_menu_item"&amp;gt;&amp;lt;a href="about/faq/"&amp;gt;FAQ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;&amp;lt;ul class="footer_menu_bar"&amp;gt;&lt;br /&gt;  &amp;lt;li class="footer_menu_item"&amp;gt;&lt;br /&gt;    &amp;lt;h3&amp;gt; ICH PRODUCTS &amp;lt;/h3&amp;gt;&lt;br /&gt;  &amp;lt;/li&amp;gt;&lt;br /&gt;  &amp;lt;li class="footer_menu_item"&amp;gt;&amp;lt;a href="products/guidelines/"&amp;gt;Guidelines&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;  &amp;lt;li class="footer_menu_item"&amp;gt;&amp;lt;a href="products/meddra/"&amp;gt;MedDRA&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;  &amp;lt;li class="footer_menu_item"&amp;gt;&amp;lt;a href="products/ctd/"&amp;gt;CTD&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;  &amp;lt;li class="footer_menu_item"&amp;gt;&amp;lt;a href="products/electronic-standard/"&amp;gt;Electronic standard&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;  &amp;lt;li class="footer_menu_item"&amp;gt;&amp;lt;a href="products/consideration-documents/"&amp;gt;Consideration Documents&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;  &amp;lt;li class="footer_menu_item"&amp;gt;&amp;lt;a href="products/open-consultation/"&amp;gt;Open Consultation&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-2965556641767847127?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/2965556641767847127/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2010/06/blog-post.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/2965556641767847127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/2965556641767847127'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2010/06/blog-post.html' title='Меню для футера (подвала) из столбцов'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_86zbmhuZ4DY/TCirdcVyYGI/AAAAAAAAAGY/or0xNpVYVhY/s72-c/1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-6101392419849713462</id><published>2010-05-21T17:35:00.015+03:00</published><updated>2010-05-22T10:08:44.808+03:00</updated><title type='text'>Как я настраивал indexed_search на TYPO3 (под Suse Linux)</title><content type='html'>Как обычно, для решения любой задачи, TYPO3 использует комплексный и глобальный подход... Поэтому настройка indexed_search на сайте у меня заняла целый рабочий день. Но из-за этого я не перестаю любить эту систему и желать крепкого здоровья парням пишущим горы запутанной документации. А всё на самом деле оказывается очень просто.&lt;br /&gt;&lt;br /&gt;Для настройки индексированного поиска по сайту нужны следующие вещи:&lt;br /&gt;&lt;br /&gt;1. Само-собой - &lt;span style="font-weight:bold;"&gt;indexed_search&lt;/span&gt;, который нужно просто активировать в менеджере расширений. Это движок и мозги системы поиска, которые занимаются индексацией контента и внешних файлов (pdf, doc, xls, rtf ...). Нужно знать, что для индексации внешних файлов, indexed_search использует дополнительные внешние утилиты - pdftotext и pdfinfo, catdoc и др., которые отдельно устанавливаются на операционную систему. В настройках плагина нужно обязательно указать пути к этим программам:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_86zbmhuZ4DY/S_akAf-5TTI/AAAAAAAAAFw/RzyG9DRsE5Y/s1600/0.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 281px;" src="http://3.bp.blogspot.com/_86zbmhuZ4DY/S_akAf-5TTI/AAAAAAAAAFw/RzyG9DRsE5Y/s400/0.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5473742725607673138" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2. Для того, чтобы "натравливать" indexed_search на тот контент, который требует индексации, нужен спецальный сканер. Этим сканером является ext - &lt;span style="font-weight:bold;"&gt;Site Crawler&lt;/span&gt; (ключ, для поиска в репозитории расширений - &lt;a href="http://typo3.org/extensions/repository/view/crawler/current/"&gt;crawler&lt;/a&gt;). Настраивается crawler как с помощью TypoScript (что я и сделал), так и с помощью визуальной формы. Вот настройки сканера для одного из моих сайтов:&lt;br /&gt;&lt;br /&gt;tx_crawler.crawlerCfg.paramSets.test = &amp;L=[0-3]&amp;contentId=[_TABLE:tt_content]&lt;br /&gt;tx_crawler.crawlerCfg.paramSets.test {&lt;br /&gt;  procInstrFilter = tx_indexedsearch_reindex&lt;br /&gt;  baseUrl = http://www.DOMAIN.com.ua/&lt;br /&gt;  # настройка индексации списка новостей&lt;br /&gt;  #  _PID:4 указывает на системную папку где хранятся все Новости сайта&lt;br /&gt;  tt_news = &amp;tx_ttnews[tt_news]=[_TABLE:tt_news; _PID:4]&lt;br /&gt;  tt_news.procInstrFilter = tx_indexedsearch_reindex&lt;br /&gt;  tt_news.cHash = 1&lt;br /&gt;  # страница единичного просмотра Новости&lt;br /&gt;  tt_news.pidsOnly = 37&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Данные настройки помещаются в свойства корневой страницы сайта:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_86zbmhuZ4DY/S_arKjG-yUI/AAAAAAAAAF4/jN-zKBVYSBg/s1600/1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 249px;" src="http://1.bp.blogspot.com/_86zbmhuZ4DY/S_arKjG-yUI/AAAAAAAAAF4/jN-zKBVYSBg/s400/1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5473750594826979650" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Нужно также не забыть, что Crawler настраивается и в менеджере расширений. Важным параметром здесь является - PHP Path [phpPath], который указывает сканеру где находится PHP.&lt;br /&gt;&lt;br /&gt;3. Так как контент сайта постоянно меняется, то сайт требует периодической переиндексации. Как это сделать? Просто нужно запускать сканер по расписанию! Здесь на помощь приходит утилита crontab. Чтобы отредактировать настройки crontab, нужно запустить его с параметром "-e": crontab -e. Почитать о настройках крона можно, например, &lt;a href="http://opensuse.swerdna.org/susecron.html"&gt;здесь&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;У меня же настройки такие:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_86zbmhuZ4DY/S_awoRrrEoI/AAAAAAAAAGA/DKWwO7IHsP8/s1600/3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 82px;" src="http://1.bp.blogspot.com/_86zbmhuZ4DY/S_awoRrrEoI/AAAAAAAAAGA/DKWwO7IHsP8/s400/3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5473756603103253122" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4. Для того, чтобы плагину indexed_search разрешить индексацию страниц, в TS-шаблоне необходимо установить параметр index_enable:&lt;br /&gt;&lt;br /&gt;page.config.index_enable = 1&lt;br /&gt;# разрешить индексирование внешних файлов&lt;br /&gt;# page.config.index_externals = 1&lt;br /&gt;# индексируются только закешированные страницы&lt;br /&gt;# page.no_cache = 0&lt;br /&gt;&lt;br /&gt;Indexed_search будет индексировать всё, что находится между специальными комментариями &lt;!--TYPO3SEARCH_begin--&gt; и &lt;!--TYPO3SEARCH_end--&gt;. &lt;br /&gt;Вот пример HTML-шаблона:&lt;br /&gt;&lt;br /&gt;  &amp;lt;div id="header"&amp;gt;&lt;br /&gt;    ###searchbox###&lt;br /&gt;    &amp;lt;div id="logo"&amp;gt;&amp;lt;img src="img/logo.png" /&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;  &amp;lt;/div&amp;gt;&lt;br /&gt;  &amp;lt;div id="content1"&amp;gt;&lt;br /&gt;    &amp;lt;div id="cornercontent1"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;    &amp;lt;div id="tabcontent1"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;    &amp;lt;div class="sitetext"&amp;gt;&lt;br /&gt;    &lt;span style="font-weight:bold;"&gt;&amp;lt;!--TYPO3SEARCH_begin--&amp;gt;&lt;/span&gt; &lt;br /&gt;    &amp;lt;!-- ###CONTENT### --&amp;gt;&lt;br /&gt;    &amp;lt;!-- ###CONTENT### --&amp;gt;&lt;br /&gt;    &lt;span style="font-weight:bold;"&gt;&amp;lt;!--TYPO3SEARCH_end--&amp;gt;&lt;/span&gt;&lt;br /&gt;    &amp;lt;!-- ###SITENEWS### --&amp;gt;&lt;br /&gt;    &amp;lt;!-- ###SITENEWS### --&amp;gt;&lt;br /&gt;    &amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Как видно из примера, область со списком новостей сайта (SITENEWS) индексироваться не будет. Согласно нашим настройкам, Новости будут индексироваться другим способом (см. выше).&lt;br /&gt;&lt;br /&gt;5. Чтобы отображать результаты поиска создайте отдельную страницу и вставьте в нее плагин - Indexed Search.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_86zbmhuZ4DY/S_a2mvlCGJI/AAAAAAAAAGI/ktw9QqE1-Rw/s1600/4.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 220px;" src="http://1.bp.blogspot.com/_86zbmhuZ4DY/S_a2mvlCGJI/AAAAAAAAAGI/ktw9QqE1-Rw/s400/4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5473763173838493842" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Запишите или запомните id этой страницы.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6. Последнее, что нам осталось - прикрутить строку поиска на сайте. Для этих целей я обычно использую плагин macinasearchbox.&lt;br /&gt;&lt;br /&gt;Если для строки поиска в HTML-шаблоне отвести специальное место и "пометить" его маркером - ###searchbox### (см.выше.), то оживить его можно с помощью следующего TS-скрипта:&lt;br /&gt;&lt;br /&gt;# Прикручиваем плагин macinasearchbox&lt;br /&gt;marks.searchbox &gt;&lt;br /&gt;marks.searchbox &lt; plugin.tx_macinasearchbox_pi1&lt;br /&gt;# pidSearchpage = 47 - указывает на страницу отвечающую за показ результатов поиска&lt;br /&gt;marks.searchbox.pidSearchpage = 47&lt;br /&gt;# указываем путь к HTML-шаблону строки поиска&lt;br /&gt;marks.searchbox.templateFile = fileadmin/templates/searchbox_template.html&lt;br /&gt;&lt;br /&gt;# Это дополнительные настройки для indexed search (скрываем ссылку advancedSearch)&lt;br /&gt;plugin.tx_indexedsearch.show.advancedSearchLink = 0&lt;br /&gt;plugin.tx_indexedsearch.show.rules = 0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Как всё это работает на практике можно посмотреть на сайте &lt;a href="http://www.arcasalus.com.ua/" title="Организация лечения в Израиле"&gt;http://www.arcasalus.com.ua/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;P.S.&lt;/span&gt; Забыл предупредить! Для сайтов с большой загрузкой indexed_search вреден, т.к. нагружает систему и работает не быстро.&lt;br /&gt;&lt;br /&gt;&lt;div style="float:left;height:30px;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-6101392419849713462?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/6101392419849713462/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2010/05/indexedsearch-typo3-suse-linux.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/6101392419849713462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/6101392419849713462'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2010/05/indexedsearch-typo3-suse-linux.html' title='Как я настраивал indexed_search на TYPO3 (под Suse Linux)'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_86zbmhuZ4DY/S_akAf-5TTI/AAAAAAAAAFw/RzyG9DRsE5Y/s72-c/0.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-1656041250561085180</id><published>2010-05-13T23:17:00.006+03:00</published><updated>2010-05-14T10:20:05.170+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='стили'/><category scheme='http://www.blogger.com/atom/ns#' term='rte'/><category scheme='http://www.blogger.com/atom/ns#' term='typo3'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Настройка стилей встроенного RTE редактора TYPO3</title><content type='html'>Если Вам захочется добавить свои (пользовательские) стили для дальнейшей работы с ними в RTE-редакторе, то сделать это довольно просто, т.к. TYPO3 замечательная и очень гибкая CMS-система.&lt;br /&gt;&lt;br /&gt;Что это даёт? Это позволит нам форматировать целые блоки или фрагменты текста прямо в редакторе, а также задавать им специфические CSS-стили.&lt;br /&gt;&lt;br /&gt;Без дополнительных настроек списки предустановленных стилей очень скудны:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_86zbmhuZ4DY/S-xiAVF3kLI/AAAAAAAAAFY/nlFbf4T1ndw/s1600/1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 122px;" src="http://3.bp.blogspot.com/_86zbmhuZ4DY/S-xiAVF3kLI/AAAAAAAAAFY/nlFbf4T1ndw/s400/1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5470855405149589682" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Займемся расширением списков стилей.&lt;br /&gt;&lt;br /&gt;1. Создадим CSS файл, который содержит наши дополнительные стили. Причем каждый стиль должен занимать только одну строку. Например:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;/* Стили блоков */&lt;br /&gt;.float_left { float: left; display:block; margin: 0; padding: 0;}&lt;br /&gt;.float_right { float: right; display:block; margin: 0; padding: 0;}&lt;br /&gt;.center { text-align:center; }&lt;br /&gt;/* Стили текста */&lt;br /&gt;.red_txt { color: red; font-size: 12px;}&lt;br /&gt;.blue_bold_txt { color: blue; font-weight: bold;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Назовем наш файл стилей - rte.css и скопируем его в директорию fileadmin/rtecss.&lt;br /&gt;&lt;br /&gt;2. Теперь нужно как-то сказать TYPO3 где лежат пользовательские стили и указать какие стили можно применять к блокам, а какие к тексту.&lt;br /&gt;Для этого переходим в свойства страницы (например, корневой)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_86zbmhuZ4DY/S-xoHDrjdrI/AAAAAAAAAFg/MGzz9H8X5PA/s1600/2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 103px;" src="http://2.bp.blogspot.com/_86zbmhuZ4DY/S-xoHDrjdrI/AAAAAAAAAFg/MGzz9H8X5PA/s400/2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5470862117804668594" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;и помещаем в блок Page TSConfig следующий скрипт:&lt;br /&gt;&lt;br /&gt;RTE {&lt;br /&gt;    default {&lt;br /&gt;     showTagFreeClasses = 1&lt;br /&gt;        # указываем где находится файл стилей&lt;br /&gt;        contentCSS = fileadmin/rtecss/rte.css&lt;br /&gt;&lt;br /&gt;        # очищаем старые стили&lt;br /&gt;        classesAnchor &gt;&lt;br /&gt;        classesLinks =&lt;br /&gt;        # устанавливаем классы для&lt;br /&gt;        # текста&lt;br /&gt;        classesCharacter := addToList(coding, note, important, warning, red_txt, blue_bold_txt)&lt;br /&gt;        # блоков&lt;br /&gt;        classesParagraph := addToList(coding, note, important, warning, float_left, center, float_right)&lt;br /&gt;        # ячеек таблиц&lt;br /&gt;        classesTD := addToList(sub)&lt;br /&gt;        # таблиц&lt;br /&gt;        classesTable := addToList(full, fixed)&lt;br /&gt;        # список всех доступных классов&lt;br /&gt;        proc.allowedClasses := addToList(coding, note, important, warning, float_left, center, float_right)&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Это все. Теперь в редакторе текстов можно увидеть и проделать нечто подобное:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_86zbmhuZ4DY/S-xrw6OMy6I/AAAAAAAAAFo/jeiSBoozVSc/s1600/3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 312px;" src="http://2.bp.blogspot.com/_86zbmhuZ4DY/S-xrw6OMy6I/AAAAAAAAAFo/jeiSBoozVSc/s400/3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5470866135355018146" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-1656041250561085180?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/1656041250561085180/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2010/05/rte-typo3.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/1656041250561085180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/1656041250561085180'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2010/05/rte-typo3.html' title='Настройка стилей встроенного RTE редактора TYPO3'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_86zbmhuZ4DY/S-xiAVF3kLI/AAAAAAAAAFY/nlFbf4T1ndw/s72-c/1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-8176983904498546843</id><published>2010-04-20T10:52:00.004+03:00</published><updated>2010-04-20T11:14:20.544+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='typo3'/><category scheme='http://www.blogger.com/atom/ns#' term='ENABLE_INSTALL_TOOL'/><title type='text'>Файл ENABLE_INSTALL_TOOL автоматически удаляется</title><content type='html'>Второй раз столкнулся с ситуацией, когда TYPO3 &lt;span style="font-weight:bold;"&gt;автоматически&lt;/span&gt; удаляет файл  &lt;span style="font-weight:bold;"&gt;ENABLE_INSTALL_TOOL&lt;/span&gt;. Как следствие - невозможно попасть в BE в раздел Install. Не было времени разбираться в причинах такого поведения системы, но думаю, что они имеют какой-то определенный смысл и объяснения, поэтому выход из данной ситуации следующий: поместить в тело файла ENABLE_INSTALL_TOOL магическую фразу &lt;span style="font-weight:bold;"&gt;KEEP_FILE&lt;/span&gt;. После этого файл ENABLE_INSTALL_TOOL будет существовать до тех пор, пока Вы его сами не удалите.&lt;br /&gt;&lt;br /&gt;Для тех, кто не знает, объясняю, что файл ENABLE_INSTALL_TOOL должен находится в папке typo3conf и служит флажком для входа в раздел Install административной части системы (админки). Создать или удалить файл можно прямо в BE:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_86zbmhuZ4DY/S81iPfuqELI/AAAAAAAAAFQ/UmnMF0zNEZo/s1600/1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 249px;" src="http://3.bp.blogspot.com/_86zbmhuZ4DY/S81iPfuqELI/AAAAAAAAAFQ/UmnMF0zNEZo/s400/1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5462129941425033394" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-8176983904498546843?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/8176983904498546843/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2010/04/enableinstalltool.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/8176983904498546843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/8176983904498546843'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2010/04/enableinstalltool.html' title='Файл ENABLE_INSTALL_TOOL автоматически удаляется'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_86zbmhuZ4DY/S81iPfuqELI/AAAAAAAAAFQ/UmnMF0zNEZo/s72-c/1.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-3391210273745876682</id><published>2010-04-06T17:27:00.042+03:00</published><updated>2011-11-24T18:56:03.921+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='мультиязычность'/><category scheme='http://www.blogger.com/atom/ns#' term='сайт'/><category scheme='http://www.blogger.com/atom/ns#' term='typo3'/><title type='text'>Мультиязычный сайт на TYPO3</title><content type='html'>Несмотря на то, что материала по данной тематике вроде бы и достаточно, но весь он носит кусочно-латочно-разрозненный характер, что мешает быстро решать этот сравнительно простой вопрос. Лично у меня ушло более половины рабочего дня, чтобы склеить все кусочки информации воедино и воссоздать полную и правильную картину. Вот, что у меня из этого вышло.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Два метода сделать TYPO3-сайт многоязычным&lt;/h3&gt;&lt;br /&gt;Существует два варианта решения данного вопроса:&lt;br /&gt;1. Сделать два разных дерева страниц внутри одного проекта. При таком подходе каждое иерархическое дерево, по сути является отдельным сайтом, каждая страница которого отвечает только за один язык.&lt;br /&gt;2. Организация единого дерева страниц для поддержки нескольких языков. При таком подходе достаточно один раз создать страницу сайта, а для поддержки мультиязычности для каждого языка необходимо создать отдельный блок контента.&lt;br /&gt;&lt;br /&gt;Я расскажу про 2-й вариант решения задачи для трех языков (русский, украинский, английский). И еще, последовательность действий, которая тут описана, пригодна на 100% при использовании шаблонов automaketemplate. Чтобы мультиязычность заработала на сайте с TemplaVoila необходимо вставить еще 5 коп, о которых здесь пока нет ни слова...(хотя &lt;a href="http://www.training-typo3.com/2008/12/15/typo3-multi-language/" target="_blank" &gt;здесь&lt;/a&gt; все описано)&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Что нам для этого понадобится?&lt;/h3&gt;&lt;br /&gt;1. Расширение static_info_tables - для настройки мультиязычности сайта в бекенде (BE)&lt;br /&gt;2. Расширение sr_language_menu - для выбора языка (на стороне пользователя - FE)&lt;br /&gt;3. Расширение Realurl - чтобы наши URL-ы были "дружественными" для людей и поисковиков&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Создаем список дополнительных языков для сайта&lt;/h3&gt;&lt;br /&gt;Для начала нужно указать какие дополнительные языки мы собираемся использовать на нашем сайте. Для этого:&lt;br /&gt;&lt;br /&gt;1. Переходим в режим "Список/List" как показано на скриншоте и выбираем в центральной области самую верхнюю строчку списка, которая имеет пиктограмму глобуса:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_86zbmhuZ4DY/S7tJiHiCxsI/AAAAAAAAADg/pRKHEBGzgug/s1600/1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 206px;" src="http://4.bp.blogspot.com/_86zbmhuZ4DY/S7tJiHiCxsI/AAAAAAAAADg/pRKHEBGzgug/s400/1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5457036223975704258" /&gt;&lt;/a&gt;&lt;br /&gt;Обратите внимание, на заполненную таблицу справа - Языки сайта. Здесь отображаются все дополнительные языки сайта. Изначально этот список будет пустым.&lt;br /&gt;&lt;br /&gt;2. Итак, добавляем дополнительный язык для сайта. В самом верху правой части экрана нажимаем кнопку добавить (зеленый плюс) и выбираем тип записи - "Язык сайта".&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_86zbmhuZ4DY/S7ugn48W3gI/AAAAAAAAAFA/XLEjM-Gkx_g/s1600/1a.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 332px; height: 264px;" src="http://3.bp.blogspot.com/_86zbmhuZ4DY/S7ugn48W3gI/AAAAAAAAAFA/XLEjM-Gkx_g/s400/1a.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5457131980650372610" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3. Заполняем следующую формочку:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_86zbmhuZ4DY/S7tLbvvWJ3I/AAAAAAAAADw/JUqVaCTDAyc/s1600/1b.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 361px; height: 400px;" src="http://2.bp.blogspot.com/_86zbmhuZ4DY/S7tLbvvWJ3I/AAAAAAAAADw/JUqVaCTDAyc/s400/1b.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5457038313533089650" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Таким образом, можно задать сколько угодно языков. Я задал 3 языка: Украинский (id=1), Русский (id=2) и Английский (id=3). &lt;br /&gt;Пока, что условно считаем, что русский язык на нашем сайте является основным.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Настройка Typo3 шаблона&lt;/h3&gt;&lt;br /&gt;Настраиваем главный (корневой) TS-шаблон для работы с несколькими языками. Добавляем туда следующие строки:&lt;br /&gt;&lt;br /&gt;# Настройки для основного языка - РУССКОГО&lt;br /&gt;config.linkVars = L&lt;br /&gt;config.sys_language_uid = 0 &lt;br /&gt;config.uniqueLinkVars = 1&lt;br /&gt;config.language = ru&lt;br /&gt;config.locale_all = ru_RU&lt;br /&gt;config.sys_language_overlay = 1&lt;br /&gt;#config.sys_language_mode = content_fallback;0&lt;br /&gt;config.sys_language_mode = ignore&lt;br /&gt;config.htmlTag_langKey = ru-RU&lt;br /&gt;#plugin.tx_indexedsearch._DEFAULT_PI_VARS.lang = 0&lt;br /&gt;#plugin.tx_indexedsearch.templateFile = indexed_search.tmpl&lt;br /&gt;&lt;br /&gt;# Настройки для УКРАИНСКОГО языка&lt;br /&gt;[globalVar = GP:L = 1]&lt;br /&gt;config.language = ua&lt;br /&gt;config.locale_all = ua_UA&lt;br /&gt;config.htmlTag_langKey = ua-UA&lt;br /&gt;config.sys_language_uid = 1&lt;br /&gt;#plugin.tx_indexedsearch._DEFAULT_PI_VARS.lang = 1&lt;br /&gt;#plugin.tx_indexedsearch.templateFile = indexed_search.tmpl&lt;br /&gt;# сюда можно добавлять другие строки для более полной локализации (подключение CSS, HTML-шаблонов и т.д.)&lt;br /&gt;[global]&lt;br /&gt;&lt;br /&gt;# Настройки для АНГЛИЙСКОГО языка&lt;br /&gt;[globalVar = GP:L = 3]&lt;br /&gt;config.language = en&lt;br /&gt;config.locale_all = en_EN&lt;br /&gt;config.htmlTag_langKey = en-EN&lt;br /&gt;config.sys_language_uid = 3&lt;br /&gt;#plugin.tx_indexedsearch._DEFAULT_PI_VARS.lang = 3&lt;br /&gt;#plugin.tx_indexedsearch.templateFile = indexed_search.tmpl&lt;br /&gt;# сюда можно добавлять другие строки для более полной локализации (подключение CSS, HTML-шаблонов и т.д.)&lt;br /&gt;[global]&lt;br /&gt;&lt;br /&gt;Для новичка это может показаться магическим набором невменяемых строк, но на самом деле не всё так сложно. &lt;br /&gt;Вся соль в 2-х ключевых параметрах:&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;config.linkVars = L&lt;/span&gt; (имя GET-переменной отвечающей за идентификацию языка).&lt;br /&gt;Поясню. Обычно страницы нашего сайта доступны по URL типа (без применения RealUrl)&lt;br /&gt;http://mydomain.com/index.php?id=34, что соответствует http://mydomain.com/index.php?id=34&amp;L=0 (язык по умолчанию - русский).&lt;br /&gt;Если же вызвать страницу http://mydomain.com/index.php?id=34&amp;L=1, то увидим страницу с украинским контентом.&lt;br /&gt;Вот, что означает параметр - &lt;span style="font-weight:bold;"&gt;L&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;[globalVar = GP:L = x] &lt;br /&gt;config.sys_language_uid = x&lt;/span&gt; (где, x - id дополнительного языка в списке, в моем случае 1 - укр, 2 - рус, 3 - англ., см. выше). Таким образом, мы сопоставляем значение параметра L с номером (id) дополнительного языка в системе. &lt;br /&gt;&lt;br /&gt;Т.к. русский язык является основным для нашего сайта, то отдельную ветвь типа: &lt;br /&gt;[globalVar = GP:L = х]&lt;br /&gt;...&lt;br /&gt;[global]&lt;br /&gt;для него создавать не нужно.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Настройка бекенда (BE)&lt;/h3&gt;&lt;br /&gt;Для того, чтобы в BE русский язык считался основным и это было видно визуально (см. рисунок ниже),&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_86zbmhuZ4DY/S7uLNt0B69I/AAAAAAAAAD4/paSo7yprNgc/s1600/3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 250px;" src="http://1.bp.blogspot.com/_86zbmhuZ4DY/S7uLNt0B69I/AAAAAAAAAD4/paSo7yprNgc/s400/3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5457108441241873362" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;в &lt;span style="font-weight:bold;"&gt;свойствах&lt;/span&gt; корневой страницы сайта необходимо вставить следующие строки:&lt;br /&gt;mod.web_layout.defLangBinding = 2&lt;br /&gt;mod.SHARED.defaultLanguageLabel = Russia&lt;br /&gt;mod.SHARED.defaultLanguageFlag = ru.gif&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_86zbmhuZ4DY/S7uhexy0BSI/AAAAAAAAAFI/zI2ZQJH_VXU/s1600/2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 177px;" src="http://1.bp.blogspot.com/_86zbmhuZ4DY/S7uhexy0BSI/AAAAAAAAAFI/zI2ZQJH_VXU/s400/2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5457132923624097058" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Создаем мультиязычный контент в TYPO3&lt;/h3&gt;&lt;br /&gt;1. Теперь можно создавать дополнительный контент на дополнительных языках. Дополнительный контент это две вещи - заголовок веб-страницы и ее содержимое. Именно по заголовку страницы, с меткой языка, TYPO3 узнает, что страница имеет еще одну языковую версию. Чтобы создать новый заголовок нужно сделать следующее:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_86zbmhuZ4DY/S7uR5CczcyI/AAAAAAAAAEA/x1LIAfAQWMc/s1600/4.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 66px;" src="http://1.bp.blogspot.com/_86zbmhuZ4DY/S7uR5CczcyI/AAAAAAAAAEA/x1LIAfAQWMc/s400/4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5457115782585742114" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Обязательно отмечаем, галочкой для какой страницы нужно создать новый заголовок (Альтернативный язык страницы)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_86zbmhuZ4DY/S7uS8m6NRyI/AAAAAAAAAEI/hYoJm8uD-kU/s1600/5.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 87px;" src="http://1.bp.blogspot.com/_86zbmhuZ4DY/S7uS8m6NRyI/AAAAAAAAAEI/hYoJm8uD-kU/s400/5.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5457116943423981346" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_86zbmhuZ4DY/S7uUE7wr3FI/AAAAAAAAAEQ/-jXuAWX8p2Q/s1600/6.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 381px; height: 322px;" src="http://4.bp.blogspot.com/_86zbmhuZ4DY/S7uUE7wr3FI/AAAAAAAAAEQ/-jXuAWX8p2Q/s400/6.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5457118185971768402" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_86zbmhuZ4DY/S7uUK9ipDtI/AAAAAAAAAEY/kFlhB12tdtY/s1600/66.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 11px;" src="http://2.bp.blogspot.com/_86zbmhuZ4DY/S7uUK9ipDtI/AAAAAAAAAEY/kFlhB12tdtY/s400/66.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5457118289528950482" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;В дальнейшем заголовок можно отредактировать и в режиме Список/List&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_86zbmhuZ4DY/S7uWabTM3sI/AAAAAAAAAEg/WHmrMDLs0yI/s1600/7.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 164px;" src="http://3.bp.blogspot.com/_86zbmhuZ4DY/S7uWabTM3sI/AAAAAAAAAEg/WHmrMDLs0yI/s400/7.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5457120754238545602" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2. Контент создаем в обычном режиме, но с указанием другого языка:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_86zbmhuZ4DY/S7uZspB-yQI/AAAAAAAAAEo/EYKhexzLOxc/s1600/9.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 303px;" src="http://2.bp.blogspot.com/_86zbmhuZ4DY/S7uZspB-yQI/AAAAAAAAAEo/EYKhexzLOxc/s400/9.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5457124365696944386" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Т.к. содержимое страницы может состоять из нескольких блоков, то перевести на другой язык нужно каждый такой блок. Но этого мало! Ведь еще нужно эти блоки как-то связать! Чтобы поставить их в соответствие я использую режим Список/List для страницы, открываю на редактирование иноязычный блок контента и указываю оригинал перевода (выбираю из списка):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_86zbmhuZ4DY/S7ucT1oA_fI/AAAAAAAAAEw/ycYvudQ86us/s1600/11.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 316px;" src="http://1.bp.blogspot.com/_86zbmhuZ4DY/S7ucT1oA_fI/AAAAAAAAAEw/ycYvudQ86us/s400/11.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5457127238115851762" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;После этого в режиме Список/List страница будет выглядеть примерно так:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_86zbmhuZ4DY/S7uc5LloJjI/AAAAAAAAAE4/Vp55RTpg4EQ/s1600/10.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 47px;" src="http://2.bp.blogspot.com/_86zbmhuZ4DY/S7uc5LloJjI/AAAAAAAAAE4/Vp55RTpg4EQ/s400/10.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5457127879666574898" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Переключатель языков на стороне пользователя (FE)&lt;/h3&gt;&lt;br /&gt;Теперь можно подумать и о том как переключаться между разными языками на нашем сайте. Для этого используется довольно популярное расширение - sr_language_menu.&lt;br /&gt;Лично я настроил данный плагин с помощью TS-скрипта следующим образом:&lt;br /&gt;lib { &lt;br /&gt;languageMenu &lt; plugin.tx_srlanguagemenu_pi1# Список отображаемых языковlanguageMenu.languagesUidsList = 1,2,3# Способ представления списка языков - текстовый # (можно также изобразить флажками)languageMenu.defaultLayout = 2languageMenu.defaultLanguageISOCode = RU#languageMenu.defaultCountryISOCode = languageMenu.link.NO.stdWrap.wrap = &amp;lt;li&amp;gt; | &amp;lt;/li&amp;gt;languageMenu.link.CUR.stdWrap.wrap = &amp;lt;li class="curlng"&amp;gt; | &amp;lt;/li&amp;gt;languageMenu.link.INACT.stdWrap.wrap = &amp;lt;li&amp;gt; | &amp;lt;/li&amp;gt;languageMenu.links.stdWrap.split.wrap = | #languageMenu.hideIfNoAltLanguages = 1}&lt;h3&gt;&lt;br /&gt;Настройка расширения RealURL&lt;/h3&gt;&lt;br /&gt;В конфигурационном файле RealUrl (например, realurlconf.php) необходимо наличие следующих строк:&lt;br /&gt;'preVars' =&gt; array(&lt;br /&gt;array(&lt;br /&gt;'GETvar' =&gt; 'no_cache',&lt;br /&gt;'valueMap' =&gt; array(&lt;br /&gt;'no_cache' =&gt; 1,&lt;br /&gt;),&lt;br /&gt;'noMatch' =&gt; 'bypass',&lt;br /&gt;),&lt;br /&gt;array(&lt;br /&gt;'GETvar' =&gt; 'L',&lt;br /&gt;'valueMap' =&gt; array(&lt;br /&gt;'ru' =&gt; '0',&lt;br /&gt;'ua' =&gt; '1',&lt;br /&gt;'en' =&gt; '3',&lt;br /&gt;),&lt;br /&gt;'noMatch' =&gt; 'bypass',&lt;br /&gt;),&lt;br /&gt;),&lt;br /&gt;'pagePath' =&gt; array(&lt;br /&gt;'type' =&gt; 'user',&lt;br /&gt;'userFunc' =&gt; 'EXT:realurl/class.tx_realurl_advanced.php:&amp;tx_realurl_advanced-&gt;main',&lt;br /&gt;'spaceCharacter' =&gt; '-',&lt;br /&gt;'languageGetVar' =&gt; 'L',&lt;br /&gt;'expireDays' =&gt; 7,&lt;br /&gt;'rootpage_id' =&gt; 1,&lt;br /&gt;),&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-3391210273745876682?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/3391210273745876682/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2010/04/typo3.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/3391210273745876682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/3391210273745876682'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2010/04/typo3.html' title='Мультиязычный сайт на TYPO3'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_86zbmhuZ4DY/S7tJiHiCxsI/AAAAAAAAADg/pRKHEBGzgug/s72-c/1.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-5612505665880647671</id><published>2010-03-09T15:57:00.011+02:00</published><updated>2010-03-10T14:00:48.994+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='typo3'/><category scheme='http://www.blogger.com/atom/ns#' term='google analytics'/><title type='text'>TYPO3 и инструменты Google</title><content type='html'>Если Вы в своей работе используете гугловский "Центр веб-мастеров" и сервис сбора статистики - Google Analytics, то для сайта на TYPO3, потребуется 2 простеньких скрипта на TypoScript:&lt;br /&gt;&lt;br /&gt;1. Скрипт, который позволит Вам подтвердить свои права собственности на сайт, через meta-тег:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;page.headerData.1 = TEXT&lt;br /&gt;page.headerData.1.insertData=1&lt;br /&gt;page.headerData.1.wrap = &amp;lt;meta name ="google-site-verification" content ="|"&amp;gt;&lt;br /&gt;page.headerData.1.value = ваш_алфавитно-цифровой_код_сайта_от_google&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;абсолютно тоже самое делает такая конструкция:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;page.meta.google-site-verification = ваш_алфавитно-цифровой_код_сайта_от_google&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Напомню, что данный мета-тег гугл хочет видеть на главной странице сайта. Поэтому этот скрипт нужно добавить в typo3-шаблон корневой страницы.&lt;br /&gt;&lt;br /&gt;Алфавитно-цифровой код сайта можно быстро узнать с помощью url:&lt;br /&gt;https://www.google.com/webmasters/verification/verification?hl=ru&amp;siteUrl=http://www.yourdomain.com/&lt;br /&gt;&lt;br /&gt;2. Для работы Google Analytics&lt;br /&gt; &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;page.wrap(&lt;br /&gt;  |  &amp;lt;script type="text/javascript"&amp;gt; var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));&amp;lt;/script&amp;gt; &amp;lt;script type="text/javascript"&amp;gt; var pageTracker = _gat._getTracker("UA-КОД_САЙТА");pageTracker._trackPageview();&amp;lt;/script&amp;gt;&lt;br /&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Т.к. статистику желательно собирать со всех страниц сайта, то гугловский скрипт необходимо вставить на все его страницы, причем в самый конец. Чтобы добиться этого для сайта на Typo3, нужно вставить данный код в конец всех typo3-шаблонов.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-5612505665880647671?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/5612505665880647671/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2010/03/typo3-google.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/5612505665880647671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/5612505665880647671'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2010/03/typo3-google.html' title='TYPO3 и инструменты Google'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-3477753135750935756</id><published>2010-03-05T11:58:00.012+02:00</published><updated>2010-03-10T13:58:52.376+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rgtabs'/><category scheme='http://www.blogger.com/atom/ns#' term='perfectlightbox'/><category scheme='http://www.blogger.com/atom/ns#' term='jfmulticontent'/><category scheme='http://www.blogger.com/atom/ns#' term='typo3'/><title type='text'>Конфликт библиотек perfectlightbox и rgtabs</title><content type='html'>Вчера потратил половину своего рабочего дня на выяснение причин - почему же у меня не работает расширения rgtabs и jfmulticontent. Т.к. на странице у меня была куча всяких плагинов использующих всевозможные java скрипты и библиотеки, то интуиция почти сразу подсказала, что кто-то с кем-то конфликтует. &lt;br /&gt;Так оно и оказалось! Оказывается, что библиотека protaculous, которую по-умолчанию использует ext perfectlightbox, не дружит с jQuery. Настройка параметра jQueryNoConflict ни к чему не приводила.&lt;br /&gt;&lt;br /&gt;Вылечилось все настройкой perfectlightbox: &lt;span style="font-weight:bold;"&gt;plugin.perfectlightbox.libraryToUse = mootools&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;P.S. [&lt;span style="font-weight:bold;"&gt;1&lt;/span&gt;] Тут же попытался заменить mootools от perfectlightbox на t3mootools, но почему-то с ним perfectlightbox работать не захотел :(, а зря...&lt;br /&gt;&lt;br /&gt;P.S. [&lt;span style="font-weight:bold;"&gt;2&lt;/span&gt;] Я тут порылся, поекспериментировал немного, оказалось, что t3mootools у меня - 1.2, а perfectlightbox v.2.2.4 использует mootools - 1.1, поэтому и не заработало!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-3477753135750935756?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/3477753135750935756/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2010/03/rgtabs.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/3477753135750935756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/3477753135750935756'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2010/03/rgtabs.html' title='Конфликт библиотек perfectlightbox и rgtabs'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-4403640031450850254</id><published>2010-02-08T11:08:00.047+02:00</published><updated>2010-03-10T14:02:05.344+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='install'/><category scheme='http://www.blogger.com/atom/ns#' term='typo3'/><category scheme='http://www.blogger.com/atom/ns#' term='suse'/><category scheme='http://www.blogger.com/atom/ns#' term='настройка'/><title type='text'>Установка CMS системы TYPO3 на SuSE Linux</title><content type='html'>&lt;h3&gt;Вступление&lt;/h3&gt;&lt;br /&gt;Данная статья не претендует на оригинальность, т.к. собраный в ней материал уже есть в сети, но он собран воедино, так чтобы админу приходилось минимально гуглить и переводить. Заниматься установкой TYPO3 приходится не каждый день и с течением времени кое-какие вещи забываются, поэтому материал задумывался как "склерозник" для личного пользования, но вполне может быть полезен и другим людям занимающимися CMS-системой TYPO3, особенно новичкам.&lt;br /&gt;&lt;br /&gt;Для установки TYPO3 нам понадобится SSH доступ к веб серверу и соответственно SSH клиент. Я рекомендую использовать &lt;a href="http://winscp.net/eng/docs/lang:ru"&gt;WinSCP&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Раньше, как только я получал заказ на разработку нового сайта на базе TYPO3, я делал следующее - создавал на веб-сервере папку типа site1.com и устанавливал внутри ее ядро системы и файловый шаблон нового сайта (source и dummy site). Причем, каждый раз, устанавливаемая версия ядра была более свежей, чем предудущая. И выходило так, что весенние сайты работают на версии ядра 4.2.6, а осенние на версии 4.2.10 и т.д. Одним словом - зоопарк, со всеми вытекающими последствиями.&lt;br /&gt;&lt;br /&gt;Со временем я поумнел и задался вопросом: "А почему я всегда так делаю? Ведь можно же сделать более изящно и оптимально?". И действительно можно! При этом ядро системы устанавливается всего один раз и на его базе работает сколько угодно сайтов. Таким образом и с версиями ядра порядок, и экономится дисковое пространство, и обновляться затем значительно проще.    &lt;br /&gt;&lt;br /&gt;При таких раскладах дерево директорий должно выглядеть примерно так:&lt;br /&gt;&lt;br /&gt;typo3_src - директория с ядром системы&lt;br /&gt;site1.com    - файлы и настройки 1-го сайта&lt;br /&gt;site2.com.ua - файлы и настройки 2-го сайта&lt;br /&gt;site3.biz.ua - файлы и настройки 3-го сайта&lt;br /&gt;&lt;br /&gt;А теперь распишу все подробно по шагам...&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;1. Установка ядра системы TYPO3 4.3.1&lt;/h3&gt; &lt;br /&gt;а) Логинимся пользователем root и cоздаем директорию для установки ядра (исходников) TYPO3. В моем случае это директория - /usr/www/&lt;br /&gt;&lt;br /&gt;б) Скачиваем архив с ядром с сайта http://typo3.org/download/packages/&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gyrkalo.dp.ua/blogger/insttypo3/1.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 662px; height: 219px;" src="http://www.gyrkalo.dp.ua/blogger/insttypo3/1.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;или с помощью команды:&lt;br /&gt; &lt;br /&gt;wget http://prdownloads.sourceforge.net/typo3/typo3_src-4.3.1.tar.gz?download&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gyrkalo.dp.ua/blogger/insttypo3/2.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://www.gyrkalo.dp.ua/blogger/insttypo3/2.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;в) Распаковываем только что полученный архив внутри нашей директории /usr/www/ &lt;br /&gt;&lt;br /&gt;tar -xzvf typo3_src-4.3.1.tar.gz&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gyrkalo.dp.ua/blogger/insttypo3/3.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://www.gyrkalo.dp.ua/blogger/insttypo3/3.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;После распаковки архива получим следующую файловую структуру:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gyrkalo.dp.ua/blogger/insttypo3/4.jpg"&gt;&lt;img style="clear:both; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://www.gyrkalo.dp.ua/blogger/insttypo3/4.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;г) Веб-сервер Apache в SUSE Linux работает под именем пользователя - wwwrun, который является членом группы пользователей - www. Этому пользователю и группе необходимо дать полные права на папку с ядром TYPO3, т.е. - typo3_src-4.3.1. Если мы по-прежнему находимся в папке /usr/www/, то выполняем команду: &lt;br /&gt;&lt;br /&gt;chown -R wwwrun:www ./typo3_src-4.3.1 &lt;br /&gt;&lt;br /&gt;которая делает пользователя wwwrun и группу www собственником (владельцем)&lt;br /&gt;директории typo3_src-4.3.1&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gyrkalo.dp.ua/blogger/insttypo3/5.jpg"&gt;&lt;img style="clear:both; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://www.gyrkalo.dp.ua/blogger/insttypo3/5.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;д) На папку в которую мы будем устанавливать все наши расширения TYPO3 (плагины, extensions), предоставим веб серверу полный доступ: &lt;br /&gt;&lt;br /&gt;chmod -R 775 ./typo3_src-4.3.1/typo3/ext&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gyrkalo.dp.ua/blogger/insttypo3/6.jpg"&gt;&lt;img style="clear:both; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://www.gyrkalo.dp.ua/blogger/insttypo3/6.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;е) Для нормальной работы системы TYPO3 на сервере должен быть установлен пакет ImageMagick, который отвечает за все манипуляции с картинками. Чтобы проверить стоит ли у вас на сервере ImageMagick, попробуйте выполнить команду identify, если получите, то же, что и у меня на картинке, значить все в порядке. В противном случае займитесь его установкой (для этого зайдите на сайт http://www.imagemagick.org).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gyrkalo.dp.ua/blogger/insttypo3/7.jpg"&gt;&lt;img style="clear:both; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://www.gyrkalo.dp.ua/blogger/insttypo3/7.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Чтобы найти этот файл по имени используйте команду:&lt;br /&gt;&lt;br /&gt;find / -name "identify*"&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gyrkalo.dp.ua/blogger/insttypo3/8.jpg"&gt;&lt;img style="clear:both; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://www.gyrkalo.dp.ua/blogger/insttypo3/8.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;2. Установка нового сайта TYPO3&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;a) Создаем папку в которой будет находится наш сайт, например - mydomain.com:&lt;br /&gt;&lt;br /&gt;mkdir mydomain.com&lt;br /&gt;&lt;br /&gt;переходим в нее с помощью команды&lt;br /&gt;&lt;br /&gt;cd mydomain.com&lt;br /&gt;&lt;br /&gt;б) Скачиваем шаблон сайта с помощью знакомой уже команды: &lt;br /&gt;&lt;br /&gt;wget http://prdownloads.sourceforge.net/typo3/dummy-4.3.1.tar.gz?download&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gyrkalo.dp.ua/blogger/insttypo3/9.jpg"&gt;&lt;img style="clear:both; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://www.gyrkalo.dp.ua/blogger/insttypo3/9.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;и распаковываем этот архив командой:&lt;br /&gt;&lt;br /&gt;tar -xzvf dummy-4.3.1.tar.gz&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gyrkalo.dp.ua/blogger/insttypo3/10.jpg"&gt;&lt;img style="clear:both; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://www.gyrkalo.dp.ua/blogger/insttypo3/10.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;следующей командой: &lt;br /&gt;&lt;br /&gt;mv ./dummy-4.3.1/* ./ &lt;br /&gt;&lt;br /&gt;данные из папки dummy-4.3.1 переносим в папку /usr/www/mydomain.com (на уровень выше) &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gyrkalo.dp.ua/blogger/insttypo3/11.jpg"&gt;&lt;img style="clear:both; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://www.gyrkalo.dp.ua/blogger/insttypo3/11.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;получаем следующую структуру папок&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gyrkalo.dp.ua/blogger/insttypo3/12.jpg"&gt;&lt;img style="clear:both; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://www.gyrkalo.dp.ua/blogger/insttypo3/12.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Теперь можно удалить файл dummy-4.3.1.tar.gz и папку dummy-4.3.1 &lt;br /&gt;&lt;br /&gt;в) Делаем символическую ссылку typo_src, которая будет "говорить" нашему сайту где находится текущая рабочая версия ядра TYPO3. В дальнейшем, это поможет нам обновлять ядро системы.&lt;br /&gt;&lt;br /&gt;Итак, возвращаемся в нашу папку /usr/www/, для этого можно использовать команду:&lt;br /&gt;&lt;br /&gt;cd /usr/www/&lt;br /&gt;&lt;br /&gt;Для перестраховки удаляем предыдущую символическую ссылку typo_src: &lt;br /&gt;&lt;br /&gt;rm -rf ./typo3_src&lt;br /&gt;&lt;br /&gt;Создаем новую символическую ссылку: &lt;br /&gt;&lt;br /&gt;ln -s /usr/www/typo3_src-4.3.1 typo3_src&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gyrkalo.dp.ua/blogger/insttypo3/13.jpg"&gt;&lt;img style="clear:both; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://www.gyrkalo.dp.ua/blogger/insttypo3/13.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;span style="font-style:italic;"&gt;Внимание!&lt;/span&gt;&lt;/span&gt; Не нужно менять имя символической ссылки, оно должно быть именно &lt;span style="font-style:italic;"&gt;typo3_src&lt;/span&gt;! &lt;br /&gt;&lt;br /&gt;В результате получим еще одну папку в нашем дереве каталогов&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gyrkalo.dp.ua/blogger/insttypo3/14.jpg"&gt;&lt;img style="clear:both; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://www.gyrkalo.dp.ua/blogger/insttypo3/14.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Все, с ядром мы закончили. Все настройки ядра выполняются только один раз - при создании самого первого сайта!&lt;br /&gt;&lt;br /&gt;г) Теперь вернемся к нашему сайту, а точнее к шаблонной структуре директорий, которые за него будут отвечать. Веб серверу нужен полный доступ к следующим папкам:&lt;br /&gt;&lt;br /&gt;fileadmin&lt;br /&gt;typo3conf&lt;br /&gt;typo3temp&lt;br /&gt;uploads&lt;br /&gt;&lt;br /&gt;Это делается следующими 2-мя командами:&lt;br /&gt;&lt;br /&gt;chown -R wwwrun:www fileadmin typo3conf typo3temp uploads&lt;br /&gt;chmod -R 775 fileadmin typo3conf typo3temp uploads&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gyrkalo.dp.ua/blogger/insttypo3/15.jpg"&gt;&lt;img style="clear:both; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://www.gyrkalo.dp.ua/blogger/insttypo3/15.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gyrkalo.dp.ua/blogger/insttypo3/16.jpg"&gt;&lt;img style="clear:both; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://www.gyrkalo.dp.ua/blogger/insttypo3/16.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;д) Т.к. наш веб каталог (/usr/www/mydomain.com) содержит символьный линк, то для его обслуживания необходимо в настройках Apache прописать:&lt;br /&gt;&lt;br /&gt;&amp;lt;Directory "/usr/www/mydomain.com"&amp;gt;&lt;br /&gt; Options &lt;span style="font-weight:bold;"&gt;+FollowSymlinks&lt;/span&gt; +Indexes +Includes&lt;br /&gt; AllowOverride All&lt;br /&gt; Order allow,deny&lt;br /&gt; Allow from all&lt;br /&gt;&amp;lt;/Directory&amp;gt;&lt;br /&gt;&lt;br /&gt;e) TYPO3 как и любая CMS система хранит все свои данные и настройки в базе данных MySQL. Желательно создать новую базу данных еще до начала дальнейшего конфигурирования сайта. И хотя установка TYPO3 может это сделать самостоятельно, я это делаю вручную - чтобы перестраховать себя от сюрпризов связанных с кодовыми страницами. Поэтому, заходим в командную строку MySQL: &lt;br /&gt;&lt;br /&gt;mysql -u root -p и вводим пароль пользователя root для mysql&lt;br /&gt;&lt;br /&gt;и выполняем следующие SQL команды:&lt;br /&gt;&lt;br /&gt;CREATE DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;&lt;br /&gt;GRANT ALL PRIVILEGES ON db_name.* TO username@localhost IDENTIFIED BY 'password';&lt;br /&gt;&lt;br /&gt;Здесь мы создали БД в нужной нам кодировке, создали пользователя и дали ему все права на неё.&lt;br /&gt;&lt;br /&gt;ж) Теперь можно перейти к заключительной стадии подготовки нового сайта к работе. Это делается с помощью так называемого режима установки - 1-2-3. Но чтобы этот автоматический режим стал доступен необходимо в директории typo3conf создать специальный файл с именем - ENABLE_INSTALL_TOOL, который является своеобразным флагом (семафором). Создадим этот файл с помощью команд Linux:&lt;br /&gt;&lt;br /&gt;cd typo3conf&lt;br /&gt;touch ENABLE_INSTALL_TOOL&lt;br /&gt;&lt;br /&gt;Условный флаг взведен, можно пробовать. В строке браузера набираем:&lt;br /&gt;&lt;br /&gt;http://www.mydomain.com/typo3&lt;br /&gt;&lt;br /&gt;Увидим следующую страницу:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gyrkalo.dp.ua/blogger/insttypo3/17.jpg"&gt;&lt;img style="clear:both; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://www.gyrkalo.dp.ua/blogger/insttypo3/17.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Вводим имя и пароль нашего нового пользователя MySql (username) и жмем кнопку Continue. &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Внимание!&lt;/span&gt; На данном этапе возможны побочные явления такого рода: &lt;br /&gt;1. Если вводить имя и пароль нового пользователя нашей БД - невозможно сделать конект к базе данных. &lt;br /&gt;2. Если вводить имя и пароль root (mysql)- невозможно выбрать БД (Error: No database selected).&lt;br /&gt;Я не понял, что это такое, возможно какие-то накладки или глюки... Но лечится это довольно просто. В директории typo3conf находится главный конфигурационный файл TYPO3 - localconf.php. В нем нужно прописать следующие строки:&lt;br /&gt;$typo_db_username = 'root'; // Modified or inserted by TYPO3 Install Tool. &lt;br /&gt;$typo_db_password = 'парольрута'; // Modified or inserted by TYPO3 Install Tool. &lt;br /&gt;$typo_db_host = 'localhost'; //  Modified or inserted by TYPO3 Install Tool.&lt;br /&gt;$typo_db = 'имя базы'; //  Modified or inserted by TYPO3 Install Tool.&lt;br /&gt;После этого в URL браузера можно сменить номер инсталляционного шага на цифру 2, например, http://mydomain.com/typo3/install/index.php?TYPO3_INSTALL[type]=config&amp;mode=123&amp;step=&lt;span style="font-weight:bold;"&gt;2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Т.е. мы прошли первый шаг установки вручную, указав имя и пароль пользователя под которым наша система будет работать со своей базой данных. &lt;br /&gt;&lt;br /&gt;На втором шаге выбираем в выпадающем списке нашу предварительно созданную БД и опять жмем кнопку Continue:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gyrkalo.dp.ua/blogger/insttypo3/18.jpg"&gt;&lt;img style="clear:both; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://www.gyrkalo.dp.ua/blogger/insttypo3/18.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;На последнем 3-м этапе нажимаем кнопку Import database:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gyrkalo.dp.ua/blogger/insttypo3/19.jpg"&gt;&lt;img style="clear:both; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://www.gyrkalo.dp.ua/blogger/insttypo3/19.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;И хотя фраза "Import database" подразумевает под собой импорт каких-то данных в БД, на самом деле TYPO3 создаст свой репозиторий - набор служебных таблиц со служебными данными.  &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gyrkalo.dp.ua/blogger/insttypo3/20.jpg"&gt;&lt;img style="clear:both; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://www.gyrkalo.dp.ua/blogger/insttypo3/20.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;3. Конфигурация системы TYPO3 4.3.1&lt;/h3&gt;&lt;br /&gt;Теперь можно смело заходить в админку TYPO3 и делать базовые настройки самой CMS системы.&lt;br /&gt;&lt;br /&gt;В строке браузера набираем: http://www.mydomain.com/typo3 и вводим имя пользователя - &lt;span style="font-weight:bold;"&gt;admin&lt;/span&gt;, а в качестве пароля слово - &lt;span style="font-weight:bold;"&gt;password&lt;/span&gt;.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gyrkalo.dp.ua/blogger/insttypo3/23.jpg"&gt;&lt;img style="clear:both; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://www.gyrkalo.dp.ua/blogger/insttypo3/23.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gyrkalo.dp.ua/blogger/insttypo3/24.jpg"&gt;&lt;img style="clear:both; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://www.gyrkalo.dp.ua/blogger/insttypo3/24.jpg" border="0" alt="" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Переходим в раздел Admin Tools\Install и кликаем по пункту 5: All Configuration. В дальнейшем, вход в данный раздел потребует ввода отдельного пароля (не пользователя admin). По умолчанию пароль для All Configuration - &lt;span style="font-weight:bold;"&gt;joh316&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gyrkalo.dp.ua/blogger/insttypo3/29.jpg"&gt;&lt;img style="clear:both; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://www.gyrkalo.dp.ua/blogger/insttypo3/29.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Здесь можно произвести множество настроек, но самое главное это "заставить" систему нормально работать с кодировкой UTF-8. За что отвечают следующие параметры и их значения:&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;[setDBinit]&lt;/span&gt;&lt;br /&gt;String (textarea): Commands to send to database right after connecting, separated by newline. Ignored by the DBAL extension except for the 'native' type!&lt;br /&gt;[SYS][setDBinit] = SET NAMES utf8 SET SESSION character_set_server=utf8&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;[forceCharset]&lt;/span&gt;&lt;br /&gt;String. Normally the charset of the backend users language selection is used. If you set this value to a charset found in t3lib/csconvtbl/ (or "utf-8") the backend (and database) will ALWAYS use this charset. Always use a lowercase value.&lt;br /&gt;[BE][forceCharset] = utf-8&lt;br /&gt;&lt;br /&gt;После этого, по совету Дмитрия Дулепова (для новичков поясню, это известный разработчик сообщества TYPO3) необходимо установить такие параметры системы:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;[enable_typo3temp_db_tracking]&lt;/span&gt;&lt;br /&gt;Boolean. If set, then all files in typo3temp will be logged in a database table. In addition to being a log of the files with original filenames, it also serves to secure that the same image is not rendered simultaneously by two different processes.&lt;br /&gt;[GFX][enable_typo3temp_db_tracking] = 1&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;[devIPmask]&lt;/span&gt;&lt;br /&gt;Defines a list of IP addresses which will allow development-output to display. The debug() function will use this as a filter. See the function t3lib_div::cmpIP() for details on syntax. Setting this to blank value will deny all. Setting to "*" will allow all.&lt;br /&gt;[SYS][devIPmask] = &lt;span style="font-weight:bold;"&gt;ВАШ IP АДРЕС&lt;/span&gt;,127.0.0.1,::1&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;[sqlDebug]&lt;/span&gt;&lt;br /&gt;Boolean. If set, then database queries that fails are outputted in browser. For development.&lt;br /&gt;[SYS][sqlDebug] = 1&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;[curlUse]&lt;/span&gt;&lt;br /&gt;Boolean: If set, try to use Curl to fetch external URLs&lt;br /&gt;[SYS][curlUse] = 1&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;[t3lib_cs_convMethod]&lt;/span&gt;&lt;br /&gt;String (values: "iconv", "recode", "mbstring", default is homemade PHP-code). Defines which of these PHP-features to use for various charset conversion functions in t3lib_cs. Will speed up charset conversion radically.&lt;br /&gt;[SYS][t3lib_cs_convMethod] = mbstring&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;[t3lib_cs_utils]&lt;/span&gt;&lt;br /&gt;String (values: "iconv", "mbstring", default is homemade PHP-code). Defines which of these PHP-features to use for various charset processing functions in t3lib_cs. Will speed up charset functions radically.&lt;br /&gt;[SYS][t3lib_cs_utils] = mbstring&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;[no_pconnect]&lt;/span&gt;&lt;br /&gt;Boolean: If true, "connect" is used instead of "pconnect" when connecting to the database!&lt;br /&gt;[SYS][no_pconnect] = 1&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;[multiplyDBfieldSize]&lt;/span&gt;&lt;br /&gt;Double: 1-5: Amount used to multiply the DB field size when the install tool is evaluating the database size (eg. "2.5"). This is only useful e.g. if your database is iso-8859-1 encoded but you want to use utf-8 for your site. For Western European sites using utf-8 the need should not be for more than twice the normal single-byte size (2) and for Chinese / Asian languages 3 should suffice. NOTICE: It is recommended to change the native database charset instead! (see http://wiki.typo3.org/index.php/UTF-8_support for more information)&lt;br /&gt;[SYS][multiplyDBfieldSize] = 1&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;[displayErrors]&lt;/span&gt;&lt;br /&gt;Integer: -1,0,1,2. Configures whether PHP errors should be displayed. 0 = Do not display any PHP error messages. Overrides the value of "exceptionalErrors" and sets it to 0 (= no errors are turned into exceptions), the configured "productionExceptionHandler" is used as exception handler, 1 = Display error messages with the registered errorhandler. The configured "debugExceptionHandler" is used as exception handler. 2 = Display errors only if client matches TYPO3_CONF_VARS[SYS][devIPmask]. If devIPmask matches the users IP address the configured "debugExceptionHandler" is used for exceptions, if not "productionExceptionHandler" will be used. -1 = Default setting. With this option, you can override the PHP setting "display_errors". If devIPmask matches the users IP address the configured "debugExceptionHandler" is used for exceptions, if not "productionExceptionHandler" will be used.&lt;br /&gt;[SYS][displayErrors] = 2&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;[compressionLevel]&lt;/span&gt;&lt;br /&gt;Determines output compression of BE output. Makes output smaller but slows down the page generation depending on the compression level. Requires zlib in your PHP installation. Range 1-9, where 1 is least compression and 9 is greatest compression. 'true' as value will set the compression based on the PHP default settings (usually 5). Suggested and most optimal value is 5.&lt;br /&gt;[BE][compressionLevel] = 5&lt;br /&gt;&lt;br /&gt;А теперь пройдитесь по следующим разделам админки как показано на скриншотах ниже:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gyrkalo.dp.ua/blogger/insttypo3/30.jpg"&gt;&lt;img style="clear:both; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://www.gyrkalo.dp.ua/blogger/insttypo3/30.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gyrkalo.dp.ua/blogger/insttypo3/31.jpg"&gt;&lt;img style="clear:both; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://www.gyrkalo.dp.ua/blogger/insttypo3/31.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gyrkalo.dp.ua/blogger/insttypo3/33.jpg"&gt;&lt;img style="clear:both; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://www.gyrkalo.dp.ua/blogger/insttypo3/33.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ну и напоследок необходимо позаботиться о безопасности системы: &lt;br /&gt;&lt;br /&gt;1. Сменить пароль пользователя admin, это делается в разделе User settings как показано ниже.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gyrkalo.dp.ua/blogger/insttypo3/34.jpg"&gt;&lt;img style="clear:both; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://www.gyrkalo.dp.ua/blogger/insttypo3/34.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2. Вывести систему из режима настройки, путем удаления семафорного флажка - ENABLE_INSTALL_TOOL&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gyrkalo.dp.ua/blogger/insttypo3/35.jpg"&gt;&lt;img style="clear:both; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://www.gyrkalo.dp.ua/blogger/insttypo3/35.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-4403640031450850254?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/4403640031450850254/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2010/02/cms-typo3-suse-linux.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/4403640031450850254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/4403640031450850254'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2010/02/cms-typo3-suse-linux.html' title='Установка CMS системы TYPO3 на SuSE Linux'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-6562460069908085434</id><published>2010-01-05T18:04:00.030+02:00</published><updated>2011-09-27T22:26:43.593+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='шрифты'/><category scheme='http://www.blogger.com/atom/ns#' term='eot'/><category scheme='http://www.blogger.com/atom/ns#' term='otf'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>Красивые и нестандартные шрифты на HTML страницах? Это очень просто!</title><content type='html'>&lt;style TYPE="text/css"&gt;@font-face {font-family: Victoriana;font-style:  normal;font-weight: normal;src: url(http://www.gyrkalo.dp.ua/blogger/fonts/VICTORI0.eot);}@font-face {font-family: BauhausLightCTT;font-style:  normal;font-weight: normal;src: url(http://www.gyrkalo.dp.ua/blogger/fonts/BAUHAUS1.eot);}&lt;/STYLE&gt;&lt;br /&gt;Довольно часто, при разработке сайтов, его заказчики выдвигают завышенные требования к его дизайну (красивое анимированное меню на базе флэш технологий, графические заголовки и все-такое), что в последствии приводит к затруднениям при его раскрутке. Дело в том, что не все дизайнеры и верстальщики обладают необходимыми базовыми знаниями в области SEO. Они слепо стремятся удовлетворить требования клиента и совершенно не задумываются над тем, что после этого сайт нужно будет раскручивать. А что раскручивать, если весь сайт - является набором картинок или мультипликации?&lt;br /&gt;&lt;br /&gt;Не так давно мне для раскрутки достался один из таких сайтов. Хозяйка сайта - дизайнер интерьеров по профессии и поэтому внешний вид своего сайта поставила во главу угла. В результате всё меню сайта - было красивым, но графическим, выполненным с помощью корпоративного шрифта - Bauhaus. Благо язык PHP богат на всякого рода библиотеки, поэтому ребята разработчики и решили, не мудрствуя лукаво, формировать меню сайта с помощью таких вещей.&lt;br /&gt;&lt;br /&gt;Как сами понимаете, раскрутить сайт с помощью одних только Alt и Title на картинках - затруднительно, поэтому я решил найти альтернативное решение, тем более, что эта проблема мне давно не давала покоя. Но как интегрировать любой понравившийся шрифт в свой сайт? Оказывается решение есть и причем довольно простое.&lt;br /&gt;&lt;br /&gt;Оказывается, что с помощью CSS можно интегрировать в сайт любые TTF-шрифты, но они достаточно громоздки и влияют на скорость загрузки, а вот EOT-шрифты в 3-5 раз легче! Где же взять EOT шрифты? На сегодня я знаю 2 утилиты, которые умеют конвертировать TrueType-шрифты в формат EOT (Embedded OpenType). Первая, от всем известного производителя - Microsoft WEFT (Web Embedding Fonts Tool),  другая от другого монстра - Google - &lt;a href="http://code.google.com/p/ttf2eot/downloads/list" target="_blank"&gt;ttf2eot&lt;/a&gt; (кроссплатформенная утилита). WEFT - имеет графический интерфейс, а ttf2eot запускается из командной строки.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Пример команды: ttf2eot &lt; input.ttf &gt; output.eot&lt;/blockquote&gt;&lt;br /&gt;После того как EOT-шрифт сгенерирован (в моем случае это был файл BAUHAUS1.eot, размер 10 Кб), можно приступать к его использованию. Для этого нужно подключить данный файл и связать его с CSS-ким font-family, которое затем можно использовать в привычном, для верстальщика, виде.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Важное замечание&lt;/span&gt;. Значение параметра font-family задается не произвольным образом, а является точным названием шрифта, которое можно увидеть с помощью любого TTF-вьюера.&lt;br /&gt;&lt;br /&gt;В результате получим следующий &lt;span style="font-weight:bold;"&gt;CSS-код&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&amp;lt;STYLE TYPE="text/css"&amp;gt;&lt;br /&gt;&lt;br /&gt;@font-face {&lt;br /&gt;font-family: BauhausLightCTT;&lt;br /&gt;font-style:  normal;&lt;br /&gt;font-weight: normal;&lt;br /&gt;src: url(BAUHAUS1.eot);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.eotexample {&lt;br /&gt;font-family:  BauhausLightCTT, sans-serif;&lt;br /&gt;font-size: 18px;&lt;br /&gt;color: #000099;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&amp;lt;/STYLE&amp;gt;&lt;br /&gt;&lt;br /&gt;... и &lt;span style="font-weight:bold;"&gt;HTML-код&lt;/span&gt; : &lt;br /&gt;&lt;br /&gt;&amp;lt;p class="eotexample"&amp;gt;Данный шрифт используется на сайте Дизайн бюро "Gratage Visual" &amp;lt;/p&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Конечный результат&lt;/span&gt; :&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="font-family: BauhausLightCTT;font-size: 20px;color:red;text-align:left;"&gt;Данный шрифт используется на сайте&lt;/span&gt; &lt;span style="font-family: BauhausLightCTT;font-size: 20px;color:red;text-align:left;"&gt;Дизайн бюро "Gratage Visual"&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Объективности ради, должен сказать, что данный метод не является панацеей, т.к. не все EOT-шрифты адекватно отображаются на веб-страничках, причем чем меньше размер шрифта, тем корявее он выглядит, по крайней мере некоторые из них (всем завитушкам и засечкам просто негде развернуться).&lt;br /&gt;&lt;br /&gt;К тому же, не все браузеры понимают eot-шрифты. Поэтому, для кросс-браузерного решения нужен еще один шрифт - OTF (open type font), который понимают все нормальные браузеры, кроме осла. Создать такой можно различными утилитами, но лично я это делаю с помощью TransType Pro от Fontlab.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Victoriana;font-size: 28px;color:#000000;text-align:left;"&gt;&lt;b&gt;P.S.&lt;/b&gt; Честно говоря, я до сих пор удивлен почему данный прием не получил такого широкого распространения как графическое меню сайтов :)&lt;/span&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-6562460069908085434?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/6562460069908085434/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2010/01/html.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/6562460069908085434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/6562460069908085434'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2010/01/html.html' title='Красивые и нестандартные шрифты на HTML страницах? Это очень просто!'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-1008598498536236632</id><published>2009-12-25T10:42:00.017+02:00</published><updated>2009-12-25T15:10:36.264+02:00</updated><title type='text'>z-index для Flash object и SWFObject</title><content type='html'>Дорабатывая очередной свой сайт столкнулся с такой проблемкой. В шапке сайта есть две флэш вставки - банер, который вставлен через конструкцию object embed и меню за размещение которого отвечает скрипт SWFObject. Ниже всего этого находится картинка (это была схема проезда), которая увеличивается при клике мышки с помощью библиотеки lightbox. Так вот, проблема заключалась в следующем - при более детальном просмотре картинки серая вуаль, которая должна "зашторить" весь экран, не покрывала флэш - меню и банер, а сама картинка отображалась под ними. Выглядело это так:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_86zbmhuZ4DY/SzS2_tNaoeI/AAAAAAAAACE/IUq941aFIb8/s1600-h/noTransparent.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 186px;" src="http://3.bp.blogspot.com/_86zbmhuZ4DY/SzS2_tNaoeI/AAAAAAAAACE/IUq941aFIb8/s320/noTransparent.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5419157457217429986" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;В результате, у меня получилось следующее рабочее решение.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Для банера (object embed)&lt;/span&gt;:&lt;br /&gt;1. Сам тег object был взят в дополнительный div со следующими CSS-свойствами - style="position:absolute;z-index:0;"&lt;br /&gt;2. Тегу embed добавлен параметр wmode="transparent" и &amp;lt;param name="wmode" value="opaque" /&amp;gt;&lt;br /&gt;&lt;br /&gt;Все вместе, на данный момент, выглядит так:&lt;br /&gt;&amp;lt;div style="position:absolute;z-index:0;"&amp;gt;&lt;br /&gt;&amp;lt;div id="ack_banner" style="float:left;"&amp;gt;&lt;br /&gt;   &amp;lt;object width="550" height="400"&amp;gt;&lt;br /&gt;      &amp;lt;embed src="banner.swf" width="480" height="70" wmode="transparent"&amp;gt;&amp;lt;/embed&amp;gt;&lt;br /&gt;      &amp;lt;param name="wmode" value="opaque" /&amp;gt; &lt;br /&gt;   &amp;lt;/object&amp;gt; &lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Для меню (SWFObject)&lt;/span&gt;:&lt;br /&gt;1.  Дописана лишь одна строка - so.addParam("wmode", "opaque")&lt;br /&gt;&lt;br /&gt;Таким образом, получилась такая конструкция:&lt;br /&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt; var so = new SWFObject("menu.swf", "ack", "1024", "295", "7", "#ffffff");&lt;br /&gt; so.addParam("allowFullScreen", "true");&lt;br /&gt; so.addParam("wmode", "opaque");&lt;br /&gt; so.write("menuflashcontent");&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;Как это выглядит в жизни можно посмотреть на сайте &lt;a href="http://www.ack.biz.ua/contacts.html"&gt;http://www.ack.biz.ua/contacts.html&lt;/a&gt; или на данном скриншоте: &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_86zbmhuZ4DY/SzS5tWpOAXI/AAAAAAAAACM/9SdoeptQmlI/s1600-h/noTransparent2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 188px;" src="http://2.bp.blogspot.com/_86zbmhuZ4DY/SzS5tWpOAXI/AAAAAAAAACM/9SdoeptQmlI/s320/noTransparent2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5419160440457265522" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Работоспособность проверял во всех браузерах - IE7, FF3, Opera9.27, Chrome и Safari, чего думаю вполне достаточно ;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-1008598498536236632?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/1008598498536236632/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2009/12/blog-post.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/1008598498536236632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/1008598498536236632'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2009/12/blog-post.html' title='z-index для Flash object и SWFObject'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_86zbmhuZ4DY/SzS2_tNaoeI/AAAAAAAAACE/IUq941aFIb8/s72-c/noTransparent.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6052981997157873285.post-6797382758296084482</id><published>2009-11-22T11:49:00.007+02:00</published><updated>2009-11-23T11:17:15.113+02:00</updated><title type='text'>Зачем мне нужен блог?</title><content type='html'>Cначала, я долго не мог понять для чего люди создают свои блоги и тратят свое драгоценное время на его поддержку. Однако, со временем, побывав на многих персональных блогах я обнаружил, что почерпнул с их помощью довольно много полезной информации, которая мне пригодилась как в дальнейшей работе, так и в личной жизни. Будучи по натуре своей человеком не жадным я решил, что тоже мог бы поделиться своим профессиональным опытом с другими людьми, а также публично высказывать свое мнение о всевозможных интересных событиях, которые происходят в моей жизни и вокруг неё.&lt;br /&gt;&lt;br /&gt;Думаю, что большинство тем блога будет посвящено в первую очередь, моей профессиональной деятельности - программированию, веб-дизайну и сайтостроительству, раскрутке сайтов, а также всевозможным житейским проблемам с которыми мы сталкиваемся в нашей повседневной жизни - квартира и дача, книги и фотография, кино и музыка, возможно даже политика (а куда ж без нее в наше время?) :).  &lt;br /&gt;&lt;br /&gt;Надеюсь, что со временем блог станет интересным и содержательным, а также найдутся люди которые найдут для себя что-то полезное.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6052981997157873285-6797382758296084482?l=gyrkalo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gyrkalo.blogspot.com/feeds/6797382758296084482/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://gyrkalo.blogspot.com/2009/11/11111.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/6797382758296084482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6052981997157873285/posts/default/6797382758296084482'/><link rel='alternate' type='text/html' href='http://gyrkalo.blogspot.com/2009/11/11111.html' title='Зачем мне нужен блог?'/><author><name>Вадим</name><uri>http://www.blogger.com/profile/04564547719397267216</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-heT7gRPMj88/TtYbjI8CCdI/AAAAAAAAANM/3VcZVJMeBc8/s220/gvv-typo3-724x724.jpg'/></author><thr:total>0</thr:total></entry></feed>
