Пользовательские теги и cfimport - PullRequest
3 голосов
/ 24 июня 2009

Работают ли пользовательские теги с отображениями? Я пытаюсь не указывать папку CustomTags как относительный адрес.

Я пробовал:

<cfset this.mappings["/CT"] = Expandpath("/myProjects/Project1/CustomTags")>

внутри Application.cfc, а затем

<cfimport prefix="tag" taglib="/CT">

внутри моей страницы, но это не так.

Там написано:

Невозможно импортировать библиотеку тегов, указанную / CT. Обнаружена следующая ошибка: C: \ Inetpub \ wwwroot \ CT. Убедитесь, что вы указали допустимую библиотеку тегов.

Ответы [ 5 ]

2 голосов
/ 30 июля 2009

Вопреки тому, что сообщил Джейсон - у меня CFIMPORT работает очень хорошо, без сопоставления для каждого приложения, по сравнению с одним глобально установленным в CFAdmin. CFIMPORT довольно капризен в отношении отображений (например, вы не можете использовать переменную для относительного пути или использовать файл расширения), но вы должны иметь возможность делать то, что запрашиваете, без проблемы.

У вас установлен флажок «Включить настройки приложения» в CFAdmin | Настройки, позволяющие вам использовать this.mappings? Какую версию CF вы используете? Я использую CF8 с этим кодом, и у меня нет проблем:

Применение CFC (вне функции, но с компонентом):

this.rootPath = getDirectoryFromPath(getCurrentTemplatePath());  // this assures path of application.cfc is used to determine path, likely equivalent to expandPath("/")
structInsert(this.mappings, '/vp', this.rootPath);

В CFC (вне функции, но с компонентом):

<cfimport prefix="loader" taglib="/vp/view/_loader/">

Затем я могу использовать в CFC, и он работает, как ожидалось.

1 голос
/ 02 апреля 2010

Я подтвердил это ... вы не можете использовать отображения, созданные с помощью структуры "this.mappings" в application.cfc.

Из документации Adobe (Coldfusion 9):

Путь должен быть относительно сети root (и начинаются с /), текущий расположение страницы или каталог указано в Администраторе Страница сопоставлений ColdFusion.

CFImport Документация для CF 9

Не уверен, почему сопоставления application.cfc работают практически для всего остального, кроме этого. Как-то неутешительно, так как мне понравилась идея определить как можно меньше в Администраторе. Мне нравится просто заархивировать приложение и развернуть его где угодно.

1 голос
/ 24 июня 2009

В документации сказано, что он работает с каталогом, указанным на странице сопоставлений администратора ColdFusion. Вы пытались настроить сопоставление в администраторе ColdFusion, чтобы проверить, работает ли оно в первую очередь? Если это работает, но набор this.mappings для каждого приложения в application.cfc не работает, возможно, это ошибка?!?

EDIT: Я проверил предложение Адама использовать функцию expandPath (), но это также не работает, потому что атрибут taglib должен содержать постоянное значение. Он не может содержать переменную или функцию. Это просто не работает, если вы не используете набор сопоставлений в ColdFusion Administrator. Я попробовал следующие тесты, используя этот application.cfc.

<cfcomponent>

    <cfset this.name = "TestApp" />
    <cfset this.loginStorage = "session" />
    <cfset this.sessionManagement = true />
    <cfset this.setClientCookies = true />
    <cfset this.setDomainCookies = false />
    <cfset this.sessionTimeOut = CreateTimeSpan(0,12,0,0) />
    <cfset this.applicationTimeOut = CreateTimeSpan(1,0,0,0) />
    <cfset this.mappings['/CT'] = "C:\apache\htdocs\myProjects\Project1\CustomTags"/>

</cfcomponent>

И это в шаблоне ColdFusion:

<cfimport prefix="tag" taglib="#expandpath('/CT')#">

Выдает ошибку:

Это выражение должно иметь константу значение.

<cfset CT = expandpath('/CT')/>
<cfimport prefix="tag" taglib="#CT#">

Выдает ошибку:

Это выражение должно иметь константу значение. * * тысяча двадцать-одна

1 голос
/ 24 июня 2009

Я почти уверен, что expandPath учитывает сопоставления CF. Вы пробовали что-то подобное?

<cfset this.mappings["/CT"] = Expandpath("/myProjects/Project1/CustomTags")>

<cfimport prefix="tag" taglib="#expandPath('/CT')#">
1 голос
/ 24 июня 2009

Я уверен, что с тегом cfimport ничего сложного не получится. Я думаю, что вы должны использовать относительные пути, и вы должны включать его вручную на каждой странице. (вместо того, чтобы поместить его в файл application.cfc где-нибудь или как угодно)

...