Оператор CFML if/else ведет себя странно в Coldfusion 6
-
21-12-2019 - |
Вопрос
У меня есть следующий очень простой оператор if/else:
<cfif Server.ColdFusion.ProductVersion GTE "7">
<cfoutput>#encrypt("Test text", "77qidrWFoQg96taobooCm3/WimS2Gcdd", "DESEDE", "Hex")#</cfoutput>
<cfelse>
<cfoutput>#encrypt("Test text", "77qidrWFoQg96taobooCm3/WimS2Gcdd")#</cfoutput>
</cfif>
Работать должно под CF 7, 8, 9, 10, но не под CF 6, где я получаю следующую ошибку, как будто его не волнует <cfif>
тег и выполняет то, что предназначено для более поздних версий CF (>7).
Есть идеи?Я попробовал много-много разных вариантов и тот же результат.CF 6 приводит меня в отчаяние.P.S.Нет, мои клиенты, для которых я пишу некоторые сценарии, пока не собираются переходить на более позднюю версию.
Решение
ColdFusion пытается скомпилировать страницу, но не может, поскольку вы используете неверный синтаксис для encrypt
функция.CF 6 не позволяет передавать эти аргументы encrypt
.Я предлагаю, если вам нужна поддержка CF6, использовать <cfinclude>
заявление о включении кода post-CF6.Итак, что-то вроде:
<cfif listfirst(server.coldfusion.productversion) gte 7>
<cfinclude template="cf7encrypt.cfm" />
<cfelse>
<cfinclude template="cf6encrypt.cfm" />
</cfif>
Затем в два файла cfm вы можете включить вызовы шифрования для конкретной версии.Тогда он скомпилируется правильно.
Другой вариант — иметь два разных CFC, которые действуют как оболочки для шифрования (один для CF6 и один для CF7+), а затем загружать соответствующий CFC и вызывать функцию шифрования.В любом случае ключом является получение недопустимого вызова encrypt()
вне основного шаблона.