Error message

  • Deprecated function: Return type of Aws\HandlerList::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 32 of /var/www/html/vendor/aws/aws-sdk-php/src/HandlerList.php).
  • Deprecated function: Return type of Aws\Api\AbstractModel::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 7 of /var/www/html/vendor/aws/aws-sdk-php/src/Api/AbstractModel.php).
  • Deprecated function: Return type of Aws\Api\AbstractModel::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 7 of /var/www/html/vendor/aws/aws-sdk-php/src/Api/AbstractModel.php).
  • Deprecated function: Return type of Aws\Api\AbstractModel::offsetSet($offset, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 7 of /var/www/html/vendor/aws/aws-sdk-php/src/Api/AbstractModel.php).
  • Deprecated function: Return type of Aws\Api\AbstractModel::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 7 of /var/www/html/vendor/aws/aws-sdk-php/src/Api/AbstractModel.php).
  • Deprecated function: Return type of Aws\Endpoint\Partition::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 13 of /var/www/html/vendor/aws/aws-sdk-php/src/Endpoint/Partition.php).
  • Deprecated function: Return type of & Aws\Endpoint\Partition::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 13 of /var/www/html/vendor/aws/aws-sdk-php/src/Endpoint/Partition.php).
  • Deprecated function: Return type of Aws\Endpoint\Partition::offsetSet($offset, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 13 of /var/www/html/vendor/aws/aws-sdk-php/src/Endpoint/Partition.php).
  • Deprecated function: Return type of Aws\Endpoint\Partition::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 13 of /var/www/html/vendor/aws/aws-sdk-php/src/Endpoint/Partition.php).
  • Deprecated function: Aws\Credentials\Credentials implements the Serializable interface, which is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary) in include() (line 8 of /var/www/html/vendor/aws/aws-sdk-php/src/Credentials/Credentials.php).
  • Deprecated function: Return type of Aws\Command::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 7 of /var/www/html/vendor/aws/aws-sdk-php/src/Command.php).
  • Deprecated function: Return type of & Aws\Command::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 7 of /var/www/html/vendor/aws/aws-sdk-php/src/Command.php).
  • Deprecated function: Return type of Aws\Command::offsetSet($offset, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 7 of /var/www/html/vendor/aws/aws-sdk-php/src/Command.php).
  • Deprecated function: Return type of Aws\Command::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 7 of /var/www/html/vendor/aws/aws-sdk-php/src/Command.php).
  • Deprecated function: Return type of Aws\Command::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 7 of /var/www/html/vendor/aws/aws-sdk-php/src/Command.php).
  • Deprecated function: Return type of Aws\Command::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 7 of /var/www/html/vendor/aws/aws-sdk-php/src/Command.php).
  • Deprecated function: Return type of Aws\Result::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 9 of /var/www/html/vendor/aws/aws-sdk-php/src/Result.php).
  • Deprecated function: Return type of & Aws\Result::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 9 of /var/www/html/vendor/aws/aws-sdk-php/src/Result.php).
  • Deprecated function: Return type of Aws\Result::offsetSet($offset, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 9 of /var/www/html/vendor/aws/aws-sdk-php/src/Result.php).
  • Deprecated function: Return type of Aws\Result::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 9 of /var/www/html/vendor/aws/aws-sdk-php/src/Result.php).
  • Deprecated function: Return type of Aws\Result::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 9 of /var/www/html/vendor/aws/aws-sdk-php/src/Result.php).
  • Deprecated function: Return type of Aws\Result::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 9 of /var/www/html/vendor/aws/aws-sdk-php/src/Result.php).
  • Warning: Undefined array key "nid" in views_handler_field_term_node_tid->pre_render() (line 98 of /var/www/html/docroot/sites/all/modules/views/modules/taxonomy/views_handler_field_term_node_tid.inc).
  • Warning: Undefined array key "nid" in views_handler_field_term_node_tid->pre_render() (line 98 of /var/www/html/docroot/sites/all/modules/views/modules/taxonomy/views_handler_field_term_node_tid.inc).
×

Entertainment

Meet the two promoted teams in the Bundesliga for the 2023-24 season

Agony and ecstasy go hand in hand. The pain of losing is heightened when victory is within reach, only to be snatched at the final second with no hope of recovery. Such is the nature of the final day of a soccer season. 

