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 зарегистрировать ваши методы.

Пожалуйста, имейте в виду, что возможные имена классов ограничены.

Другие вопросы по тегам