CSV value templates
Note
This section describes using CSV value templates in your configuration file. For information on CSV field templates, see the "CSV field templates". For information on CSV file templates, see the "CSV file templates" section.
Applying CSV value templates to rows in your input CSV
In create and update tasks, you can configure templates that are applied to all the values in a CSV column (or to each subvalue if you have multiple values in a single field) as if the templated text were present in the values in your CSV file. The templates are configured in the csv_value_templates option. An example looks like this:
csv_value_templates:
- field_linked_agent: relators:aut:person:$csv_value
For each value in the named CSV field (in this example, field_linked_agent), Workbench will apply the template text (in this example, relators:aut:person:) to the CSV value, represented in the template as $csv_value. An input CSV file that looks like this:
file,id,title,field_model,field_linked_agent
IMG_2940.JPG,03,Looking across Burrard Inlet,25,"Jordan, Mark|Cantelo, M."
will have the template relators:aut:person:$csv_value applied to so it is converted to:
file,id,title,field_model,field_linked_agent
IMG_2940.JPG,03,Looking across Burrard Inlet,25,"relators:aut:person:Jordan, Mark|relators:aut:person:Cantelo, M."
This example configuration defines only one field/template pair, but csv_value_templates can define multiple field/template pairs, for example:
csv_value_templates:
- field_linked_agent: relators:aut:person:$csv_value
- field_subject: subject:$csv_value
- field_local_identifier: SFU-$uuid_string
The following template variables are available:
$csv_value: The verbatim string value of the field.$file: The verbatim value of thefilecolumn in the row.$filename_without_extension: The filename portion only (with no leading directory path or file extension) in thefilecolumn in the row.$weight: The value of thefield_weightcolumn in the CSV, or for paged content created using the "Using subdirectories" option, the sequence number embedded in the page's filenme.$random_alphanumeric_string: A randomly generated string containing numbers and mixed-case letters. This string's default length is 5 characters, but this can be overridden by includingcsv_value_templates_rand_lengthin your configuration file, e.g.csv_value_templates_rand_length: 10.$random_number_string: A randomly generated string containing only numbers. This string's default length is 5 characters, but this can be overridden by includingcsv_value_templates_rand_lengthin your configuration file, e.g.csv_value_templates_rand_length: 10.$uuid_string: A valid version 4 UUID.
A few things to note about CSV value templates:
- The variable can be anywhere in your template (beginning, middle, or end).
- You can only define a single template for a given field in
csv_value_templates, but you can include multiple variables in a single template. If multiple variables are present in a template, they are applied in the order listed above. - If a CSV field contains multiple subvalues, the same template is applied to all subvalues in the field (as illustrated above).
- Values in the templated CSV output are validated against Drupal's configuration in the same way that values present in your CSV are validated.
- By default, CSV value templates won't be applied to empty fields. However, if you want a template to be applied to a field if that field is empty, you can include the
allow_csv_value_templates_if_field_emptysetting in your config file defining a list of column names. For example,allow_csv_value_templates_if_field_empty: [field_identifier]will apply any templates defined forfield_identifierin yourcsv_value_templatessetting, even iffield_identifieris empty in your input CSV; for example, the following will apply the template defined in the above example configuration even if the named fields are empty:
allow_csv_value_templates_if_field_empty: ['field_local_identifier', 'field_subject']
Applying CSV value templates to paged content
Paged content (or as sometimes referred to, children) created using the "Using subdirectories" method do not have their own rows in input CSV files. Any fields that are configured to be "required" in the parent and child's content type are copied from the parent's CSV row and applied to all that parent's pages/children.
If you want to add non-required field data to pages/children, you can use CSV value templates to do that:
- the CSV row that is used as the source of
$csv_valueis the page's (or child's) parent row; in other words, the value of$csv_valueis inherited from a page/child's parent row - the
$filevariable is the name of the page/child's filename (and$filename_without_extensionis derived from this value) - the
$weightvariable is taken from the page/child's sequence indicator, e.g. a filename ofpage-002.jpgwould result in a$weightvalue of "2".
If you want to apply CSV field templates to page/child items using this technique, register the templates in the csv_value_templates_for_paged_content config setting. The structure of the field-to-template mappings is identical to those used in the csv_value_templates setting as illustrated above. For example:
csv_value_templates_for_paged_content:
- field_linked_agent: relators:aut:person:$csv_value
- field_edtf_date_issued: $csv_value
- field_local_identifier: $csv_value-$weight
The template is applied to each value in the source field, so
Even though this section documents how to apply templates with variables, you can also apply "templates" to pages/child items that are complete values, that do not use variables. For example, if you want to add the term "Newspapers" to the field_genre field in each page in a newspaper issue, you can register that string as your "template", e.g.
csv_value_templates_for_paged_content:
- field_genre: Newspapers
If you use a template that contains no variables, you can use multiple hard-coded values (separated with the | or whatever you have configure in the subdelimiter setting) provided the target field supports multiple values:
csv_value_templates_for_paged_content:
- field_genre: Newspapers|Text