Many will know that the Bundesliga title was decided on the final day, as Borussia Dortmund surrendered its lead over Bayern Munich with a 2-2 draw against Mainz. What may have flown under the radar for global soccer fans is the unhinged chaos that ensued in the German second division just one day later, so let's meet the two newest members of the Bundesliga and learn how they got here.

1. FC Heidenheim 1846

Frank Schmidt’s side entered the league’s final day second best. One point above third-place Hamburg and three points behind league-leading Darmstadt, Heidenheim needed miracles to happen across Germany if they wanted any chance of clinching the league title, but the club could've lost its automatic promotion place just as easily.

An uneventful first 45 minutes against Jahn Regensburg gave way to a second half for the history books. The home side broke the deadlock in the 51st minute before promptly scoring a second, pushing Heidenheim down to third as Hamburg had taken the lead early in its game. On the road against Greuther Fürth, Darmstadt was experiencing a meltdown of its own. Down a man, the visitors suddenly trailed 2-0 on a day when a single point would secure the title.

Almost simultaneously, Regensburg scored an own goal, halving its lead, and with this pair of divine interventions, the door was opened for Heidenheim, though they may not have known it at the time.

Schmidt and his team had been one of the best-attacking sides all season, thanks to the incredible duo of Tim Kleindienst and Jan-Niklas Beste. 

The former scored 24 goals, five more than second place, en route to being named the league’s top scorer. Beste scored 11 goals for Heidenheim, good enough for the side’s next-best tally, but it was his passing that stole the show. The 24-year-old German provided 12 assists, the joint-highest tally in the 2. Bundesliga. But none of that mattered anymore. Down 2-0 their season hung in the balance, and as the match crept up to the 90-minute mark, they were running out of time. 

Hamburg hung on to its lead for a 1-0 win, causing a premature celebration as fans rushed the field. Meanwhile, in Regensburg, Beste scored his 12th league goal from a penalty kick in the 92nd minute, leveling the score and putting his side within touching distance of not just promotion, but the league title. 

With all eyes now squarely on Heidenheim, the seconds ticked away, quickly reaching the 99th minute. A desperate cross into the box danced between defenders and attackers alike before finding the foot of Kleindienst, unmarked and with the entire goal to shoot at. 

As Hamburg’s fans watched, standing helplessly from Sandhausen’s pitch, the 27-year-old German forward unleashed his shot, finding the back of the net for his 25th of the season, crowning his side champions on goal difference and dooming Die Rothosen to the promotion playoff. Heidenheim had never led the league until that second. 

Promotion doesn’t get much better than this, but immediately the club’s focus turns to survival ahead of its first-ever Bundesliga season. With a potent attack and superb defense — Heidenheim ranked second best in the 2. Bundesliga for both goals against (GA) and expected goals against (xGA) — the club’s aim should likely be to keep the squad intact and add some new players that fit the team’s system while still allowing the current side to flourish. Affordable and data-backed signings would go a long way toward staying in the top flight beyond 2024, proving that this miracle was no fluke. 

SV Darmstadt 1898

From the victors to the vanquished, Darmstadt went into the final day as champions-elect thanks to their three-point lead over Heidenheim. Just a point on the road against lower midtable side Greuther Fürth would be enough to lift the trophy, but a 4-0 capitulation that would make Dortmund fans cringe meant the Meisterschale trophy ended up in their rivals' hands. 

For their efforts, Torsten Lieberknecht’s side was still rewarded with a spot in the Bundesliga for next year, but staying up will prove a difficult task. The club was unremarkably average in attack, with the joint-8th most goals scored, and the joint-7th most expected goals (xG), but it excelled at keeping the ball out of its own net. They were the only team in the league to concede less than a goal per game, finishing the season with just 33 GA, but this impressive metric does not come without some skepticism. 

Darmstadt had a good but not great xGA of 1.44 per game but actually conceded 0.97 goals per game. This means that, on average, they allowed nearly half a goal fewer than they would be expected to, adding up to almost 16 goals across the entire season! That kind of luck will almost certainly not last, and against better sides in the Bundesliga, you’d expect them to be punished. 

To prepare for the onslaught that his defense is about to see, Lieberknecht should absolutely reinforce his back-line. Another goalscorer alongside 25-year-old Phillip Tietz would help Die Lilien convert chances more frequently, but a creative midfielder would help create them. It will certainly be an uphill battle for Darmstadt to retain its spot next season, but these changes might just be the difference. 

Videos you might like