Programming php: Trying to access array offset on value of type null in..

demon326

Active member
Crowdfunder FE
Hi all,

Om in drupal > 8 bepaalde template functies te gebruiken, heb ik indertijd de volgende code gevonden op het internet.

voorbeeld code:

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..
 
Terug
Bovenaan