Pokročilejší přetěžování funkcí vzhledu v Drupalu

Každý vývojář Drupalu jistě ví, jak přetížit všechny theme funkce v tématu vzhledu. Tento postup je ve valné většině případů dostačující. Já jsem se však setkal se situací, kdy tento postup nestačí.

Mám totiž více vlastních modulů, ve kterých potřebuji přetěžovat některé konkrétní theme funkce. Bohužel Drupal neumožňuje přetěžování pomocí názvu vlastního modulu, ale pouze názvu tématu či šablonovacího systému. A je jasné, že definovat stejnou funkci prostě není možné.

Nejprve jsem si myslel, že to prostě jinak nepůjde, ale nakonec jsem nalezl jeden postup, který využívá hook hook_theme_registry_alter, díky kterému je to možné. Nicméně přetížení tímto způsobem není zcela stoprocentní z toho důvodu, že takto přetíženou theme funkce již nelze dále přetěžovat klasickým způsobem. To z toho důvodu, že je tento hook volán až po provedení všech přetížení – obsahuje vlastně všechna data o všech zaregistrovaných theme funkcích. Jeho volání však není náročné, protože je vyvolán je po vymazání cache.

Já jsem si tento postup ještě vylepšil o možnost dalšího klasického přetěžování. Dosáhl jsem toho zcela jednoduše definováním nových theme funkcí a použíti mezikroku.

Syndikovat obsah