From #1876964-34: Improve DX when writing style plugins by adding a renderRowGroup() function

      //What if I don't want to use theme_views_view_grouping in my style plugin.
    $theme_functions = views_theme_functions('views_view_grouping', $this->view, $this->view->display_handler->display);
    foreach ($sets as $set) {
      $row = reset($set['rows']);
      // Render as a grouping set.
      if (is_array($row) && isset($row['group'])) {
        $output[] = array(
          '#theme' => $theme_functions, 
          '#view' => $this->view,
          '#grouping' => $this->options['grouping'][$level],
          '#grouping_level' => $level,
          '#rows' => $set['rows'],
          '#title' => $set['group'],

Proposed resolution

Replace views_view_grouping with $this->grouping_theme.
Or move $theme_functions = views_theme_functions('views_view_grouping', $this->view, $this->view->display_handler->display); to helper function.

Remaining tasks

Better Title.
Finalize the approach.
Create a patch.

User interface changes


API changes


#1876964: Improve DX when writing style plugins by adding a renderRowGroup() function
#1961702: Rename renderSingleGroup to renderRowGroup

#10 1963420-10.patch1.34 KBjibran
PASSED: [[SimpleTest]]: [MySQL] 55,915 pass(es). View
#10 interdiff.txt883 bytesjibran
#7 1963420-7.patch1.37 KBjibran
PASSED: [[SimpleTest]]: [MySQL] 56,245 pass(es). View
#7 interdiff.txt763 bytesjibran
#2 1963420-2.patch1.37 KBjibran
PASSED: [[SimpleTest]]: [MySQL] 54,140 pass(es). View
Members fund testing for the Drupal project. Drupal Association Learn more


xjm’s picture

If we create new methods, we should camelCase() them. (Soon we will activate a big meta to rename all the methods in the codebase that are still under_scores.)

jibran’s picture

Status: Active » Needs review
1.37 KB
PASSED: [[SimpleTest]]: [MySQL] 54,140 pass(es). View

Thanks @xjm for explaining that.
Here is the patch using $this->groupingTheme approach.

dawehner’s picture

For sure this patch looks pretty fine

+++ b/core/modules/views/lib/Drupal/views/Plugin/views/style/StylePluginBase.phpundefined
@@ -83,6 +83,18 @@
+   *
+   * @see \Drupal\views\Plugin\views\style\StylePluginBase::render_grouping_sets()

@see should be always after everything else. See

jibran’s picture

Title: Improve DX when writing style plugins » Improve DX when writing style plugins by adding a groupingTheme variable

Thanks @dawehner for having a look on the patch.
I went through the and While creating the patch I copied

    * Stores the rendered field values, keyed by the row index and field name.
    * @see \Drupal\views\Plugin\views\style\StylePluginBase::render_fields()
    * @see \Drupal\views\Plugin\views\style\StylePluginBase::get_field()
    * @var array|null
  protected $rendered_fields;
@see should be always after everything else

It is true for methods but is it true for attributes?

dawehner’s picture

No idea, but I guess it might be better to be consistent.

jhodgdon’s picture gives the order of elements.

jibran’s picture

763 bytes
1.37 KB
PASSED: [[SimpleTest]]: [MySQL] 56,245 pass(es). View

Thank you @jhodgdon for pointing that out. I should have read it last time but it is damn big page :).

dawehner’s picture

Status: Needs review » Reviewed & tested by the community

Thank you.

jhodgdon’s picture

Yes, it is a big page. That is why we now have a nice table of contents at the top so you can find the section you need, hopefully! :)

A couple of notes here:
- You can just refer to @see StylePluginBase::render_grouping_sets() and leave out the namespace, since this is on the same class, if you want.
- I don't think the paragraph of explanation for the @var docs really tells us much that isn't in the first line, but I'm not really against having it there.
- The first line could use a little grammatical cleanup. I suggest:
The theme function used to render the grouping set.

jibran’s picture

883 bytes
1.34 KB
PASSED: [[SimpleTest]]: [MySQL] 55,915 pass(es). View

Thanks @jhodgdon for the suggestions I have updated the patch accordingly

jhodgdon’s picture

Looks good to me, thanks!

alexpott’s picture

Status: Reviewed & tested by the community » Fixed

Committed e614787 and pushed to 8.x. Thanks!

Automatically closed -- issue fixed for 2 weeks with no activity.