четверг, 17 октября 2013 г.

Если картинки на сайте темнее оригинала


Впервые столкнулся с необычным явлением - картинки на TYPO3-сайте выглядят несколько темнее, чем те оригиналы, которые я загружал. Поспешу сказать, что сама TYPO3 тут абсолютно ни при чём. Она "виновата" лишь в том, что для всех манипуляций с картинками использует графические библиотеки IM (ImageMagick) или GM (GraphicsMagick). В моём случае это был ImageMagick. Вначале я решил исследовать на эту тему все настройки TYPO3 в разделе Install/All Configuration. Там меня заинтересовал параметр - colorspace, значение которого было - RGB, а коментарий к параметру:

  1. String: Specifiy the colorspace to use. Some ImageMagick versions (like 6.7.0 and above) use the sRGB colorspace, so all images are darker then the original
  1. Possible Values: CMY, CMYK, Grey, HCL, HSB, HSL, HWB, Lab, LCH, LMS, Log, Luv, OHTA, Rec601Luma, Rec601YCbCr, Rec709Luma, Rec709YCbCr, RGB, sRGB, Transparent, XYZ, YCbCr, YCC, YIQ, YCbCr, YUV

До конца не поверив, что решение так быстро найдено, я почитал мануал по IM и наткнулся на такой текст:

...In the above example, the result is darker than the original, because the channels were separate as linear gray and subsequently combined as linear color. In order to return the channels back to sRGB, one must change the colorspace from RGB back to sRGB after the -combine step.

Т.е. все пути вели к значению sRGB. После того, как я поменял RGB на sRGB в файле конфигурации (typo3conf/LocalConfiguration.php)  появилась такая строка:
'GFX' => array(
'colorspace' => 'sRGB', 'gdlib_png' => 1,
'im_combine_filename' => 'composite',
'jpg_quality' => '80',
),
 И о чудо! Картинки стали светлее!

p.s. После смены значения параметра colorspace, TYPO3 может какое-то время заниматься переконвертацией всех картинок в соответствии с новыми графическими настройками, поэтому сайт может вести себя не совсем адекватно. В моем случае это был абсолютно белый экран, который пропал минут через 5.


вторник, 1 октября 2013 г.

Константы TYPO3 в шаблоне FLUID


При формировании меню с помощью FLUID, а точнее вьюхелпером - page.menu из пакета VHS, столкнулся с задачей передачи значения константы TYPO3 в качестве одного из параметров вьюхелпера.

Вот как выглядел viewhelper изначально:

<v:page.menu showHidden="1" doktypes="3" classCurrent="" classActive="" classFirst="" classLast="last" pageUid="26">
<ul class="socicons-container">
<f:for each="{menu}" as="menuLink" iteration="menuIterator">
<li {f:if(condition: menuIterator.isLast, then: 'class="last"')}>
<a href="{menuLink.link}" title="{menuLink.title}" target="{menuLink.target}">
<img src="fileadmin/tmpl/florian/Resources/Public/images/icons/{menuLink.subtitle}" width="30" height="30" alt="{menuLink.title}" />
</a>
</li>
</f:for>
</ul>
</v:page.menu>

тут меню формируется на основании страниц, которые содержатся в системной папке с id=26.

Понятное дело, что тупое указание id это не очень хорошо как для пользователя сайта, так и для его разработчика, который планирует использовать наработку с последующих проектах. Поэтому я решил заменить число 26 на тайповскую константу, которую всегда можно будет изменить в разделе констант шаблона. Причем сделать это будет под силу кому угодно, даже не очень эдвансед юзеру.

Итак, создаем TYPO3-константу:

socialIcons = 26


Как же ее значение использовать вьюхелпером? Для этого нужен промежуточный этап. Сначала значение данной константы помещаем в объект lib:

lib.constants.socialIcons.id = {$socialIcons}

А вот значение параметра lib внутри вьюхелпера можно получить с помощью другого вьюхелпера - var.typoscript. В итоге получаем следующую конструкцию:

