Hi all,
Om in drupal > 8 bepaalde template functies te gebruiken, heb ik indertijd de volgende code gevonden op het internet.
voorbeeld code:
Het probleem is echter dat deze de volgende melding geeft en mijn error log ermee vol spamed:
Warning: Trying to access array offset on value of type null in mf_preprocess_views_view_unformatted() (regel 108 van..
Ik heb indertijd al op enkele plaatsen een isset() toegevoegd, maar jammer genoeg ken niet genoeg van php om dit issue volledig op te lossen..
Om in drupal > 8 bepaalde template functies te gebruiken, heb ik indertijd de volgende code gevonden op het internet.
voorbeeld code:
Field level data for Views rows in Drupal 8.
Field level data for Views rows in Drupal 8. . GitHub Gist: instantly share code, notes, and snippets.
gist.github.com
PHP:
/**
* Implements template_preprocess_views_view_unformatted().
*
* Add field data to row level template like D7.
* http://www.focal55.com/article/drupal-8-views-style-swagger
*
* This had a couple of bugs in it from the website so it's not an exact copy.
*/
function mf_preprocess_views_view_unformatted(&$variables)
{
$view = $variables['view'];
$style = $view->style_plugin;
$options = $style->options;
$variables['default_row_class'] = !empty($options['default_row_class']);
foreach ($variables['rows'] as $id => $row_data) {
// Loop through the fields for this row.
$previous_inline = false;
$variables['rows'][$id]['fields'] = []; // ensure it's at least an empty array.
/** @var \Drupal\views\ResultRow $row */
$row = $row_data['content']['#row'];
foreach ($view->field as $field_id => $field) {
// render this even if set to exclude so it can be used elsewhere.
$field_output = $view->style_plugin->getField($row->index, $field_id);
$empty = $field->isValueEmpty($field_output, $field->options['empty_zero']);
if (isset($field->options['exclude']) && (!$empty || (empty($field->options['hide_empty']) && empty($variables['options']['hide_empty'])))) {
$object = new stdClass();
$object->handler = $view->field[$field_id];
$object->inline = !empty($variables['options']['inline'][$field_id]);
// Set up default value of the flag that indicates whether to display a
// colon after the label.
$object->has_label_colon = false;
$object->element_type = $object->handler->elementType(true, !$variables['options']['default_field_elements'], $object->inline); lijn #108
if (isset($object->element_type)) {
$attributes = [];
if (isset($object->handler->options['element_default_classes'])) {
$attributes['class'][] = 'field-content';
}
if ($classes = $object->handler->elementClasses($row->index)) {
$attributes['class'][] = $classes;
}
$object->element_attributes = new Drupal\Core\Template\Attribute($attributes);
}
$object->content = $field_output;
if (isset($view->field[$field_id]->field_alias) && isset($row->{$view->field[$field_id]->field_alias})) {
$object->raw = $row->{$view->field[$field_id]->field_alias};
} else {
$object->raw = null; // make sure it exists to reduce NOTICE
}
if (!empty($variables['options']['separator']) && $previous_inline && $object->inline && $object->content) {
$object->separator = Drupal\Component\Utility\Xss::filterAdmin($variables['options']['separator']);
}
$object->class = Drupal\Component\Utility\Html::cleanCssIdentifier($field_id);
$previous_inline = $object->inline;
// Set up field wrapper element.
$object->wrapper_element = $object->handler->elementWrapperType(true, true);
if (null === $object->wrapper_element && $variables['options']['default_field_elements']) {
$object->wrapper_element = $object->inline ? 'span' : 'div';
}
// Set up field wrapper attributes if field wrapper was set.
if ($object->wrapper_element) {
$attributes = [];
if ($object->handler->options['element_default_classes']) {
$attributes['class'][] = 'views-field';
$attributes['class'][] = 'views-field-'.$object->class;
}
if ($classes = $object->handler->elementWrapperClasses($row->index)) {
$attributes['class'][] = $classes;
}
$object->wrapper_attributes = new Drupal\Core\Template\Attribute($attributes);
}
// Set up field label
$object->label = $view->field[$field_id]->label();
// Set up field label wrapper and its attributes.
if ($object->label) {
// Add a colon in a label suffix.
if ($object->handler->options['element_label_colon']) {
$object->label_suffix = ': ';
$object->has_label_colon = true;
}
// Set up label HTML element.
$object->label_element = $object->handler->elementLabelType(true, !$variables['options']['default_field_elements']);
// Set up label attributes.
if ($object->label_element) {
$attributes = [];
if ($object->handler->options['element_default_classes']) {
$attributes['class'][] = 'views-label';
$attributes['class'][] = 'views-label-'.$object->class;
}
// Set up field label.
$element_label_class = $object->handler->elementLabelClasses($row->index);
if ($element_label_class) {
$attributes['class'][] = $element_label_class;
}
$object->label_attributes = new Drupal\Core\Template\Attribute($attributes);
}
}
$variables['rows'][$id]['fields'][$field_id] = $object;
}
}
}
}
Het probleem is echter dat deze de volgende melding geeft en mijn error log ermee vol spamed:
Warning: Trying to access array offset on value of type null in mf_preprocess_views_view_unformatted() (regel 108 van..
Ik heb indertijd al op enkele plaatsen een isset() toegevoegd, maar jammer genoeg ken niet genoeg van php om dit issue volledig op te lossen..