If I do

$variables = array(
  'items' => array(
    'Item one',
    'Item two',
    'Item three',
  ),
);

print theme('item_list', $variables);

$variables = array(
  'items' => array(
    'one' => 'Item one',
    'two' => 'Item two',
    'three' => 'Item three',
  ),
);

print theme('item_list', $variables);

The result will be:

<div class="item-list">
  <ul>
    <li class="first">Item one</li>
    <li>Item two</li>
    <li class="last">Item three</li>
  </ul>
</div>

<div class="item-list">
  <ul>
    <li class="first">Item one</li>
    <li class="first">Item two</li>
    <li class="first">Item three</li>
  </ul>
</div>

When using associative arrays, every item has the "first" class, and the "last" class is missing on the last one.

The documentation says nothing about associative arrays on the items parameter, so I think this is a bug that must be fixed. Otherwise we must fix the docs to clarify that only indexed arrays are allowed.

PS: I think this issue doesn't affect Drupal 8 due to the refactorings done at #256827: Various bugs in theme_item_list()

Support from Acquia helps fund testing for Drupal Acquia logo

Comments

danillonunes’s picture

Title: theme_item_list is broken with associative arrays » Issue #1809836: theme_item_list() is broken when items is a associative array
Status: Active » Needs review
FileSize
1.45 KB

Didn't do the tests locally, but I hope there's no test expecting this bugged behaviour.

danillonunes’s picture

Title: Issue #1809836: theme_item_list() is broken when items is a associative array » theme_item_list() is broken when "items" variable is a associative array
danillonunes’s picture

I also improved the tests to cover this case. This patch has just the test change, so now it must no pass.

danillonunes’s picture

And this patch is #1 and #3 merged, aka the patch that must be commited if everything is ok.

danillonunes’s picture

Actually, the last test is redundant now and can be removed.

wundo’s picture

Status: Needs review » Reviewed & tested by the community

I've tested locally is works perfectly.

Next time could you please name the patch file like this: [description]-[issue-number]-[comment-number].patch? http://drupal.org/node/1054616

danillonunes’s picture

Well, so item 1 is the first and item *total number of items* is the last. I don't have to do a weird thing like $i = -1; at start just so I could use a weird if ($i == $num_items - 1) at the end.

webchick’s picture

Assigned: Unassigned » David_Rothstein

Hm. Not sure about this one. Assigning to David.

webchick’s picture

Version: 7.x-dev » 8.x-dev
Assigned: David_Rothstein » Unassigned
Status: Reviewed & tested by the community » Patch (to be ported)

Oh, no I'm not. :) We need a 8.x patch first.

danillonunes’s picture

Version: 8.x-dev » 7.x-dev
Status: Patch (to be ported) » Reviewed & tested by the community

@webchick I'm reverting the changes because 8.x was already fixed by #256827: Various bugs in theme_item_list() :)

webchick’s picture

Assigned: Unassigned » David_Rothstein

Ah, sorry! Missed that. David it is then. :) We don't normally change theme functions in stable releases. This particular case looks fairly harmless, but David is really good at sniffing out "harmless" from actual harmless. ;D

David_Rothstein’s picture

Title: theme_item_list() is broken when "items" variable is a associative array » theme_item_list() is broken when "items" variable is an associative array (followup for tests)
Version: 7.x-dev » 8.x-dev
Assigned: David_Rothstein » Unassigned
Category: bug » task
Status: Reviewed & tested by the community » Active
Issue tags: +7.17 release notes

Looks good to me.

