Search code examples
coldfusioncoldfusion-9cfcapplication.cfc

Coldfusion mapping cfinclude


I am trying to use mappings for the first time and I am having some issues. In my CFadmin I created a mapping which goes like this:

Logical Path:

/email_sender

Directory Path:

E:\sites\Example.Com\cf_modules\autoresponders\Emails\emailLists

I am trying to access the include file from a .cfc. Inside my cfc I have an include file which is in the same folder and it works just fine but that include file is tying to access another include file based on the information I am passing through.

The include file inside the component has this code in it.

<cfmail from="#emailData.sender#" to="#surveymain.email#" subject="#subject#"  type="HTML" >
    <cfinclude template="#emailData.includePath#" >
</cfmail>    

Just to be more clear this is my total filesystem:

access.cfm -> some.cfc -> include_1 (works) -> include_2 (issue with the path)

I have a try/catch which emails me the errors and it is located inside the include_1.

How can I use the mapping that I created to finally be able to access my include file?

Please note that after emailLists I have dynamic folders which change depending on which client I am trying to send the email to. So the end result of the path would be:

E:\sites\Example.Com\cf_modules\autoresponders\Emails\emailLists\client_A\email_template.cfm

I tried using my mapping by doing this <cfinclude template="/email_sender/#emailData.includePath#" >

which gave me this error:

The path to the CFC must be specified as a full path, or as a relative path from the current template, without the use of mappings.

Also, I tried including a full path in the cfinclude whic also resulted in the following error:

Note: If you wish to use an absolute template path (for example, >template="/mypath/index.cfm") with CFINCLUDE, you must create a mapping for the path using the ColdFusion Administrator. Or, you can use per-application settings to specify mappings specific to this application by specifying a mappings struct to THIS.mappings in Application.cfc.
Using relative paths (for example, template="index.cfm" or template="../index.cfm") does not require the creation of any special mappings. It is therefore recommended that you use relative paths with CFINCLUDE whenever possible.

Any help/suggestion would be much appreciated

Edit: After restarting the server the version that worked was this one: <cfinclude template="/email_sender/#emailData.includePath#" >

Thanks to those who replied.


Solution

  • Some questions, rather than some answers.

    1. Did you set the mapping in CFAdmin or in Application.cfc?
    2. What do you get if you run the code below?

      #expandPath("/email_sender")#

    3. What is the value of #emailData.includePath#?

    4. What is the value of this: #expandPath("/email_sender#emailData.includePath#")#?
    5. Can you provide us with the exact text of the error messages, rather than vaguely describing them.
    6. What is the value of #fileExists(expandPath("/email_sender#emailData.includePath#"))#?

    If you can update your question with that info, you'll either spot where you're going wrong, or we can help to work out what the story is