userFunc не имеет никакого эффекта в TYPO3 4.5
Я уже давно борюсь с USER и USER_INT. Сначала я думал, что моя проблема связана с TemplaVoila, но в итоге я вернулся к чистой установке TYPO3 версии 4.5.40, и проблема сохраняется.
Чтобы проверить это, я сделал новую установку версии 4.5.40.
Моя настройка шаблона выглядит следующим образом:
includeLibs.beechgroveTest = fileadmin/php/test.php
page = PAGE
page {
10 = USER
10 {
userFunc = getBeechgroveTest
}
}
В файле admin/php/test.php у меня есть этот код:
<?php
function getBeechgroveTest($content, $conf) {
return "func";
}
echo "Load: ";
?>
В модуле страницы я добавил ярлык на стандартную страницу. на стандартной странице нет элементов содержимого.
Кроме того, никаких изменений не было сделано с момента установки.
Когда я загружаю сайт, я вижу текст "Загрузить:".
Если я перезагрузить сайт, то текст исчезнет.
Если я изменю USER на USER_INT, текст останется после перезагрузки сайта.
Это говорит мне о том, что USER и USER_INT распознаются, но userFunc, похоже, игнорируется.
Я сделал тот же тест с чистой установкой версии 6.2.13.
Но здесь я получаю текст "Load: func".
И когда я перезагружаю его, он меняется на "func". Если я использую USER_INT, текст "Load: func" остается, когда я перезагружаюсь.
Другими словами, с версией 6.2 она работает, как и ожидалось, но не в версии 4.5. Вся информация, которую я смог найти, указывает на то, что она должна работать в 4.5, так что мне не хватает?
Есть ли какая-то конфигурация, которую нужно сделать, чтобы включить userFunc в 4.5?
2 ответа
Решение было найдено по этой ссылке: http://docs.typo3.org/typo3cms/TyposcriptReference/DataTypes/Functionname/Index.html
В нем говорится, что имя функции должно начинаться с 'user_'.
Таким образом, следующий код работает как задумано:
Шаблон:
includeLibs.beechgroveTest = fileadmin/php/test.php
page = PAGE
page {
10 = USER
10 {
userFunc = user_getBeechgroveTest
}
}
PHP:
<?php
function user_getBeechgroveTest($content, $conf) {
return "func";
}
echo "Load: ";
?>
Видимо это ограничение было снято в версии 6.2.
Это вызывает либо функцию PHP, либо метод в классе. Это очень полезно, если вы хотите включить свою собственную обработку данных или контент. http://docs.typo3.org/typo3cms/TyposcriptReference/ContentObjects/UserAndUserInt/Index.html
Это означает, что вы должны поместить свою функцию в класс, убедитесь, что этот класс поддерживает автозагрузку (naming convention
) и используйте форму class->method
зарегистрировать ваши методы.
Пожалуйста, имейте в виду, что возможные имена классов ограничены.