However, the code in Drupal 8 behaves a bit differently from this, and as far as I can see nothing like the test additions in this patch were ever added to Drupal 8 (so this functionality doesn't actually seem to be tested there). That's not so good; I think the tests should be forward-ported.

But in the meantime, committed to 7.x - thanks! http://drupalcode.org/project/drupal.git/commit/ff1d0fc

star-szr’s picture

Title: theme_item_list() is broken when "items" variable is an associative array (followup for tests) » theme_item_list()/item-list.html.twig is broken when "items" variable is an associative array (followup for tests)
Issue summary: View changes
Issue tags: +rc eligible, +Needs tests

If we're just adding tests it's eligible for RC.

Version: 8.0.x-dev » 8.1.x-dev

Drupal 8.0.6 was released on April 6 and is the final bugfix release for the Drupal 8.0.x series. Drupal 8.0.x will not receive any further development aside from security fixes. Drupal 8.1.0-rc1 is now available and sites should prepare to update to 8.1.0.

Bug reports should be targeted against the 8.1.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.2.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.1.x-dev » 8.2.x-dev

Drupal 8.1.9 was released on September 7 and is the final bugfix release for the Drupal 8.1.x series. Drupal 8.1.x will not receive any further development aside from security fixes. Drupal 8.2.0-rc1 is now available and sites should prepare to upgrade to 8.2.0.

Bug reports should be targeted against the 8.2.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.3.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.2.x-dev » 8.3.x-dev

Drupal 8.2.6 was released on February 1, 2017 and is the final full bugfix release for the Drupal 8.2.x series. Drupal 8.2.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.3.0 on April 5, 2017. (Drupal 8.3.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.3.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.4.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.3.x-dev » 8.4.x-dev

Drupal 8.3.6 was released on August 2, 2017 and is the final full bugfix release for the Drupal 8.3.x series. Drupal 8.3.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.4.0 on October 4, 2017. (Drupal 8.4.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.4.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.5.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.4.x-dev » 8.5.x-dev

Drupal 8.4.4 was released on January 3, 2018 and is the final full bugfix release for the Drupal 8.4.x series. Drupal 8.4.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.5.0 on March 7, 2018. (Drupal 8.5.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.5.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.6.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.5.x-dev » 8.6.x-dev

Drupal 8.5.6 was released on August 1, 2018 and is the final bugfix release for the Drupal 8.5.x series. Drupal 8.5.x will not receive any further development aside from security fixes. Sites should prepare to update to 8.6.0 on September 5, 2018. (Drupal 8.6.0-rc1 is available for testing.)

Bug reports should be targeted against the 8.6.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.7.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.6.x-dev » 8.8.x-dev

Drupal 8.6.x will not receive any further development aside from security fixes. Bug reports should be targeted against the 8.8.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.9.x-dev branch. For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

Version: 8.8.x-dev » 8.9.x-dev

Drupal 8.8.7 was released on June 3, 2020 and is the final full bugfix release for the Drupal 8.8.x series. Drupal 8.8.x will not receive any further development aside from security fixes. Sites should prepare to update to Drupal 8.9.0 or Drupal 9.0.0 for ongoing support.

Bug reports should be targeted against the 8.9.x-dev branch from now on, and new development or disruptive changes should be targeted against the 9.1.x-dev branch. For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

Version: 8.9.x-dev » 9.2.x-dev

Drupal 8 is end-of-life as of November 17, 2021. There will not be further changes made to Drupal 8. Bugfixes are now made to the 9.3.x and higher branches only. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.2.x-dev » 9.3.x-dev

Version: 9.3.x-dev » 9.4.x-dev

Drupal 9.3.15 was released on June 1st, 2022 and is the final full bugfix release for the Drupal 9.3.x series. Drupal 9.3.x will not receive any further development aside from security fixes. Drupal 9 bug reports should be targeted for the 9.4.x-dev branch from now on, and new development or disruptive changes should be targeted for the 9.5.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.4.x-dev » 9.5.x-dev

Drupal 9.4.9 was released on December 7, 2022 and is the final full bugfix release for the Drupal 9.4.x series. Drupal 9.4.x will not receive any further development aside from security fixes. Drupal 9 bug reports should be targeted for the 9.5.x-dev branch from now on, and new development or disruptive changes should be targeted for the 10.1.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.5.x-dev » 11.x-dev

Drupal core is moving towards using a “main” branch. As an interim step, a new 11.x branch has been opened, as Drupal.org infrastructure cannot currently fully support a branch named main. New developments and disruptive changes should now be targeted for the 11.x branch. For more information, see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.