Content last modified Monday 6 March 2017
hop to #bottom
About It:
Rate it:
  • Helpful?
  • 1 Yes
  • 0 No
Flag it:

If you'd like to provide updated information and do not have access to directly edit, please contact the site admin; thanks!

Custom fields for files

I updated to RC3 and love the file support, but I was missing one thing: custom fields for additional informations like file author. So today I tried to implement it and it works good for me. I decided to share this hack with people who are new to php or who have no time to do it themselves.

This hack changes the table structure of txp_file and the following files:
lang/your_lang.txt (optional)

It is recommended to backup your database and these files.

The hack will only work with RC3 (because there’s no file support without it ;)).

Modifying the structure of txp_file
Open your phpmyadmin, select your textpattern databas and click on SQL. Now insert the following into the textarea:

ALTER TABLE `txp_file` ADD `custom_1` VARCHAR( 255 ) NOT NULL ,
ADD `custom_2` VARCHAR( 255 ) NOT NULL ,
ADD `custom_3` VARCHAR( 255 ) NOT NULL ,
ADD `custom_4` VARCHAR( 255 ) NOT NULL ,
ADD `custom_5` VARCHAR( 255 ) NOT NULL ,
ADD `custom_6` VARCHAR( 255 ) NOT NULL ,
ADD `custom_7` VARCHAR( 255 ) NOT NULL ,
ADD `custom_8` VARCHAR( 255 ) NOT NULL ,
ADD `custom_9` VARCHAR( 255 ) NOT NULL ,
ADD `custom_10` VARCHAR( 255 ) NOT NULL ;

Click on OK.

Modifying include/txp_file.php
Open include/txp_file.php.

