Changing the MIME type so a page returns a CSV file?

For questions and problems with the CMS core. This board is NOT for any 3rd party modules, addons, PHP scripts or anything NOT distributed with the CMS made simple package itself.
Locked
ChrisC

Changing the MIME type so a page returns a CSV file?

Post by ChrisC »

Hi,

I have a page that I want to be served with a MIME type "text/csv" so that it opens with Excel or a similar app that is registered to handle comma-separatated value files.  Is there any way I can change the mime type (and, ideally, extension) for a CMSMS page?

I've tried something like "," but that doesn't seem to override.  I might be able to figure out a mod_rewite in Apache, but doing it from CMSMS would be more clean and portable.

Thanks,


CJC
jelle

Re: Changing the MIME type so a page returns a CSV file?

Post by jelle »

Just discovered that you can define your own tags (under extensions). The tag itself is made up of a snippet of normal php code. With php you could change any header any way you like, so probably you could change it to a .csv  file. 
If the header is changed later in the processing you might be out of luck though, but I think it is worth the experiment.
jelle

Re: Changing the MIME type so a page returns a CSV file?

Post by jelle »

ok, instead of just thinking out loud it tried this out: (it didn't work...)
first I defined a user defined tag like this:
name: csv-mimetype

Code: Select all

 header("Content-Type: text/csv; Extension=.cvs"); 
then defined a template csv-mimetype with this content:

Code: Select all

{csv-mimetype}
{content}
and finally wrote a page with one line containing 1,2,3,4,5,6,7 etc.

Clicking on the link in the menu(called csv_test.html just opened the file in my browser. cmsms had also appended these two lines:

Code: Select all

<!-- Generated in 0.319889 seconds by CMS Made Simple 0.11.2 (cached) using 9 SQL queries -->
<!-- CMS Made Simple - Released under the GPL - http://cmsmadesimple.org -->
Either I am doing something wrong (eg. didn't use the tags feature correctly) or this is not the way to do it.
ChrisC

Re: Changing the MIME type so a page returns a CSV file?

Post by ChrisC »

Thanks for the suggestions.  They were certainly on the right track.  A custom tag worked, but my solution's a bit hacky.  Turns out that a Content-Type header is sent by index.php, and that trumps any header sent from a user-defined tag.  However, since the header comes from the global variables, it's possible to override the value.

Code: Select all

global $gCms;
$gCms->variables['content-type'] = "application/vnd.ms-excel";
header("Content-disposition: attachment; filename=report.csv");
Turns out the text/csv MIME type isn't registered by default with browsers (although there's an RFC for it), but an Excel-specific MIME type works on all my Windows boxes.  I added a Content-disposition header so that the filename doesn't show up as index.php.

I don't know for certain if there are any side-effects to changing that global.  If an 'if' statement looks at the value after I set it, results could be unpredictable.  Plus, the code depends on external behavior that could change in a future CMSMS release.  But, hey, it works.  Further testing is in order...
Locked

Return to “CMSMS Core”