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.
Но здесь я получаю текст «Загрузить: func».
И когда я перезагружаю, он меняется на «func». Если я использую USER_INT, текст «Load: func» остается при перезагрузке.

Другими словами, с версией 6.2 он работает, как и ожидалось, но не с версией 4.5. Вся информация, которую мне удалось найти, указывает на то, что она должна работать в версии 4.5, так что же я упускаю?
Нужно ли выполнить какую-то настройку, чтобы включить userFunc в версии 4.5?


person Henrik Bøgelund    schedule 22.06.2015    source источник


Ответы (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.

person Henrik Bøgelund    schedule 23.06.2015

Это вызывает либо функцию PHP, либо метод в классе. Это очень полезно, если вы хотите включить собственную обработку данных или контент. http://docs.typo3.org/typo3cms/TyposcriptReference/ContentObjects/UserAndUserInt/Index.html

Это означает, что вы должны поместить свою функцию в класс, убедиться, что этот класс поддерживает автоматическую загрузку (naming convention), и использовать форму class->method для регистрации ваших методов.

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

person pgampe    schedule 23.06.2015
comment
Спасибо за ответ. Предоставленная вами ссылка указывает, что вы можете использовать либо функцию, либо метод, поэтому вам не нужно реализовывать ее как класс. Но ваше замечание о соглашении об именах заставило меня искать в новых местах, и я нашел решение. - person Henrik Bøgelund; 23.06.2015