<v:page.menu showHidden="1" doktypes="3" classCurrent="" classActive="" classFirst="" classLast="last" pageUid="{v:var.typoscript(path: 'lib.constants.socialIcons.id')}">
<ul class="socicons-container">
<f:for each="{menu}" as="menuLink" iteration="menuIterator">
<li {f:if(condition: menuIterator.isLast, then: 'class="last"')}>
<a href="{menuLink.link}" title="{menuLink.title}" target="{menuLink.target}">
<img src="fileadmin/tmpl/florian/Resources/Public/images/icons/{menuLink.subtitle}" width="30" height="30" alt="{menuLink.title}" />
</a>
</li>
</f:for>
</ul>
</v:page.menu>


P.S. Т.к. в примере используется пакет VHS, то не забывайте подключать его с помощью - {namespace v=Tx_Vhs_ViewHelpers} в начале html-шаблона.



суббота, 21 сентября 2013 г.

RealURL. Установка и настройка.


Практически ни один TYPO3 проект не обходится без использования плагина - RealURL, который предназначен для генерации ЧПУ ("ЧеловекоПонятных Урлов"). Т.е. благодаря ему мы имеем на сайте "красивые" ссылки в виде http://www.domain.com/downloads/page/1/, а не в уродливом формате - http://www.domain.com?index.php=123&page=1.

Несмотря на то, что RealURL довольно прост в установке и конфигурации, тем не менее, многие мои друзья и знакомые испытывают определенные трудности при его использовании и стараются заменить его другим аналогичным плагином, например - CoolUri, или же обращаются ко мне за помощью.

Вот поэтому я и решил написать эту статью, целью которой является снять максимальное количество вопросов при использования этого замечательного плагина.

Итак, по пунктам:

1. Установка плагина RealURL

Для установки RealURL, как и для установки любого другого плагина TYPO3, нужно проделать следующие шаги, о которых лучше расскажут картинки:





2. TypoScript

В главном TYPO3 шаблоне или в разделе Setup корневой страницы размещаем несколько дополнительных строк typoscript:
config {
simulateStaticDocuments = 0
tx_realurl_enable = 1
typolinkCheckRootline = 1
uniqueLinkVars = 1
baseURL = http://www.domain.com/
# или через переменную - domain, которая определена в разделе констант страницы
# baseURL = http://{$domain}/
}

3. .htaccess

RealURL работает не сам по себе. Его работа основана на апачевском модуле "mod_rewrite". Его наличие - обязательное условие и без него никак! Поэтому обязательно проверьте установлен ли он на вашем сервере. Для этого можно использовать функцию phpinfo(). Если же mod_rewrite присутствует в системе, то следующим шагом будет переименование файла в корневой директории сайта - "_.htaccess" в ".htaccess". Нужно заглянуть в этот файл и проверить не закоментированны ли такие строки:

# Enable URL rewriting
RewriteEngine On
# Change this path, if your TYPO3 installation is located in a subdirectory of the website root.
RewriteBase /
Маленький нюанс. Помню, что когда-то работал с сайтом, который был расположен в подпапке "new", а не в корневой директории. Это заставило меня немного напрячься при настройке RealURL. А дело было в малом, нужно было изменить параметр RewriteBase:
# Прошу прощения если я не так поставил слэш. Уже не помню как правильно :).
# Попробуйте разные варианты и напишите!
RewriteBase /new

4. Базовая настрока RealURL

После того как плагин установлен, о чем говорит зеленая пиктограммка, нужно его сконфигурировать.





В принципе, RealURL начинает работать сразу же после его установки в режиме автоконфигурации. Но я этот режим никогда не использую, ибо люблю, чтобы все настройки зависили только от меня. Автоконфигурацию я оставляю только в случае очень простого сайта - с одним языком, без плагинов и других наворотов. Во всех остальных случаях я использую только ручную настройку RealURL. Думаю, что именно этот этап и отпугивает всех желающих установить этот плагин на своем сайте. И напрасно, не так страшен чёрт как его малюют.

