пятница, 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(Как видим, автор побеспокоился о том, чтобы записи новостей можно было находить в админке по двум полям - uid и title.
'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',...
Но что же делать если автор плагина оказался не таким "заботливым" или существуют другие поля по которым поиск не предусмотрен, а для нас это очень важно.
Решение есть. Для этого не нужно курочить плагин и добавлять новые поля в список 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 :
пример для typoscript:
Ну вот и всё! Юзайте себе на здоровье!
Подключить 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 :
<?php3. Итак, наш userfunc возвращает "1" если клиент не из Украины или России, и возвращает "0" в противном случае. Теперь об этом должна "узнать" TYPO3. Делается это так:
// Подключаем библиотеку 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; }}?>
includeLibs.tools = fileadmin/user_funcs/tools.php4. Теперь можно использовать наш объект -lib.isEnglishVersion либо в шаблоне fluid, либо в typoscript. Например:
lib.isEnglishVersion = USER
lib.isEnglishVersion {
userFunc = user_tools->isEnglishVersion
}
<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 обязательно должен быть знак равенства, а варианты версий браузера необходимо перечислять в списке разделенном запятыми. Народ, поверьте, перепробовал всевозможные варианты, но заработал только этот.
Если у кого-то есть другие варианты решения - напишите.
Надеюсь кому-то помог и уложил раньше спать :).
Подписаться на:
Сообщения (Atom)
О себе
- Вадим Гиркало
- Фрилансер, веб-разработчик сайтов на базе бесплатной, мощнейшей и очень гибкой CMS системы - TYPO3.
Мой сайт
Позвонить мне в Skype
TOP - 3
-
Как я уже писал в одной своей заметке ( SEO и общие рекомендации ), для сайта очень важно, чтобы при обращении к заведомо несуществующей ст...
-
Дорабатывая очередной свой сайт столкнулся с такой проблемкой. В шапке сайта есть две флэш вставки - банер, который вставлен через конструкц...
-
Несмотря на то, что материала по данной тематике вроде бы и достаточно, но весь он носит кусочно-латочно-разрозненный характер, что мешает б...
