2012-07-04 5 views
0

Я пытаюсь это на CF 8.0.1, но не удается. Я пытаюсь передать пользовательское значение для пользовательского тега, например:Пользовательский тег ColdFusion, вызывающий cfmail как attibuteCollection и ошибка бросания

<cf_call ckmail="#{to='[email protected]',from='[email protected]',subject='Error reported',mailserver='mail.domain.com',username='1234',password='tested'}#"> 

В пользовательских тегов call.cfm я следующее:

<cfparam name="attributes.ckmail" default=""> 
<cfmail attributecollection = "#attributes.ckmail#"> 

Ошибка я получаю:

Недопустимый CFML конструкция находится на линии 11 в колонке 18. ColdFusion смотрел на следующий текст: {

Он работает хорошо в CF9, но в CF8.0.1 (или предыдущей версии) он не работает с указанным выше сообщением.


код Дополнение от 18 июля 2012


Я попытался с помощью кода Дэна, но теперь я столкнулся другой вопрос, в моем Custom Tag я использую как этот

 <cfset emailSetting = StructNew()> 
    <!--- loop our query string values and set them in our structure ---> 
    <cfloop list="#attributes.ckmail#" index="key" delimiters=","> 
    <cfset emailSetting["#listFirst(key,'=')#"] = urlDecode(listLast(key,"="))> 
    </cfloop> 
    <cfdump var="#emailSetting#"><cfabort> 
     <cfmail attributecollection = "#emailSetting#"> 

Выше были мои настройки в пользовательском теге, я назвал его из моего кода как

 <cf_call ckmail="[email protected],[email protected]domain.com,subject='Error reported', 
    server=mail.domain.com,[email protected],[email protected],type=html"> 

Ошибка теперь я получаю сервер «SMTP» не определен,

если я добавить детали Smtp в cfadmin это работает, может быть он игнорирует значения в поле я набранный, но он показывает ошибку когда в cfadmin также нет параметров smtp.

ответ

0

Вы используете синтаксис struct literal в атрибуте ckmail, который, как я думаю, изменил поведение между CF8 и CF9. Я бы попытался создать структуру старомодным способом и посмотреть, работает ли это.

+0

так что с помощью Structnew() справа, Btw я передаю его в пользовательский тег, так что немного запутался, как это будет работать – Misty

+0

это будет выглядеть как У него не будет никакого синтаксиса construtor - это все сделано раньше времени. Проверьте первый ответ - пример Мэтта довольно ясен. –

2

Неявная структура должна работать в CF8.0.1, как у вас есть.

Вы можете использования конечно подобный код, чтобы создать структуру с помощью structNew функции():

<cfset mailArgs    = StructNew() /> 
<cfset mailArgs.to   = '[email protected]' /> 
<cfset mailArgs.from  = '[email protected]' /> 
<cfset mailArgs.subject  = 'Error reported' /> 
<cfset mailArgs.mailserver = 'mail.domain.com' /> 
<cfset mailArgs.username = '1234' /> 
<cfset mailArgs.password = 'tested' /> 

<cf_call ckmail="#mailArgs#"> 

Можете ли вы опубликовать более подробный отчет об ошибках из ColdFusion здесь, так что мы можем помочь вам найти точное местоположение ошибки? Или вы можете разместить больше кода?

+0

Это подробный отчет, который я получаю от кода. My Confusion лежит, когда CF9 выполняет этот процесс, а в CF 8 он терпит неудачу, я вижу, что вы объявили Struct по-разному, а затем передали его тегу cfmail, я хочу его чтобы пройти через пользовательский тег, но делать не хотят декларировать отдельно и снова использовать вышеуказанный письменный код в пользовательском теге как: , я хочу передать фактическое написанное выше, а не оценивать его снова здесь – Misty

0

Хммм .... Интересно, если знаки фунта выглядят странно для кого-либо еще в пользовательском теге? Stucture обозначение, как правило, выглядит следующим образом:

<cfset mystruct = {to='[email protected]',from='[email protected]',subject='Error reported',mailserver='mail.domain.com',username='1234',password='tested'}/> 

Признаки фунт приведут к CF, чтобы попытаться «сделать что-то», чтобы объединить значение (например, когда вы делаете <cfset z = #x+y#/> ... но оставляя их позволяет CF «видеть» индикаторы конструктора (фигурные скобки).

Но я не уверен, как пользовательский тег будет вести себя в этом случае.Вы пробовали называть это так:

<cf_call 
ckmail={to='[email protected]',from='[email protected]',subject='Error reported',mailserver='mail.domain.com',username='1234',password='tested'}/> 

Или если это невозможно - как было предложено - установить его раньше времени, как:

<cfset args = {to='[email protected]',from='[email protected]',subject='Error reported',mailserver='mail.domain.com',username='1234',password='tested'}/> 

Тогда звоните:

<cf_call ckmail="#args#"/> 

См если кто-нибудь из них работает?

+0

Я пробовал полностью, как вы сказали здесь, но все же я столкнулся с той же проблемой, я обновил свой вопрос, пожалуйста, проверьте, на этот раз я получаю некоторую другую ошибку «smtp не определен» – Misty