PDA

Просмотр полной версии : Не работает разширение в typo3 4.7


lyova
25.06.2012, 01:53
Здраствуйте!
У меня такая проблемма. На typo 4.7 ставлю екстеншен fefilebrowser. (файловый менеджер). Первая проблема была: не проходила авторизация на первой странице екстеншена. видимо в новой версии тайпо что то поменялось. Поставил на той же странице felogin. Когда захожу через него, то екстеншен принимаєт, пускает в робочую область. И всё работает. Но, есть одно но. Все текстовые надписи (Label) не отображаються, вместо каждого из них пишется табое: "[object Object]:". Видимо оно почему то не хочет принимать данные из locallang. Хотя там всё есть как обычно. Может в тайпо 4.7 какой то другой принцып подключения их? По тому что в тайпо 4.5 этот екстеншен работает без проблем. Наверно надо чтото править в екстеншене. Было ли у кого такое? Может в других екстеншенах? Что такое эта надпись "[object Object]:"? Может оно не может какой то обьэкт побключить?

Андрей Аксенов
25.06.2012, 12:03
При переходе на новую версию, следует прочитать, что в ней изменилось (http://typo3.org/download/release-notes/typo3-4-7-release-notes/), и руководство по обновлению (http://wiki.typo3.org/TYPO3_4.7#Upgrading)...
- авторизация изменилась
- работа с языковыми метками поменялась
Что и как, читайте (http://xn--80abcjdogk0b.xn--80afg4bgm.xn--p1ai/help/).

lyova
25.06.2012, 15:39
Спасибо за ваш ответ и за статью. По ней я создал файлы locallang.xlf и de.locallang.xlf. Они должны автоматически подхватываться тайпо или нужно в екстеншене переписывать функции вызова меток?

Андрей Аксенов
25.06.2012, 15:48
Должны подхватываться автоматом, но в расширении могут использоваться "устаревшие" функции. Тут уже придется разбираться с расширением либо самостоятельно, либо написать автору и ждать реакции...
Вообщем попробуйте очистить временные файлы и запустите расширение... А там видно будет.

lyova
25.06.2012, 15:57
Спасибо за ответ. Я сделал так. Создал просто файл болванку

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<xliff version="1.0">
<file source-language="en" datatype="plaintext" original="messages" date="2011-10-17T20:22:32Z" product-name="fefilebrowser" target-language="de">
<header/>
<body>

</body>
</file>
</xliff>
После этого надписи "[object Object]:" пропали. Видимо оно сам файл приняло.
Теперь добавляю описание одной метки
<trans-unit id="treeHeadd" xml:space="preserve" approved="yes" >
<source>Explorer</source>
<target state="translated">Explorer</target>
</trans-unit>
Вместо именно этой метки снова появляются "[object Object]:".

Андрей Аксенов
25.06.2012, 16:03
А для чего все эти сложности? Разве нельзя установить это расширение, перевести все метки, если они еще не переведены, и работать с ним как обычно?
К тому же, расширение конечно интересное, но уже два года пребывает в состоянии альфа-разработки... Подозреваю, что его забросили, и придется дорабатывать все что не действует самому. А стоит ли?

lyova
25.06.2012, 16:12
В том то и дело что это "[object Object]:" выводилось и для дефолтного языка тоже. Если бы хотя для него работало то я бы просто перевёл метки. Хотелось бы именно это расширение запустить. решить проблему. или хотя бы разобраться почему что оно не работает. Может подобная ситуация случится и с другими екстеншенами. Что интересно, то сам екстеншен работает нормально. Если знать какой "[object Object]:" чему соответствует.

lyova
27.06.2012, 15:10
Проблемму решил так:
В файле pi1/php/class.tx_fefilebrowser_application.php нашол массив который отвечает за метки $lang. Он попадает при создании обэкта класса class tx_fefilebrowser_application
function tx_fefilebrowser_application($action, $path, $user, $lang)
Нашол там метод который формует рабочий массив меток
function setLang($lang) {
$this->lang = $lang;
}
полазил по екстеншену. в одном из файлов нашол функции что считывають ХМЛ для меток.
добавил в function setLang($lang) код

function setLang($lang) {
$this->lang = $lang;
//считываю файл с метками
$llFile = t3lib_extMgm::extPath('fefilebrowser').'/pi1/locallang.xml';
//пробую выбрать только для одного языка "de" ( но почему то заганяет и "default" тоже)
$tmp_arr = t3lib_div::readLLXMLfile($llFile, "de");
//поєтому потом ещё раз выбираю при переборе только тот язык что нужен
//хотел сделать чтобы выбирало в зависимости от языка
//но почему то функция "t3lib_div::_GET('L')" здесь не работает вибирает всегда только один язык (в принцыпе мне достаточно одного языка, но всё же)
//хотя тот же код работает когда его тестировал в файле "class.tx_fefilebrowser_pi1.php"(наверно это какие то особенности тайпо, потому что функция t3lib_div::readLLXMLfile работает, значит t3lib_div подключён )
if (t3lib_div::_GET('L')==1) $lang_array = $tmp_arr['default'];
else $lang_array = $tmp_arr[de];
foreach ($lang_array as $key => $value)
{
$this->lang[$key] = $value[0][target] ;
}
/////////////////////////////////////////////////////////////////////////
}


Код заработал. но наверно это можно сделать более правильно с точки зрения програмирования тайпо.

По поводу неработающей авторизации. в екстеншене в файле class.tx_fefilebrowser_pi1.php есть метод который отвечает за авторизацию

function checkUser($name, $password)
{
$select = 'uid';
$from_table = 'fe_users';
$where = 'username="'.$name.'" AND password="'.$password.'"';

list( $result ) = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows($select, $from_table, $where, $groupBy='', $orderBy='', $limit='');

return $result[ 'uid' ];
}

Там пароль проверяеся простым сравнением. а в базе он закодирован. наверно нужно проверять кодировать введеный пароль какой то функцией тайпо (той же что и кодировали пароль в базе) и тогда сравнивать