diff --git a/web/themes/custom/popsu/popsu.theme b/web/themes/custom/popsu/popsu.theme index d3b2c5d8..063e20c1 100644 --- a/web/themes/custom/popsu/popsu.theme +++ b/web/themes/custom/popsu/popsu.theme @@ -61,4 +61,47 @@ function popsu_preprocess_views_view_unformatted(&$variables) { */ // function popsu_preprocess_block(&$variables) { // $t="t"; -// } \ No newline at end of file +// } + +function popsu_preprocess_views_view_field(&$variables){ + // check if link to entoty option is true + $settings = $variables['field']->options['settings']; + if ($settings['link_to_entity']) { + // get the entity and build the classes + $entity = $variables['row']->_entity; + // build new classes + $new_classes = array( + $entity->getEntityTypeId(), + $entity->getEntityTypeId().'-'.$entity->bundle(), + $entity->getEntityTypeId().'-'.$entity->bundle().'-'.$entity->id() + ); + + // get the entity link and url + $link = $entity->toLink(); + $url = $entity->toLink()->getUrl(); + + // set the active_class option to the url + $url->setOption('set_active_class', true); + + // add new classes to the url (without overwriting existing once) + $options = $url->getOptions(); + if($attributes = $options['attributes']){ + if($classes = $attributes['class']){ + $attributes['class'] += $new_classes; + }else{ + $attributes['class'] = $new_classes; + } + }else{ + $attributes = array( + "class" => $new_classes + ); + } + $url->setOption('attributes', $attributes); + + // update the url of the link + $link->setUrl($url); + + // overwrite the output + $variables['output'] = $link->toRenderable(); + } +} \ No newline at end of file diff --git a/web/themes/custom/popsu/templates/views/views-view-field.html.twig b/web/themes/custom/popsu/templates/views/views-view-field.html.twig new file mode 100644 index 00000000..04a20ac5 --- /dev/null +++ b/web/themes/custom/popsu/templates/views/views-view-field.html.twig @@ -0,0 +1,23 @@ +{# +/** + * @file + * Default theme implementation for a single field in a view. + * + * Available variables: + * - view: The view that the field belongs to. + * - field: The field handler that can process the input. + * - row: The raw result of the database query that generated this field. + * - output: The processed output that will normally be used. + * + * When fetching output from the row this construct should be used: + * data = row[field.field_alias] + * + * The above will guarantee that you'll always get the correct data, regardless + * of any changes in the aliasing that might happen if the view is modified. + * + * @see template_preprocess_views_view_field() + * + * @ingroup themeable + */ +#} +{{ output -}}