Search for: $form = ''; (Line #200).
Add after:

// custom fields for files (hack by ezee)
$customfields  = custField(  1, $customf_1_set,  $custom_1 ); 
$customfields .= custField(  2, $customf_2_set,  $custom_2 ); 
$customfields .= custField(  3, $customf_3_set,  $custom_3 ); 
$customfields .= custField(  4, $customf_4_set,  $custom_4 ); 
$customfields .= custField(  5, $customf_5_set,  $custom_5 ); 
$customfields .= custField(  6, $customf_6_set,  $custom_6 ); 
$customfields .= custField(  7, $customf_7_set,  $custom_7 ); 
$customfields .= custField(  8, $customf_8_set,  $custom_8 ); 
$customfields .= custField(  9, $customf_9_set,  $custom_9 ); 
$customfields .= custField( 10, $customf_10_set, $custom_10 );

Search for:

graf(gTxt('description').br.text_area('description','100','400',$description)) .
(Line #231)
Add after: $customfields . // custom fields for files

Search for: hInput('description',$description). (line #254)
Add after: $customfields . // custom fields for files

Search for:

(line #423)
Add after:
'custom_1', 'custom_2', 'custom_3', 'custom_4', 'custom_5', 'custom_6', 'custom_7', 'custom_8', 'custom_9', 'custom_10'

Should now look like this:
extract(doSlash(gpsa(array('id','filename','category','description', 'custom_1', 'custom_2', 'custom_3', 'custom_4', 'custom_5', 'custom_6', 'custom_7', 'custom_8', 'custom_9', 'custom_10'))));

Search for: description = '$description'" (line #459)
Replace with:

description = '$description',
custom_1    = '$custom_1',
custom_2    = '$custom_2',
custom_3    = '$custom_3',
custom_4    = '$custom_4',
custom_5    = '$custom_5',
custom_6    = '$custom_6',
custom_7    = '$custom_7',
custom_8    = '$custom_8',
custom_9    = '$custom_9',
custom_10   = '$custom_10'"

Search for:

(end of file)
Add before:
// ——————————————————————————————-
	function custField($num,$field,$content) 
		if(gTxt(‘customf_’.$num)) $field = gTxt(‘customf_’.$num);

return graf($field . br . fInput(‘text’, ‘custom_’.$num, $content,‘edit’)); }

Save and close file.

Modifying publish/taghandlers.php
Open publish/taghandlers.php.

Search for: $out = str_replace("<txp:file_download_description />", $finfo['description'], $out); (line #1318)
Add after:

// custom fields for files (hack by ezee)
$out = str_replace("<txp:file_download_custom1 />", $finfo['custom_1'], $out);
$out = str_replace("<txp:file_download_custom2 />", $finfo['custom_2'], $out);
$out = str_replace("<txp:file_download_custom3 />", $finfo['custom_3'], $out);
$out = str_replace("<txp:file_download_custom4 />", $finfo['custom_4'], $out);
$out = str_replace("<txp:file_download_custom5 />", $finfo['custom_5'], $out);
$out = str_replace("<txp:file_download_custom6 />", $finfo['custom_6'], $out);
$out = str_replace("<txp:file_download_custom7 />", $finfo['custom_7'], $out);
$out = str_replace("<txp:file_download_custom8 />", $finfo['custom_8'], $out);
$out = str_replace("<txp:file_download_custom9 />", $finfo['custom_9'], $out);
$out = str_replace("<txp:file_download_custom10 />", $finfo['custom_10'], $out);

Search for: 'modified' => 0 (line #1366)
Replace with:

'modified' => 0,
'custom_1' => '',
'custom_2' => '',
'custom_3' => '',
'custom_4' => '',
'custom_5' => '',
'custom_6' => '',
'custom_7' => '',
'custom_8' => '',
'custom_9' => '',
'custom_10' => ''

Search for: $result['downloads'] = $downloads; (line #1387)
Add after:

// custom fields for files (hack by ezee)
$result['custom_1'] = $custom_1;
$result['custom_2'] = $custom_2;
$result['custom_3'] = $custom_3;
$result['custom_4'] = $custom_4;
$result['custom_5'] = $custom_5;
$result['custom_6'] = $custom_6;
$result['custom_7'] = $custom_7;
$result['custom_8'] = $custom_8;
$result['custom_9'] = $custom_9;
$result['custom_10'] = $custom_10;

Save and close file.

Modifying lib/admin_config.php
Open lib/admin_config.php.

Search for: 'custom_10_set' => '', (line #129)
Add after:

// -------------------------------------------------------------
// use custom fields for files - must be in 'quotes', and 
// must contain no spaces (hack by ezee)
	'customf_1_set'                => 'Author'',
	'customf_2_set'                => 'AuthorEmail',
	'customf_3_set'                => '',
	'customf_4_set'                => '',
	'customf_5_set'                => '',
	'customf_6_set'                => '',
	'customf_7_set'                => '',
	'customf_8_set'                => '',
	'customf_9_set'                => '',
	'customf_10_set'               => '',

Here you can set your custom fields for files.

Save and close file.

Modiyfying lang/your_lang.txt (optional)
In order to display the fields (in textpattern admin) with a different title than set in admin_config.php, you can add the following line to your language file (de-de.txtfor example ;)):

customf_1 => Author of file
customf_2 => Author Email
customf_3 => unset
customf_4 => unset
customf_5 => unset
customf_6 => unset
customf_7 => unset
customf_8 => unset
customf_9 => unset
customf_10=> unset

The hack will first look for titles in the language file.

How to show the custom fields on my site
Just use <txp:file_download_custom1 /> (replace the 1 with the number of the custom field you want to display).

So that’s it. I hope I didn’t forget any of my changes. Looks quite complicated but it’s just search and add or replace ;).

Looking forward to every comment and feedback. :)

Article Request Count:
Initially released:
Posted here:
04 Apr 2005
Article modified:
02 Nov 2006

You may want to leave your comments/questions at the Forum thread for quicker feedback. Otherwise, comment away:

Commenting is closed for this article.

Commented (3)

This is great, I think textpattern should include more custom field like this by default. Its so convenient to generate file download lists, but the downside is that if the database doesn’t already have the values attached to the files that you would like to display, they simply cannot be added to the generated list, and you would have to add them manually somehow. Thanks for writing this, I wonder if this could be used to attach a thumbnail preview of files as well, that would be awesome. I’ll post back after I fiddle with it.

Does textpattern parse textile when you output custom fields like this?

Nevermind the question. This seems like a great idea but the method is outdated. I can’t find most of the information that needs to be modified in the current 4.0.6 build.

Subscribe to this article's comments RSS feed. [ ? ]   View Recent Comments across the site.

You know you want to visit the Archives.




There are also tag clouds, 'cause those are fun.
Published with Textpattern