Итак, для ручной настройки RealURL направляемся в папку typo3conf. Удаляем или переименовываем файл автоматической конфигурации - realurl_autoconf.php. Создаем новый файл конфигурации - realurl_conf.php. Скопируем в этот файл базовые настройки:

<?php
$TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'] = array(
        'init' => array(
            'enableCHashCache' => 1,
            'appendMissingSlash' => 'ifNotFile',
            'enableUrlDecodeCache' => 1,
            'enableUrlEncodeCache' => 1,
            'respectSimulateStaticURLs' => 0,
            'postVarSet_failureMode'=>'', // необходимо для работы error 404        ),
    'redirects_regex' => array (
 
    ),
    'preVars' => array(
                        array(
                                'GETvar' => 'no_cache',
                                'valueMap' => array(
                                    'no_cache' => 0,
                                ),
                                'noMatch' => 'bypass',
                        ),
                         array(
                             'GETvar' => 'L',
                             'valueMap' => array(// необходимо для мультиязычных сайтов
                                                'ua' => '0', 'ru' => '1',  /*'en' => '2', 'de' => '3',*/                                        ),
                                'noMatch' => 'bypass',
                        ),
                ),
     'pagePath' => array(
            'type' => 'user',
            'userFunc' => 'EXT:realurl/class.tx_realurl_advanced.php:&tx_realurl_advanced->main',
            'spaceCharacter' => '-',
            'languageGetVar' => 'L', // необходимо для мультиязычных сайтов            'expireDays' => 7,
    //'segTitleFieldList'    => 'name,username,tx_realurl_pathsegment,alias,nav_title,title',
            'rootpage_id' => 1, // необходимо установить значение uid рутовой страницы сайта!        ),

      'postVarSets' => array(
            '_DEFAULT' => array(
                // tt_news archive parameters
                'archive' => array(
                    array(
                        'GETvar' => 'tx_ttnews[year]' ,
                        ),
                    array(
                        'GETvar' => 'tx_ttnews[month]' ,
                            'valueMap' => array(
                            'january' => '01',
                            'february' => '02',
                            'march' => '03',
                            'april' => '04',
                            'may' => '05',
                            'june' => '06',
                            'july' => '07',
                            'august' => '08',
                            'september' => '09',
                            'october' => '10',
                            'november' => '11',
                            'december' => '12',
                            )
                        ),
                ),                 // tt_news categories
                'category_name' => array (
                    array(
'GETvar' => 'tx_ttnews[cat]',
'lookUpTable' => array(
'table' => 'tt_news_cat',
'id_field' => 'uid',
'alias_field' => 'title',
'addWhereClause' => ' AND NOT deleted',
'useUniqueCache' => 1,
'useUniqueCache_conf' => array(
'strtolower' => 1,
'spaceCharacter' => '-',
),
), ),                 ),
                // tt_news articles and searchwords
                'article' => array(
                    array(
                        'GETvar' => 'tx_ttnews[tt_news]',
                        'lookUpTable' => array(
                            'table' => 'tt_news',
                            'id_field' => 'uid',
                            'alias_field' => 'title',
                            'addWhereClause' => ' AND NOT deleted',
                            'useUniqueCache' => 1,
                            'useUniqueCache_conf' => array(
                                'strtolower' => 1,
                                'spaceCharacter' => '-',
                                ),
                            ),
                        ),

                    array(
                        'GETvar' => 'tx_ttnews[swords]',
                        ),
                    ),
                ),          
            ),
      'fileName' => array(
            'defaultToHTMLsuffixOnPrev'=>0, // сделайте 1, чтобы все страницы заканчивались суффиксом .html            'index' => array(
                'rss.xml' => array(
                    'keyValues' => array(
                        'type' => 100,
                    ),
                ),
                'rss091.xml' => array(
                    'keyValues' => array(
                        'type' => 101,
                    ),
                ),
                'rdf.xml' => array(
                    'keyValues' => array(
                        'type' => 102,
                    ),
                ),
                'atom.xml' => array(
                    'keyValues' => array(
                        'type' => 103,
                    ),
                ),
            ),
        ),
 );
?>
Здесь я жирным выделил наиболее важные параметры которые нужно менять каждый раз, в зависимости от потребностей проекта. Выделенное красным цветом рассматривается ниже. Все что касается мультиязычных параметров, то они подробно описаны тут, а об особенностях настройки 404-й страницы можно почитать в этой статье.

Хочу обратить внимание на параметр 'rootpage_id'. Не всегда корневая страница сайта имеет id равный 1! Поэтому обязательно проверяйте этот момент и устанавливайте верное значение. Для тех, кто еще не знает как узнать id страницы TYPO3 скажу, что есть несколько способов. Один из них - просто навести курсор мышки на иконку страницы или её название. Другой - заглянуть в свойства страницы:


5. Дополнительные настройки RealURL

Остановлюсь более подробно на 3-х моментах, требующих более "тонкой" настройки RealURL
  • Настройки для нескольких доменов
    TYPO3 позволяет содержать несколько сайтов, а соответственно и несколько доменов, в рамках одной админки. Например, организация имеет свои филиалы, которые находятся в разных странах, каждый из которых имеет свой отдельный сайт. Скажем, украинский филиал имеет сайт - www.domain.ua, а немецкий  - www.domain.de.
    В таком случае realurl_conf.php будет иметь 2 ветки настроек.
    Для начала, обратите внимание, что первая строка конфигурационного файла сейчас выглядит так:

    $TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'] = array(...

    Но мы можем заменить её на эквивалентную строку:

    $TYPO3_CONF_VARS['EXTCONF']['realurl']['domain.ua'] = array(...

    Аналогично, для другого домена просто создаем дополнительный блок настроек, который будет начинаться со строки:

    $TYPO3_CONF_VARS['EXTCONF']['realurl']['domain.de'] = array(...

    Таким образом, результирующий файл будет выглядеть примерно так:

    $TYPO3_CONF_VARS['EXTCONF']['realurl']['domain.ua'] = array(... параметры ...);
    $TYPO3_CONF_VARS['EXTCONF']['realurl']['domain.de'] = array(... параметры ...);

    или так:

    $TYPO3_CONF_VARS['EXTCONF']['realurl'] = array (
    'domain.ua' => array (
                      ........
            )
    'domain.de' => array (
                      ........
            )
    );
  • Настройки для sitemap.xml
    Для sitemap.xml в TYPO3, как правило, создают отдельный тип страниц, например type=200. Т.е. содержимое sitemap.xml можно увидеть по адресу - http://www.domain.com?type=200. Для того, чтобы карту сайта можно было получить по традиционному урлу - http://www.domain.com/sitemap.xml необходимо внести небольшие изменения в секцию 'fileName' файла realurl_conf.php (после секции "atom.xml", например):
'sitemap.xml' => array(
                    'keyValues' => array(
                        'type' => 200,
                    ),
                ),
            • Настройки под конкретный плагин

              Теперь самое интересное. Все видели какие урлы генерируют плагины. Ну, например:
              http://www.domain.com/downloads?tx_myplugin_pi1[feusersUsername]=2
              Сегмент урла - tx_myplugin_pi1[feusersUsername]=2 выглядит ужасно. Допустим, что его задача указать плагину на какого-то зарегистрированного на сайте пользователя, имеющего в таблице fe_users uid=2. Приведем url к "нормальному" формату:
              http://www.domain.com/downloads/username/stepan/
              Для этого в realurl_conf.php в секции 'postVarSets', внутри '_DEFAULT', добавим следующие строки:
            'username' => array (
            array (
            'GETvar' => 'tx_myplugin_pi1[feusersUsername]' ,
            'lookUpTable' => array (
            'table' => 'fe_users',
            'id_field' => 'uid',
            'alias_field' => 'name',
            'addWhereClause' => ' AND NOT deleted AND NOT hidden',
            'useUniqueCache' => 1,
            'useUniqueCache_conf' => array (
            'strtolower' => 1,
            'spaceCharacter' => '-',
            ),
            ),
            ),
            ),

            • Если вдумчиво поглядеть в эти "магические" строки, то можно понять как RealURL выполняет замену и подстановку параметров. Правильно! Он делает запрос к таблице fe_users, ищет строку с uid=2, и берет значение поля name. После выборки имени пользователя его имя переводится в нижний регистр, а все пробелы заменяются знаком '-'. Вот и всё!
              Если вы посмотрите на мои базовые настройки RealURL, то увидите аналогичный блок, который я выделил курсивом -  'article' => array(... Эти директивы делают абсолютно тоже самое, что и вышеприведенный пример. Только запрос делается к таблице базы данных - tt_news, а для алиаса используется значение поля - title.

              Один из вариантов готового конфигурационного файла можно скачать с моего сайта - realurl_conf.

            P.S. Для более детального знакомства с RealURL читайте мануал и также статью Дмитрия Дулепова.


            пятница, 6 сентября 2013 г.

            Поиск в админке TYPO3


            У TYPO3 есть свой поиск в админке, который помогает быстро находить местоположение того или иного контента в структуре сайта.


            Однако, не всегда тут можно найти искомые данные, например записи какого-нибудь плагина. Дело в том, что TYPO3 производит внутренний поиск лишь в тех полях которые описаны в TCA и находятся в списке 'searchFields'.

            Чтобы было понятнее о чем идет речь, загляните в файл ext_tables.php любого плагина (см. typo3conf/ext/). В этом файле описаны дополнительные таблицы расширения и их поля. Вот, например, фрагмент данного файла для плагина - NEWS (news system) у которого есть таблица под названием - tx_news_domain_model_news:

            $TCA['tx_news_domain_model_news'] = array(
            'ctrl' => array(
            'title'     => 'LLL:EXT:news/Resources/Private/Language/locallang_db.xml:tx_news_domain_model_news',
            'label'     => 'title',
            'prependAtCopy' => $configuration->getPrependAtCopy() ? 'LLL:EXT:lang/locallang_general.xml:LGL.prependAtCopy' : '',
            'hideAtCopy' => TRUE,
            'tstamp'    => 'tstamp',
            'crdate'    => 'crdate',
            'cruser_id' => 'cruser_id',
            'versioningWS' => TRUE,
            'origUid' => 't3_origuid',
            'editlock' => 'editlock',
            'type' => 'type',
            'typeicon_column' => 'type',
            'typeicons' => array (
            '1' => t3lib_extMgm::extRelPath($_EXTKEY) . 'Resources/Public/Icons/news_domain_model_news_internal.gif',
            '2' => t3lib_extMgm::extRelPath($_EXTKEY) . 'Resources/Public/Icons/news_domain_model_news_external.gif',
            ),
            'dividers2tabs' => TRUE,
            'useColumnsForDefaultValues' => 'type',
            'languageField'            => 'sys_language_uid',
            'transOrigPointerField'    => 'l10n_parent',
            'transOrigDiffSourceField' => 'l10n_diffsource',
            'default_sortby' => 'ORDER BY datetime DESC',
            'sortby' => ($configuration->getManualSorting() ? 'sorting' : ''),
            'delete' => 'deleted',
            'enablecolumns' => array(
            'disabled' => 'hidden',
            'starttime' => 'starttime',
            'endtime' => 'endtime',
            'fe_group' => 'fe_group',
            ),
            'dynamicConfigFile' => t3lib_extMgm::extPath($_EXTKEY) . 'Configuration/Tca/news.php',
            'iconfile'          => t3lib_extMgm::extRelPath($_EXTKEY) . 'Resources/Public/Icons/news_domain_model_news.gif',
            'searchFields' => 'uid,title',...
            Как видим, автор побеспокоился о том, чтобы записи новостей можно было находить в админке по двум полям - uid и title.

            Но что же делать если автор плагина оказался не таким "заботливым" или существуют другие поля по которым поиск не предусмотрен, а для нас это очень важно.

            Решение есть. Для этого не нужно курочить плагин и добавлять новые поля в список searchFields. Можно поступить гораздо проще. В каждой директории typo3conf лежит файл - extTables.php, который подключается из localconf.php или LocalConfiguration.php. Вот в этот файл и нужно внести все необходимые предпочтения для поиска.

            Добавим туда такую строку:

            $TCA['tx_news_domain_model_news']['ctrl']['searchFields'] = 'uid,title,teaser,bodytext';


            В результате наших изменений поиск в админке будет искать записи новостей не только по полям uid и title, но и по полям - teaser и bodytext.



            четверг, 5 сентября 2013 г.

            О GeoIP в TYPO3

            Многим известна популярная библиотека PHP - GeoIP, с помощью которой по IP адресу клиента можно узнать его местоположение - континент, страну и пр. Как же её подключить и использовать в TYPO3?

            Подключить GeoIP к TYPO3 довольно легко. Для этого я взял из репозитория плагин - ml_geoip. Несмотря на то, что я работал с версией TYPO3 - 6.1.1, а этот плагин последний раз обновлялся в марте 2009 (4 года назад!), он прекрасно установился и заработал.

            Теперь, для чего я его поставил и как я его использовал?

            Во-первых, есть замечательный экст - rlmp_language_detection, который умеет автоматически направлять пользователя на определенную языковую версию сайта в зависимости от локализации его браузера или географического местоположения. Географию клиента определяет, как вы догадались, именно ml_geoip.

            Во-вторых, иногда требуется видоизменять сайт в зависимости от страны клиента. Как это делается? С помощью userfunc! Рассказываю...

            1. Создаём директорию внутри fileadmin, например - user_funcs.
            2. Создаём файл - fileadmin\user_funcs\tools.php :
            <?php
            // Подключаем библиотеку GeoIP из директории плагина ml_geoip
            require_once(t3lib_extMgm::extPath('ml_geoip').'class.tx_mlgeoip.php');
            class user_tools {
                   function isEnglishVersion(){
            $ip_address = $_SERVER['REMOTE_ADDR'];
            $my_geoip = t3lib_div::makeInstance('tx_mlgeoip');
            $gi_country_name = $my_geoip->getCountryNameByAddress($ip_address);
            if (($gi_country_name==='Russia')||($gi_country_name==='Ukraine')){
            return 0;
            }
            return 1; }}?>
            3. Итак, наш userfunc возвращает "1" если клиент не из Украины или России, и возвращает "0" в противном случае. Теперь об этом должна "узнать" TYPO3. Делается это так:
            includeLibs.tools = fileadmin/user_funcs/tools.php
            lib.isEnglishVersion = USER
            lib.isEnglishVersion {
              userFunc = user_tools->isEnglishVersion
            }
            4. Теперь можно использовать наш объект -lib.isEnglishVersion либо в шаблоне fluid, либо в typoscript. Например:

            <f:if condition="{f:cObject(typoscriptObjectPath: 'lib.isEnglishVersion')} != 1">
            <f:render partial="header/mypartial"/>
            </f:if>

            пример для typoscript:

            [userFunc = isEnglishVersion()]
            ...
            [else]
            ...
            [global]

            Ну вот и всё! Юзайте себе на здоровье!



            суббота, 10 августа 2013 г.

            Настройки TYPO3-сайта для браузера определенной версии

            Казалось бы, простая вещь - настройки сайта в зависимости от типа браузера и(или) его версии. Чаще всего разработчикам приходится по-особенному настраивать сайт для различных версий IE. Как это сделать описано в документации TYPO3, но когда дело доходит до практики всё выходит не так гладко.

            Вот пример из документации как проанализировать тип браузера:
            [browser = netscape, opera]
            А это описание того, как определить нужную версию браузера:
            [version = value1, >value2, =value3, <value4, ...]
            Это теория. Теперь практический пример. Например, нам нужна отдельная ветка настроек для всех IE 7 и более ранних версий.

            Для решения напрашивается следующая строка:
            [browser = msie] && [version < 7] || [browser = msie] && [version = 7]
            ... ну или что-то в этом роде.

            Короче это - неверное понимание документации. И думаю, что не я один такой.
            Вот верный код:
            [browser = msie] && [version= <4, <5, <6, =7]
            Основная моя ошибка была в том, что после слова version обязательно должен быть знак равенства, а варианты версий браузера необходимо перечислять в списке разделенном запятыми. Народ, поверьте, перепробовал всевозможные варианты, но заработал только этот.
            Если у кого-то есть другие варианты решения  - напишите.
            Надеюсь кому-то помог и уложил раньше спать :).

            пятница, 15 февраля 2013 г.

            SAPE на TYPO3


            Многие знают, что существует такая биржа по покупке и продаже ссылок - SAPE.RU, или просто Сапа.

            Для того, чтобы отобразить на своем сайте саповские ссылки необходимо на страницу внедрить примерно следующий PHP код:

            <?php
                 if (!defined('_SAPE_USER')){
                    define('_SAPE_USER', '8asdfsg78675sdfg567huyt565v654654a');
                 }
                 require_once(realpath($_SERVER['DOCUMENT_ROOT'].'/'._SAPE_USER.'/sape.php'));
                 $sape = new SAPE_client();
                 echo $sape->return_links()
            ?>
            Казалось бы все просто, но на самом деле не так. TYPO3 из соображений безопасности запрещает нам внедрять такой код на свои страницы, даже если мы выбираем тип контента - Plain HTML (HTML код). Поэтому, возникает вопрос - что же делать? 

            Рассказываю:

            1. Необходимо зарегистрировать на SAPE новую площадку


            2. В процессе регистрации новой площадки нужно скачать саповский архив, в котором лежит PHP-файл - sape.php...


            ... а также внимательно читаем инструкцию по установке данного php-файла на нашем веб-сервере.

            3. После установки sape.php, наша TYPO3 директория выглядит примерно так:



            4. Теперь нужно позаботиться о том как подключить саповскую библиотеку - sape.php, и вывести ссылки с помощью функции return_links().

            Чтобы подключить сапу на каждую страницу сайта можно использовать конфигурационный файл - typo3conf/localconf.php. Добавляем в этот файл следующие строки:

            global $sape;
            if (!defined('_SAPE_USER')){
                define('_SAPE_USER', '8asdfsg78675sdfg567huyt565v654654a');
            }
            require_once(realpath($_SERVER['DOCUMENT_ROOT'].'/'._SAPE_USER.'/sape.php'));
            $sape = new SAPE_client();

            Обратите внимание, мы создали глобальную переменную $sape и присвоили ей экземпляр класса.

            Далее создаем в директории fileadmin новый php-файл - sape-links.inc  (где вам удобно, например fileadmin/sape/sape-links.inc, расширение файла именно INC!), который  будет содержать следующие строки для вывода списка или блока ссылок:
            <?php
            global $sape;
            echo "<div class='sape'>";
            //$output = $sape->return_links();
            $output = $sape->return_block_links();
            $output = iconv('windows-1251','utf-8',$output); // перекодировку в utf8 можно сделать и саповскими параметрами, см. документацию
            echo $output;
            echo "</div>";
            ?>

            Файл который будет выводить саповские ссылки - готов. Осталось последнее - вставка этого файла в контент. Для этого используем плагин - lumophpinclude.

            Этот экст легко устанавливается, однако в связи с тем, что lumophpinclude уже давно не обновлялся, он не устанавливается на последние версии TYPO3, ругаясь на несоответствие версии системы. Причина в следующем. Если заглянуть в файл ext_emconf.php плагина (путь - typo3conf/ext/lumophpinclude/ext_emconf.php), то мы там сможем увидеть такие строки:
            'depends' => array(
            'php' => '4.4.0-5.2.99',
            'typo3' => '4.0.0-4.2.99',
            )
            Как видим, когда экст последний раз обновлялся, то автор предполагал, что он будет работать на всех версиях TYPO3 вплоть до версии - 4.2.99. Расширим этот интервал и заменим 4.2.99 на 6.2.99, например. Теперь в менеджере расширений (Extension Manager) можно нормально активировать данный плагин (нажать плюсик). К фатальным последствиям этот "хак" меня еще никогда не приводил, но на всякий случай поглядывайте в deprication.log.

            Теперь можно подключить этот плагин и к TYPO3 шаблону:


            Чтобы разместить lumophpinclude на странице сайта - выбирайте вставку плагина и настраивайте его. Вот так, можно подключить наш sape-links.inc на отдельной странице:


            Хочу обратить внимание, что если вы внесете какие-либо изменения в исходный код файла sape-links.inc, то эти изменения не вступят в силу. И если не разобраться, то это может поставить в тупик. Дело в том, что после выбора php-файла, как это показано на рисунке выше, плагин копирует его в свою служебную директорию - uploads/tx_lumophpinclude/sape-links.inc, после чего работает именно с данной копией файла. Лично я переименовывал тот файл который находился в папке fileadmin и заново выбирал его в настройках плагина.

            Если вам нужно разместить ссылки на большом количестве страниц, то вставка плагина lumophpinclude на каждую страницу может занять много времени. Для быстрого размещения sape-links.inc на всех страницах сайта одновременно нужно поступить следующим образом:
            • В любой из системых папок создать запись контента с типом - Plugin->Lumophpinclude
            • Создать новый тайповский lib объект в TYPO3 шаблоне, например:
            # SAPE
            lib.sape = RECORDS
            lib.sape.tables = tt_content
            lib.sape.source = 902 # где 902 - номер контентной записи
            • Закрепить (подмапить) lib объект к какому-то html фрагменту страницы. Как это выполнить - это уже на ваше усмотрение. Тут все зависит от вашего шаблонизатора.

            суббота, 9 февраля 2013 г.

            Константы TYPO3 в условиях IF


            Как известно, шаблон TYPO3 состоит из двух основных блоков - константы и тело typoscript:


            Иногда возникает вопрос - как в зависимости от значения константы выполнить тот или иной фрагмент скрипта? Все очень просто.

            Допустим, у нас есть константа - addThis, которой присвоено значение - 1. Другими словами в блоке Constants имеется следующая запись:
            addThis = 1

            Пусть значение 1 означает, что на сайте нужно показывать кнопки, довольно популярного , сервиса - AddThis, а значение 0 - означает обратное, т.е. кнопки AddThis показывать не нужно.

            Реализовать сравнение нашей константы addThis с каким-либо значением можно с помощью следующей конструкции typoscript :

            [globalVar = LIT:0<{$addThis}]
            # Константа больше нуля - показывать AddThis
            lib.addThis = HTML
            lib.addThis.value(
            <!-- AddThis Button BEGIN -->
            <div class="addthis_toolbox addthis_default_style ">
            <a class="addthis_button_preferred_1"></a>
            <a class="addthis_button_preferred_2"></a>
            <a class="addthis_button_preferred_3"></a>
            <a class="addthis_button_preferred_4"></a>
            <a class="addthis_button_compact"></a>
            <a class="addthis_counter addthis_bubble_style"></a>
            </div>
            <script type="text/javascript" src="http://s7.addthis.com/js/250/addthis_widget.js#pubid=ra-4f0789fdfhs432acc001c493f73"></script>
            <!-- AddThis Button END -->
            )
            [else]
            # Константа 0 или меньше нуля - не показывать AddThis
            lib.addThis >
            [global]

            суббота, 2 февраля 2013 г.

            Как показать ID страниц в админке TYPO3


            Порой, на сайтах задалбывает находить страницу с нужным ID (uid).
            Облегчить себе жизнь можно следующим typoscript:

            options {
              pageTree.showPageIdWithTitle = 1
            }
            Куда этот скрипт вставить (User Admin, выбор пользователя, закладка Options):





            Что получаем на выходе:

            О себе

            Моя фотография
            Вадим Гиркало
            Фрилансер, веб-разработчик сайтов на базе бесплатной, мощнейшей и очень гибкой CMS системы - TYPO3.
            Просмотреть профиль

            Позвонить мне в Skype

            TOP - 3